gdb no aslr ( work in gdb EOF in execute )
기존에 환경을 gdbserver로 맞추어 놓았는데 문제를 풀다보니깐 gdb로 보면서 풀었을때는 되는데 일반 실행과 리모트에서는 안되는 상황이 발생했다. 이럴때는 대부분은 gdbserver가 기본적으로 깔끔하기 위해 완전한 aslr을 끄끼 때문에 이 상황에서의 스택환경이나 구조를 보고 익스를 짜서 생기는 문제이다.
따라서, 실제 상황에서 alsr와 환경을 재현하기 위해서 alsr을 완전히 실행시키고 싶었는데
gdbserver에서는
Shell
pwndbg> show disable-randomization
Disabling randomization of debuggee's virtual address space is unsupported on
this platform.
다음과 같이 이 플랫폼에서는 어쩌고를 해버린다.
따라서
Shell
# old
# p = process(fname)
p = process(fname , env={ 'LD_PRELOAD' : './libc.so.6'} )
gdb.attach(p)
# gdb.attach(p, gdbscript="b main\n")
# new
# p = process(['gdbserver',':31234', fname ]) # gdb -ex "target remote :1234" "$@"
# p = process(
# ['gdbserver', ':31234', fname],
# env={'LD_PRELOAD': './libc.so.6'}
# )기존 코드에서 gdbserver 사용말고 예전 방식인 gdb.attach(p) 로 붙여서 tmux로 실행해주면
Shell
pwndbg> show disable-randomization
Disabling randomization of debuggee's virtual address space is on.
다음과 같이 설정 할 수 있다.