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.

다음과 같이 설정 할 수 있다.