Information Security Study

proxy-1 본문

Dreamhack/Web Hacking

proxy-1

gayeon_ 2023. 8. 23. 19:44

 

 

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

코드를 보니 socket 페이지는 Post 메소드로 넘겨진 host, port, data를 가지고 Socket 연결을 하는 기능이다.
하지만 Socket이 연결된다고 해도, 데이터를 넘겨 받아서 페이지에 출력되는 기능을 가지고 있다.

 

template에 넘겨 받은 데이터를 전달하지만 이를 통해 SSTI 공격을 시도하면 될지도 모르겠다는 생각이 들었다.

 

admin 페이지의 코드를 보면 여러 조건이 있고 조건을 통과하면 Flag를 반환하는 것을 알 수 있다. 

 

 

 

각 조건에 맞춰 입력하니 플래그를 얻을 수 있었다.

 

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

session  (0) 2023.08.23
php-1  (0) 2023.08.23
pathtraversal  (0) 2023.08.23
simple-operation  (0) 2023.08.16
sql injection bypass WAF  (0) 2022.11.22