먼저 What is bof? 바이너리 파일을 다운로드 받는다.
다운로드 받은 바이너리 파일을 살펴보면 32bit 바이너리 파일이고, 메모리 보호기법으로 NX bit가 걸려있는 것을 확인할 수 있다.
gdb를 사용하여 main함수를 디스어셈해보면, gets함수를 사용하여 입력받으므로 Buffer Overflow가 일어나는 것을 볼 수 있다.
그러나, NX bit가 걸려있기 때문에 RTL을 사용해야 할 것 같은데 라이브러리 파일을 같이 주지 않는다. 그래서 RTL말고 다른 방법을 찾던 중 flag라는 함수가 존재하는 것을 찾았다.
이 flag함수를 디스어셈해보면, system 함수를 실행하는 것을 볼 수 있다. 그리고 이 system 함수의 인자로 /bin/sh를 주는 것을 알 수 있다. 따라서, Buffer Overflow를 통해 RET을 flag함수의 주소로 덮어씌우면 쉘을 획득할 수 있다.
더미값으로 24byte( buffer + SFP )를 전송하고 flag함수의 주소를 전송하면 쉘이 실행된다.
Written by choi_jiung
'CTF 중점 스터디' 카테고리의 다른 글
ShadowCTF Magic Password 풀이 (0) | 2019.11.01 |
---|---|
Pwnable.kr lotto 문제 풀이_ 정세인 (0) | 2019.10.27 |
N00bCTF Where_is_flag 풀이 (0) | 2019.10.27 |
pwnable.kr(Toddler's Bottle_blukat)_정세인 (2) | 2019.10.20 |
Suninatas 16 Write-up (0) | 2019.10.20 |