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

CHALLENGE

XSS-Game Level 3

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

이전 μˆ˜μ€€μ—μ„œ λ³΄μ•˜ λ“―이 μΌλ°˜μ μΈ JS ν•¨μˆ˜ μ€‘ μΌλΆ€λŠ”  μ‹€ν–‰ μ‹±ν¬λ‘œ  λΈŒλΌμš°μ €κ°€ μž…λ ₯에 λ‚˜νƒ€λ‚˜λŠ” λͺ¨λ“  μŠ€ν¬λ¦½νŠΈλ₯Ό μ‹€ν–‰ν•˜λ„둝 ν•©λ‹ˆλ‹€. μ‚¬μ‹€μ€ λ‚΄λΆ€μ μœΌλ‘œ μ΄λŸ¬ν•œ κΈ°λŠ₯ μ€‘ ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•˜λŠ” μƒμœ„ μˆ˜μ€€ API에 μ˜ν•΄ μˆ¨κ²¨μ§‘λ‹ˆλ‹€. μ΄ μˆ˜μ€€μ˜ μ‘μš© ν”„λ‘œκ·Έλž¨μ€ μ΄λŸ¬ν•œ μˆ¨κ²¨μ§„ μ‹±ν¬λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
 
μž„λ¬΄ λͺ©ν‘œ : μ΄μ „κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ μŠ€ν¬λ¦½νŠΈλ₯Ό μ‚½μž… alert() ν•˜μ—¬ μ•±μ—μ„œ JavaScriptλ₯Ό νŒμ—… ν•©λ‹ˆλ‹€.
μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ–΄λŠ κ³³μ—λ„ νŽ˜μ΄λ‘œλ“œλ₯Ό μž…λ ₯ν•  μˆ˜ μ—†μœΌλ―€λ‘œ μ•„λž˜ URL ν‘œμ‹œ μ€„μ—μ„œ μ£Όμ†Œλ₯Ό μˆ˜λ™μœΌλ‘œ μˆ˜μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

 

ν•΄λ‹Ή νŽ˜μ΄μ§€λŠ” 별닀λ₯Έ μ»¨ν…μΈ λ‚˜ 이벀트적인 μš”μ†Œκ°€ 보이지 μ•ŠλŠ” 정적인 νŽ˜μ΄μ§€μž…λ‹ˆλ‹€. μ΄λŸ¬ν•œ νŽ˜μ΄μ§€μ˜ 경우 " Reflected " 같은 λ°˜μ‚¬ν˜• κ³΅κ²©μ„ μ‹œλ„ν•΄μ•Ό ν•©λ‹ˆλ‹€.

 

보톡 이럴경우 상단 URL의 μ£Όμ†Œ 값에 μ•…μ˜μ μΈ 슀크립트 문이 μ‚½μž…λ˜μ–΄μ•Ό ν•˜λŠ”λ°, " νŽ˜μ΄μ§€ μ†ŒμŠ€ " 뢄석을 톡해 μ·¨μ•½ν•œ 검증 λ˜λŠ” hidden으둜 λ…ΈμΆœλ˜μ§€ μ•Šμ€ λ§€κ°œλ³€μˆ˜λ₯Ό μ°Ύμ•„μ„œ ν•΄λ‹Ή 도메인에 " GET " λ°©μ‹μœΌλ‘œ μ‚½μž…ν•΄μ„œ μ‹€ν–‰μ‹œν‚€λ©΄ λ©λ‹ˆλ‹€.

 

* λ˜ν•œ 특수문자 κ΄€λ ¨ν•˜μ—¬ μ–΄λ–€ 문자λ₯Ό ν•„ν„°λ§ν•˜λŠ”μ§€ 여뢀에 λ”°λΌμ„œλ„ μ‚¬μš©λ˜λŠ” ꡬ문이 λ‹¬λΌμ§‘λ‹ˆλ‹€

 

..
..

