본문 바로가기
이것저것

gdb.attach() with pwntools

by morae23 2019. 12. 23.

익스를 짜다보면 gdb로 attach하여 디버깅하고 싶을 때가 있다.

이 때 사용할 수 있는 방법에 대해 쓰려고 한다.

 

첫 번째 방법은

exploit 코드 중간에 input() 등의 함수를 넣어두고, gdb에서 직접 attach [pid] 와 같이 붙은 뒤에

브레이크포인트를 걸고 continue하는 방법이다.

 

두 번째 방법은

pwntools에서 제공하는 pwnlib.gdb를 이용하는 것이다. (attach() 이용)

사실 같은 방법이지만, 두 번째 방법을 이용하는 것이 조금 더 간편하다. 하지만 도커 등의 환경에서 작업하는 경우에는 아마 첫 번째 방법이 더 편할 수도 있으니 상황에 맞게 이용하면 된다.

 

 

우선 첫 번째 방법을 기준으로 설명하려고 한다.

1. 먼저 exploit 코드 중간에 raw_input()을 추가하고, 왼쪽 터미널에서 보이는 것과 같이 ex.py를 실행한다.

   1-1) 그 결과 './tmp'라는 바이너리가 실행되었고, pid는 519인 것을 볼 수 있다.

2. 터미널을 하나 더 열어 오른쪽 화면과 같이 $ gdb -p 519 를 입력하여 attach 한다.

   2-1) 이미 gdb가 실행 중이라면,

          (gdb) attach 519 도 동일

3. attach한 뒤에 breakpoint를 설정해준다. 여기서는 (gdb) b *0x0804843e

 

4. breakpoint 설정 이후 continue. (gdb) c

5. 왼쪽 터미널에서 아무 값(개행)이나 입력

6. 오른쪽 터미널에서, 브레이크를 설정한 0x0804843e에 멈춘 것을 볼 수 있음

 

 

두 번째 방법이었던 gdb.attach()를 이용하는 방법은

첫 번째 방법에서 raw_input()을 추가하고, gdb에서 직접 pid로 attach하는 부분을 gdb.attach()로 대신한다고 볼 수 있다.

다만 두 번째 방법에서도 breakpoint는 설정해주어야한다.

'이것저것' 카테고리의 다른 글

[MEMO] SIP 설정 및 해제  (0) 2020.09.03
python에서 C의 rand() 호출하기  (0) 2019.07.04
peda에서 /bin/sh 찾기  (0) 2019.07.04
맥북에 우분투 설치하기(듀얼부팅)  (2) 2019.06.11

댓글