[Dreamhack] crawling

김성진·2022년 8월 11일

Dreamhack_Webhacking

목록 보기
19/19

📒 Description

매우 쉬웠다.


📒 Analysis & Exploit

📖 app.py

#app.py
import socket
import requests
import ipaddress
from urllib.parse import urlparse
from flask import Flask, request, render_template

app = Flask(__name__)
app.flag = '__FLAG__'

def lookup(url):
    try:
        return socket.gethostbyname(url)
    except:
        return False

def check_global(ip):
    try:
        return (ipaddress.ip_address(ip)).is_global
    except:
        return False

def check_get(url):
    ip = lookup(urlparse(url).netloc)
    if ip == False or ip =='0.0.0.0':
        return "Not a valid URL."
    res=requests.get(url)
    if check_global(ip) == False:
        return "Can you access my admin page~?"
    for i in res.text.split('>'):
        if 'referer' in i:
            ref_host = urlparse(res.headers.get('refer')).netloc
            if ref_host == 'localhost':
                return False
            if ref_host == '127.0.0.1':
                return False 
    res=requests.get(url)
    return res.text

@app.route('/admin')
def admin_page():
    if request.remote_addr != '127.0.0.1':
    		return "This is local page!"
    return app.flag

@app.route('/validation')
def validation():
    url = request.args.get('url', '')
    ip = lookup(urlparse(url).netloc)
    res = check_get(url)
    return render_template('validation.html', url=url, ip=ip, res=res)

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

if __name__=='__main__':
    app.run(host='0.0.0.0', port=3333)

request.remte_addr은 127.0.0.1이어야 한다. 그런데 check_get에서 필터링을 하고 있다. 우선 naver.com:80을 넣어보면
이렇게 크롤링을 해준다.
lcoalhost는 이렇게 필터링된다. 그렇다면 url 단축 기능을 이용하여 넘기면 어떻게 될까.
http://127.0.0.1:3333/admin 이걸 단축시키면 https://han.gl/DRizh 이렇게 된다. 저걸 넘겨보자.

profile
Today I Learned

0개의 댓글