728x90
[HackCTF] g++
Date | |
---|---|
Tags | report |
1. 문제
NX 비트가 걸려있는 것을 확인 할 수 있다
프로그램을 실행시키면 다음과 같은 문구가 뜨고 입력할 수 있는 공간이 뜬다
그리고 So, + 입력한 문자열이 나온다.
코드를 한번 봐보자
메인 함수는 별게 없다. Vuln함수를 봐보자
vuln 함수는 다음과 같다. c++ 코드로 되어 있는것 같은데 굉장히 복잡해 보인다.
우선 s변수에 fgets로 값을 입력받는다.
그리고 get_flag 함수가 있는데 이거를 실행시켜야 플래그를 획득할 수 있을 것같다
흐름을 보쟈면, fgets 함수와 strcpy 함수를 이용하여 bof를 일으키고, get_flag 함수를 실행시키면 될것같다
2. 접근방법
- 코드를 보면 처음에 입력한 값이 s에 들어가고 그걸 input에 복사한다
- 그다음 v5에 "you", v7에 "I"를 넣고
- replace 함수를 이용하여 v4에 input, v7 변수를 인자로 하여 "I"를 "you"로 변경시킨다
그렇다면, 처음에 fgets는 32바이트 크기만 입력을 받으므로, ret 주소까지의 거리인 ebp-3Ch , 즉 64바이트 크기만큼 입력을 못한다
하지만 replace 함수를 통하여 I 가 you 로 변경되기 때문에 이를 이용하면 될 것이다
정리하면
- ret까지 필요한 크기 : 64byte
- 페이로드 : I * 21 == you * 21 = 63 여기에 + 1byte(아무값)
이렇게 입력하면 될 것이다
3. 풀이
최종 익스 코드는 다음과 같다
from pwn import *
p = remote("ctf.j0n9hyun.xyz",3011)
#p.recvuntil("Tell me something about yourself:")
#p.recv(34)
payload = "A"
payload += "I"*21
payload += p32(0x08048F0D)
p.sendline(payload)
p.interactive()
recvuntil() 사용하면 중간에 멈추고 진행이 안된다. 이는 서버 오류인듯 싶다
4. 몰랐던 개념
c++ 아이다 코드에 익숙해져야겠다
728x90
'워게임 > HackCTF' 카테고리의 다른 글
[HackCTF] poet (0) | 2020.04.11 |
---|---|
[HackCTF] Offset (0) | 2020.04.11 |
[HackCTF] BOF PIE (0) | 2020.04.11 |
[HackCTF] Basic FSB (0) | 2020.04.11 |
[HackCTF] Baisc BOF 2 (0) | 2020.04.11 |