[ Pwntools ] pwntools와 gdb연결하기

sangjun

·

2022. 6. 27. 11:26

반응형

간단 요약

pwntools로 프로그램에 argv를 넘겨주어 디버깅하고 싶은데 바로 프로그램이 실행되서 죽어버릴 때

gdb.debug()를 이용해 _start나 main에 break point걸고 디버깅을 시작한다.

 

실행화면은 아래와 같다.

 

주의 사항 : docker, vscode 터미널등에서는 안됨. 우분투 쉘 프롬프트 창에서만 되는것 같다. 이유는 모르겠다. 

                 io = gdb.debug()를 넣어준 다음 io.interactive()로 세션을 유지시켜줘야 한다. 안 그러면 gdb가 죽음. 이유는

                 부모프로세스가 죽으면 자식프로세스는 고아가 되기 때문이다.

참고: Organizers 형님들 블로그

from pwn import *
exe = context.binary = ELF("./MeshConverter")

def local(argv=[], *a, **kw):
    '''Start the exploit against the target.'''
    print(argv)
    return gdb.debug([exe.path] + argv, gdbscript=gdbscript, *a, **kw)

gdbscript= '''
    break _start
    continue

    # Now set breakpoint on shared library routines
    #break malloc
    #break free
    break main
    continue
    '''

io = local(argv=["./sample.md2","/dev/null"])
io.interactive()

 

 

포너블 1년차따리..

시간을 아끼기 위해 이제 툴에도 신경을 쓸 때가 됐다...

실제로 어떤 도구를 이용하냐에 따라 문제가 풀리고 안 풀릴지가 결정되고

리얼월드에서 발견한 크래시를 치명적인 보안 문제점으로 이끄는데에 중요한 역할은 한다.

 

 

다음은 ida remote debuging까지 추가할 예정..

반응형

2개의 댓글

  • Sechack

    2022.06.28 23:13

    파일 넘겨주는 거면 그냥 gdb에서 run으로 실행하는게 더 편하지 않을까요?

    • sangjun

      2022.06.29 12:03 신고

      넵 그렇긴 하지요. 하지만 이 문제처럼 aslr에 의해 익스가 영향받을 수 있을 때 일반 gdb는 힙 오프셋이 고정되어서 다시 익스를 고쳐야했어요

      이럴때 이 방식으로 하면 remote gdb를 사용하기에 aslr이 적용된 상태로 디버깅을 할 수 있어서 익스를 다시 고치는 불상사가 없더라구요~~