상당히 재미있었던 웹해킹 문제
Command Injection 과 관련된 문제이다.
Sometimes it happens things are there but you can't see it directly.
We need to change our vision to make it visible.
I believe you have that vision.
뭔가 철학적인 문제 설명과 함께
문제 페이지 주소가 주어진다.
플래그는 flag.txt 파일 안에 있다고 한다.
문제 페이지에 처음 접속했을 때 화면이다.
뭔가 도발적인 I Bet you can't 라는 문구와 함께
아래쪽에 뭔가를 입력받는 칸이 하나 보인다.
맨 아래는 What I See 라는 문구가 적혀있다.
아무런 정보가 없어서
일단 hello 라고 입력해봤다.
URL 에서 inn 변수에 입력값을 담아서 GET 방식으로 전달하는것을 확인했고,
그 외에 특별한 변화는 찾지 못했다.
이것저것 입력해보다가
a를 입력해봤는데
아래쪽 What I See 뒤에 a 가 찍혀서 나오는 것이 보였다.
몇가지 더 테스트 해봤는데
b만 입력했을때는 아무것도 나오지 않았고,
c를 입력했을때는 a와 마찬가지로 What I See 뒤에 c가 같이 붙어나오는것이 보였다.
뭔가 특정 문자를 서버에서 필터링 하고 있는듯 하다.
import requests
strings = 'abcdefghijklmnopqrstuvwxyz123456789!@#$%^&*()_+-={}[]:;,.<>?/'
for i in range(len(strings)):
url = "http://20.125.142.38:8765/wH4t_Y0u_d1d?inn="
url += strings[i]
r = requests.get(url)
if '<h3>What I See ◔_◔ {}</h3>'.format(strings[i]) in r.text:
print(strings[i])
본격적으로 테스트해보기 위해 Python 을 이용해 간단한 코드를 짰다.
inn 변수에 ascii 값들을 집어넣어서 요청을 보내고
What I See 뒤에 보낸 문자가 같이 나오는 경우만 추려보았다.
코드를 실행시켜보면
a c d f g l s t x ; :
11개 문자가 그대로 출력된다는 것을 확인할 수 있다.
허용되는 11개 문자열을 조합해서 뭔가 악성 행위를 할 수 있을까 고민해봤다.
일단 허용되는 문자 l 과 s 를 이용해서 ls 명령어가 가능한지 입력해봤다.
그런데 ls 는 또 필터링을 해놨는지 아무런 반응이 없었다.
여기까지 가는데 꽤 오랜시간이 걸렸다..
문제 소스파일도 안주어지고 생으로 하려니 너무 막막했다.
여러가지 시도를 해보다가 llss 라고 입력해보니
가운데 있던 ls 가 필터링되어 없어지면서 양 끝에있던 ls 가 합쳐지며
ls 명령어가 수행되는것 같았다.
아래쪽에 명령어가 잘 수행되어
현재경로에 Dockerfile / __pycache__ / app.py / requirements.txt / static / templates 파일과 폴더가 있는것이 보인다.
일단 이걸로 ls 명령어가 수행가능하다는 것을 알았고,
플래그가 flag.txt 파일 안에 있다고 했으니 이제 flag.txt 를 찾아가면 된다.
허용되는 문자 중 c 와 d도 있었는데, 이를 조합해서
상위 디렉토리로 이동하기 위해 cd .. 라고 입력해봤다.
그랬더니 cd 명령어도 필터링 하고 있는지 cd가 사라지고 말았다.
이건 아까 ls 를 우회한 것 처럼
ccdd 라고 입력하면서 간단하게 우회할 수 있다.
그런데 이번엔 cd 뒤에 있던 .. 이 사라졌다.
이것 역시 ccdd .... 라고 입력하면 cd 와 .. 이 각각 한번씩 사라지면서
cd .. 가 완성되게 된다.
아까 세미콜론( ; ) 도 입력이 허용되었으니
이제 상위 디렉토리로 천천히 올라가주면 된다.
ccdd ....;llss 라고 입력하면 한 단계 올라가서 ls 명령어를 수행하게 되고,
injection 폴더가 있다는 것을 알 수 있다.
ccdd ....;llss 를 한번 더 써서
한 칸 더 위로 올라가주면
flag.txt 가 있는것이 보인다.
필터링 되지 않는 문자열 a, c, t, f, l ,g, x 를 이용해서
cat flag.txt 명령어를 수행할 수 있고,
입력하면 플래그를 확인할 수 있다.
'CTF > 웹해킹' 카테고리의 다른 글
[CakeCTF] CakeGEAR - 웹해킹 / PHP Type Confusion (44) | 2022.10.08 |
---|---|
[SHELLCTF] More ILLUSION - 웹해킹 / Command Injection / 명령어 삽입 (48) | 2022.09.30 |
[SHELLCTF] Extractor - 웹해킹 / SQL Injection (82) | 2022.09.13 |
[SHELLCTF] Choosy - 웹해킹 / XSS (40) | 2022.09.10 |
[TFCCTF] PONG - 웹해킹 / Command Injection / 명령어삽입 (53) | 2022.09.07 |