window.onload = function() { 
        chooseTab(unescape(self.location.hash.substr(1)) || "1");
      }
 <script>
      function chooseTab(num) {
        // Dynamically load the appropriate image.
        var html = "Image " + parseInt(num) + "<br>";
        html += "<img src='/static/level3/cloud" + num + ".jpg' />";
        $('#tabContent').html(html);
..
..

ν•΄λ‹Ή νŽ˜μ΄μ§€μ˜ μ†ŒμŠ€μ½”λ“œλŠ” URL 일뢀뢄을 κ°€μ Έμ™€μ„œ Choosetab ν•¨μˆ˜λ‘œ μ „λ‹¬ν•˜κ³  μžˆλŠ” 것 을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ μ£Όμ†ŒλΆ€λΆ„μ— "이미지 νƒœκ·Έ 같은 "html" μ½”λ“œ ν•¨κ»˜ μ‚¬μš©λ˜λŠ” 것을 확인할 수 μžˆμœΌλ‹ˆ μ „ 단계와 λ§ˆμ°¬κ°€μ§€λ‘œ <img srcλ₯Ό μ‚¬μš©ν•˜μ—¬ 곡격할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

힌트

1. λ²„κ·Έμ˜ 원인을 찾으렀면 JavaScriptλ₯Ό κ²€ν† ν•˜μ—¬ μ‚¬μš©μž 제곡 μž…λ ₯을 μ²˜λ¦¬ν•˜λŠ” μœ„μΉ˜λ₯Ό ν™•μΈν•˜μ‹­μ‹œμ˜€2.window.location개체의 λ°μ΄ν„° λŠ” κ³΅κ²©μžμ˜ 영ν–₯을 받을 수 μžˆμŠ΅λ‹ˆλ‹€.

3. μ£Όμž… 지점을 μ‹λ³„ν–ˆμœΌλ©΄ μƒˆ HTML μš”μ†Œλ₯Ό λͺ°λž˜ λ“€μ–΄κ°€κΈ° μœ„ν•΄ν•΄μ•Ό ​​할 일에 λŒ€ν•΄ μƒκ°ν•΄λ³΄μ‹­μ‹œμ˜€.

4. μ΄μ „κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ <script> ...νŽ˜μ΄μ§€κ°€λ‘œλ“œ 된 ν›„에 μΆ”κ°€λœ 슀크립트λ₯Ό λΈŒλΌμš°μ €κ°€ μ‹€ν–‰ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— νŽ˜μ΄λ‘œλ“œλ‘œ μ‚¬μš© ν•˜λŠ” κ²ƒμ€ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

 

Exploit Code

<img src='x' onerror=alert(1)> # Success

 &<img src='x' onerror=prompt("xss")> # Success(Not Complete)

 

κ΅¬λΆ„μžλ₯Ό μ‚¬μš©ν•˜λŠ” "&"λ₯Ό μ‚¬μš©ν•˜μ—¬ 슀크립트 문을 μ—°κ³„ν•΄λ΄€λŠ”λ° μ„±κ³΅μ μœΌλ‘œ μŠ€ν¬λ¦½νŠΈλŠ” 싀행이 λ˜λ‚˜ 좜제자의 μ˜λ„μ™€λŠ” 쑰금 ν‹€λ¦¬κ²Œ μ ‘κ·Όν•΄μ„œ κ·ΈλŸ°μ§€ 문제 μ„±κ³΅μ΄λΌλŠ” λ¬Έκ΅¬λŠ” λ‚˜μ˜€μ§€ μ•Šλ„€μš”.

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

XSS-Game Level 6  (0) 2020.12.01
XSS-Game Level 5  (0) 2020.11.30
XSS-Game Level 4  (0) 2020.11.29
XSS-Game Level 2  (0) 2020.11.27
XSS-Game Level 1  (2) 2020.11.26
κ³΅μœ ν•˜κΈ° 링크
Comment