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. 결과 도출

확실히 전 문제에서 삽질을 하다보니 이 문제는 바로 풀었다.
'시스템해킹' 카테고리의 다른 글
| [드림핵] ssp_001 풀이 (0) | 2024.05.03 |
|---|---|
| [드림핵] Return to Shellcode 풀이 (0) | 2024.05.03 |
| [드림핵] basic_exploitation_000 풀이 (0) | 2024.03.28 |
| [드림핵] Return Address Overwrite 풀이 (0) | 2024.03.27 |
| [드림핵] shell_basic 풀이 (1) | 2024.03.26 |