본문 바로가기

CTF/Pwnable

[DreamHack] basic_exploitation_000 Write-up

https://dreamhack.io/wargame/challenges/2

 

basic_exploitation_000

Description 이 문제는 서버에서 작동하고 있는 서비스(basic_exploitation_000)의 바이너리와 소스 코드가 주어집니다. 프로그램의 취약점을 찾고 익스플로잇해 셸을 획득한 후, "flag" 파일을 읽으세요. "f

dreamhack.io

c파일을 열어 살펴보면 버퍼는 0x80 = 128byte인데 scanf로 141바이트를 입력받는다 => stack buffer overflow발생 

 

우선 001과 다르게 버퍼의 메모리주소가 계속 바뀐다 

그러므로 pr가 출력하는 데이터 중 (을 만날 때까지 돌린 후 그 뒤 10개 string을 buf_addr에 저장한다 

=> string이므로 이후 byte로 전환하기 위해 packing해줌

코드가 실행은 되는데 에러가 난다.. 생각해보니 쉘코드를 입력을 안햇다.. ㅎㅎ

 

\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x31\xc9\x31\xd2\xb0\x08\x40\x40\x40\xcd\x80

쉘코드를 payload앞부분에 입력

찾아보니 scanf가 입력받을 때는 공백(' ', 0x20), 개행('\n', 0x0a), 탭(\t, 0x09) 등의 구분 문자가 있으면 거기까지만 받아들이고 그 이후로는 입력 버퍼에 남겨놓기 때문에 payload에 이런문자가 없도록 구성해야한다고 한다.

나머지는 'A'로 채워넣으면 됨 

파일 실행시키면 flag가 나온다