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 오픈

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
vared

vared - Blog

WriteUp/DreamHack

Dreamhack : csrf-1

2020. 11. 23. 20:09

xss 문제랑 상당히 양식이 비슷하다. 해야하는 행동도 비슷할 것 같다.

먼저 코드를 보자. 

#!/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'}):
    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/csrf?csrf={urllib.parse.quote(url)}')
    except:
        driver.quit()
        return False
    driver.quit()
    return True

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

@app.route('/csrf')
def csrf():
    csrf = request.args.get('csrf', '').lower()
    xss_filter = ['frame', 'script', 'on']
    for _ in xss_filter:
        csrf = csrf.replace(_, '*')
    return csrf

@app.route('/flag', methods=['GET', 'POST'])
def flag():
    if request.method == 'GET':
        return render_template('flag.html')
    elif request.method == 'POST':
        csrf = request.form.get('csrf', '')
        if not read_url(csrf):
            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.route('/admin/notice_flag')
def admin_notice_flag():
    global memo_text
    if request.remote_addr != '127.0.0.1':
        return 'Access Denied'
    if request.args.get('userid', '') != 'admin':
        return 'Your not admin'
    memo_text += f'[Notice] flag is {FLAG}\n'
    return 'Ok'

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

notice flag에 있는 정보를 읽어야 하는데 권한이 낮다. admin 의 권한만 읽을 수 있다.

이제 문제를 어떻게 풀지를 고민해 봤다.

먼저 memo_text 변수는 global 변수다. /memo 에서와 /admin/notice_flag에서 해당 변수를 사용하는데,

admin/notice_flag에서 정상적으로 return 만 할수 있다면 memo에 flag를 더해서 출력할 수 있는 것이다.

즉 우리의 목표는 /admin/notice_flag를 csrf 를 이용해서 정상 실행 시키는 것이다. 

 

또 체크할 것은 필터링이 되고 있다는 것이다

xss_filter = ['frame', 'script', 'on']

그럼 스크립트 태그 말고 다른 태그를 이용해야 한다는 것이다.

read_url 함수에서는 위리의 쿼리문을 driver.get 으로 받아준다. 

 

한번 쿼리를 짜보자. 

<img src="http://127.0.0.1:8000/admin/notice_flag?userid=admin">

잘 작동한다.

hello
1
1
1
[Notice] flag is DH{<-----flag------>}
1
저작자표시 (새창열림)

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

DreamHack : xss-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 : xss-1
    • DreamHack : Basic ROP x64
    • DreamHack : ssp_001
    • DreamHack : ssp_000
    vared
    vared

    티스토리툴바