crawling 풀이

2023. 4. 23. 17:27Dreamhack Wargame

728x90

문제 제목
문제 정보
문제 페이지

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

문제에서 제공해 준 app.py 파일입니다.

 

admin_page()

40번째 줄(/admin) 부분에서 request.remote_addr이 127.0.0.1이어야 FLAG를 획득할 수 있다고 되어있습니다.

 

check_get()

그러나 check_get()에서 이 부분을 필터링 하고있습니다.

이 부분을 우회하면 될 것 같습니다.

문제 페이지가 어떻게 동작하는지 확인하기 위해 제 블로그 URL을 넣어보겠습니다.

 

블로그 URL 입력

들어간 URL의 정보를 크롤링해 줍니다.

그럼 문제에서 필터링하고 있는 URL을 넣어보겠습니다.

 

localhost:3333

바로 필터링되네요.

필터링을 우회하기 위해 URL을 URL 단축 사이트에 넣어서 입력해 보겠습니다.

https://han.gl/

 

han.gl

바이패스,커스텀,필터링,지역별필터링,기기별필터링,특정OS차단,리타게팅,상세통계,픽셀

han.gl

FLAG 획득 완료
문제 풀이 성공

이게 되네

728x90

'Dreamhack Wargame' 카테고리의 다른 글

[CodeEngn] Malware L08 풀이  (0) 2023.08.30
crt rsa 풀이  (0) 2023.04.24
Long Sleep 풀이  (0) 2023.04.21
baseball 풀이  (4) 2022.10.06
Basic_Forensics_1 풀이  (0) 2022.07.23