본문 바로가기

시스템해킹

[드림핵] basic_exploitation_001 풀이

728x90

 

문제 설명에서 32bit인 것을 확인하자

 

문제 파일

 

 

main에서 buf에 0x80만큼 받을 수 있고 initialize함수는 30초 뒤 프로그램을 종료하는 것이고

gets으로 buf값을 입력 받는다.

main이 아닌 read_flag 함수를 실행하게 되면 flag를 획득할 수 있다.

 

 

main stack frame

 

buf와 ebp에 쓰레기 값을 넣고 ret에 read_flag 주소를 넣으면 되겠다

 

 

 

풀이 순서

1. gdb 사용 buf값 확인

2. read_flag 주소 확인

3. pwntool 작성

4. 결과 도출 

 

 

 

1. gdb 사용 buf값 확인

 

buf값은 0x80만큼 할당된 것을 볼 수 있다.

 

 

 

2. read_flag 주소 확인

 

 

read_flag의 주소는 0x080485b9 인 것을 확인할 수 있다.

0x080485b9

 

 

 

3. pwntool 작성

 

 

우선 read_flag의 주소를 p32를 사용해 32bit 리틀앤디안 방식으로 변수에 저장하겠다

그리고 buf 0x80, ebp 4바이트 값을 쓰레기값으로 변수에 저장한다.

stack frame에 맞게 buf + ebp => ret 순으로 값을 보내겠다.

 

 

 

4. 결과 도출

 

 

 

 

확실히 전 문제에서 삽질을 하다보니 이 문제는 바로 풀었다.