익스를 짜다보면 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 |
댓글0