2023. 11. 12. 01:12ㆍSWLUG/web hacking
XSS Filtering Bypass | 워게임 | Dreamhack
XSS Filtering Bypass
Description Exercise: XSS Filtering Bypass에서 실습하는 문제입니다. 문제 수정 내역 2023.08.04 Dockerfile 제공
dreamhack.io
📌 내풀이
두번째문제를 풀어보겠다.
파일을 열어봤을 때 내용은 아래와 같았다.
#!/usr/bin/python3
from flask import Flask, request, render_template
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
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:
service = Service(executable_path="/chromedriver")
options = webdriver.ChromeOptions()
for _ in [
"headless",
"window-size=1920x1080",
"disable-gpu",
"no-sandbox",
"disable-dev-shm-usage",
]:
options.add_argument(_)
driver = webdriver.Chrome(service=service, 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(url)
except Exception as e:
driver.quit()
# return str(e)
return False
driver.quit()
return True
def check_xss(param, cookie={"name": "name", "value": "value"}):
url = f"http://127.0.0.1:8000/vuln?param={urllib.parse.quote(param)}"
return read_url(url, cookie)
def xss_filter(text):
_filter = ["script", "on", "javascript:"]
for f in _filter:
if f in text.lower():
text = text.replace(f, "")
return text
@app.route("/")
def index():
return render_template("index.html")
@app.route("/vuln")
def vuln():
param = request.args.get("param", "")
param = xss_filter(param)
return param
@app.route("/flag", methods=["GET", "POST"])
def flag():
if request.method == "GET":
return render_template("flag.html")
elif request.method == "POST":
param = request.form.get("param")
if not check_xss(param, {"name": "flag", "value": FLAG.strip()}):
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", "")
memo_text += text + "\n"
return render_template("memo.html", memo=memo_text)
app.run(host="0.0.0.0", port=8000)
이부분을 봤을 때 script, on, javascript에 대해 필터를 적용하고 있는 것을 알 수 있다.
또 def vlun 부분에서 xss_filter함수를 사용해서 XSS공격을 방어하고 필터링하는 것을 확인 할 수 있었다.
vlun page를 클릭하니 위와 같은 화면이 나타났다.
이미지테그를 사용했다.
memo를 누르니 hello가 떴고, 지난 시간에 풀었던 문제들처럼 쿠키값이 저장되고 있는 것 같았다.
이제 문제를 한번 쫘악 확인했으니까, 문제를 풀어봐야겠다.
login page, register page 발견!
갑자기 떴다. 이유는 잘 모르겠지만 힌트를 더 얻을 수 있는 것일까?
로그인 실패
잘못가입했나보다 다시 가입하고 들어갔더니 로그인 성공!
Report를 눌렀더니 위와 같이 떴다.
success 뭐가 성공이라는 걸까, 개발자 도구를 들어가서 코드를 살펴봐야겠다.
별개 없어서 일단 다시 서버를 생성해봤다. 오류가 난건지 알수가 없으니, 다시 되돌아가보자.
다시 서버를 생성해서 이것 저것 시도를 해봤다.
문제를 풀기위해서는 일단은 필터링을 피해서 공격을 시도해야하는데 어떤식으로 할지 고민을 하다가 하나씩 힌트를 찾아보았다.
일단 위에 코드 중에서 대소문자를 번갈아 사용한다면 필터링을 우회해서 공격할 수 있다, 또 문자 중간중간에 문자를 끼워넣는 방법으로 우회를 할 수 있다. 이 부분을 활용해야 할 것같으니 잘 기억해두자.
📌 XSS공격을 위해 필요한 속성값.
location.href = 전체 URL을 반환하거나, URL을 업데이트할 수 있는 속성값이다.
document.cookie = 해당 페이지에서 사용하는 쿠키를 읽고, 쓰는 속성값이다.
이부분을 활용해서 문제를 풀때 문제점이 location의 on이 있다는 점이다.
이부분은 경험이 부족해서 어떤식으로 풀이를 해야할지 고민을 했다 찾아보니, +를 활용해서 location을 활용한다면 우회할 수 있다고 한다.
📌 제출값
<scronipt>document['locatio'+'n'].href = "/memo?memo=" + document.cookie;</scronipt>
첫번째 문제 끝.
지난주에 XSS를 처음 배울 때는 너무 낯설어서 미처보이지 않았던 부분들이 보이기 시작했다.
온전히 내힘으로만 푼건 아니지만 이해해나가는 것 같아서 다행이고 다음 문제도 열심히 풀어봐야겠다.
# 앞으로 다양한 필터링을 우회해서 문제를 풀어야할지도 모르니 참고자료를 찾아봤다. 추가해서 공부해야겠다.
[ 참고 학습&풀이 자료 ]
[Dreamhack] XSS Filtering Bypass 문제 풀이과정 (tistory.com)
[Dreamhack] XSS Filtering Bypass 문제 풀이과정
XSS-Filtering-Bypass에 접속 정보를 보내고 응답을 기다린 뒤 들어간 페이지이다. 페이지에는 vuln(xss) page memo flag 가 있다. 문제 파일을 다운받아 소스코드를 살펴보자! 우선 xss_filter(text)를 보면 "script
infogreed0615.tistory.com
[WEB] XSS 우회 #1
XSS 공격을 방어하기 위한 다양한 패치와 필터링이 존재한다. 그러나 XSS 방어가 올바르게 수행되지 않았을 때 이를 우회할 수 있는 방법도 다양하다. 이벤트 핸들러 속성 자바스크립트 코드를 실
limvo.tistory.com
XSS 우회 기법 ~ CS_Bank (csbankstorage.blogspot.com)
XSS 우회 기법
HTML Tricks 1. iframe Tag iframe tag를 이용하여 악성코드가 포함된 사이트로 세션을 연결해 자동으로 프로그램을 다운받도록 한다. <iframe src=" http://pwnplay.org" width="0" hei...
csbankstorage.blogspot.com
'SWLUG > web hacking' 카테고리의 다른 글
6주차_Webhacking 과제4 : dreamhack [csrf-2] (0) | 2023.11.12 |
---|---|
6주차_Webhacking 과제3 : dreamhack [csrf-1] (0) | 2023.11.12 |
6주차_Webhacking 과제1 : webhacking.kr [challenge23] (0) | 2023.11.11 |
5주차_Webhacking 과제4 : dreamhack [XSS-2] (0) | 2023.11.05 |
5주차_Webhacking 과제2 : dreamhack [xss-1] (0) | 2023.11.05 |