Reflected XSS : LAB [9]

DATE : 2024/1/17

Reflected XSS 취약점이 μ‘΄μž¬ν•˜λŠ” 이번 LABμ—μ„œλŠ” 제λͺ©μ— λ‚˜μ™€ μžˆλ“―μ΄

< > 기호, μž‘μ€ λ”°μ˜΄ν‘œ, 큰 λ”°μ˜΄ν‘œ, μ—­ μŠ¬λž˜μ‰¬μ™€ 백틱을 μ‚¬μš©ν•  수 μ—†λ‹€.

λΈ”λ‘œκ·Έ 검색 κΈ°λŠ₯을 ν™œμš©ν•˜λŠ” 경우, μœ„μ— λ³΄μ΄λŠ” μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ” 데

μ‚¬μš©μžκ°€ μž…λ ₯ν•œ λ‚΄μš©μ΄ message에 λ“€μ–΄κ°€ innerText μ†μ„±μœΌλ‘œ ν• λ‹Ή λ˜λŠ” κ±Έ 확인할 수 μžˆλ‹€.

μ½”λ“œ μƒμ—μ„œλŠ” 별 λ‹€λ₯Έ μ œμ•½ 사항이 μ—†λŠ” λ“― λ³΄μ΄μ§€λ§Œ

LABμ—μ„œ μ‚¬μš©ν•  수 μ—†λ‹€κ³  ν•œ 문자 4개λ₯Ό μž…λ ₯ν•΄λ³΄λ‹ˆ unicode encoding 된 κ²°κ³Όκ°€ λ‚˜μ˜¨λ‹€..!

λ°±ν‹±κ³Ό μ—­ μŠ¬λž˜μ‰¬λ‘œ λ„£μ–΄λ³Έ κ²°κ³Ό λͺ¨λ‘ unicode encoding 처리 되고 μžˆλŠ” κ±Έ ν™•μΈν–ˆλ‹€.

즉 이번 LABμ—μ„œλŠ” μ‚¬μš©ν•  수 μ—†λŠ” λ¬Έμžκ°€ ꡉμž₯히 λ§Žλ‹€,,

ν•˜.지.만

μ½”λ“œλ₯Ό λ‹€μ‹œ ν•œ 번 잘 보면 message λ³€μˆ˜κ°€ ` ` λ°±ν‹±μœΌλ‘œ 감싸진 μƒνƒœμΈ κ±Έ λ³Ό 수 μžˆλŠ”λ°

μ—¬κΈ°μ„œ 이 백틱을 ν™œμš©ν•  수 μžˆλŠ” ${} place holderκ°€ λ“±μž₯ν•œλ‹€.

<script>
    var sentence = `hello Mr.my yesterday ${`Bye`}`;
    console.log(sentence);
</script>

λ°±ν‹±μœΌλ‘œ 감싸진 문자λ₯Ό μ½˜μ†” 창에 찍어보면

λ‹€μŒκ³Ό 같이 λ‚˜μ˜€λŠ” κ±Έ λ³Ό 수 μžˆλ‹€. μ΄λ•Œ μ£Όλͺ©ν•  뢀뢄은 λ°±ν‹±μœΌλ‘œ λ¬Έμžμ—΄μ„ μž‘μ„±ν•  λ•Œ

κ·Έ μ•ˆμ— ${ }λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€λŠ” 점이닀.

μœ„μ˜ μ˜ˆμ‹œμ²˜λŸΌ ${ } μ•ˆμ—μ„œ λ¬Έμžμ—΄μ„ λ§Œλ“€κ³ μž ν•œλ‹€λ©΄ λ™μΌν•˜κ²Œ 백틱을 μ‚¬μš©ν•˜κ±°λ‚˜ λ”°μ˜΄ν‘œλ‘œ μ‚¬μš©ν•΄λ„ λœλ‹€.

<script>
    var sentence = `hello Mr.my yesterday ${"time machin"}`;
    console.log(sentence);
</script>

λ‹€λ§Œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•ŒλŠ” λ°±ν‹±μ΄λ‚˜ λ”°μ˜΄ν‘œλ‘œ κ°μ‹ΈλŠ” κ±° 없이 κ·Έλƒ₯ ν•¨μˆ˜λ§Œ μž‘μ„±ν•œλ‹€.

<script>
    var sentence = `hello Mr.my yesterday ${alert("hanhxx")}`;
    console.log(sentence);
</script>

μ΄λ•Œ alert()에 λ¬Έμžμ—΄μ„ μž‘μ„±ν•  λ•Œλ„ λ°±ν‹±μ΄λ‚˜ λ”°μ˜΄ν‘œλ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.

이 μ½”λ“œλ₯Ό λΈŒλΌμš°μ € μƒμ—μ„œ 확인해보면

νŒμ—… 창이 뜬 후에 alert()λŠ” λ¬Έμžμ—΄ μƒμ—μ„œ 사라지고

κ·Έ 자리λ₯Ό undefinedκ°€ λ©”κΎΈκ³  μžˆλŠ” κ±Έ λ³Ό 수 μžˆλ‹€.

λ§Œμ•½ alert() ν•¨μˆ˜ μ•ˆμ— λ¬Έμžμ—΄μ΄ μ•„λ‹Œ κ·Έλƒ₯ 숫자λ₯Ό λ„£κ±°λ‚˜ 별 λ‹€λ₯Έ λ‚΄μš© 없이 호좜만 ν•œλ‹€λ©΄

μ œν•œ λ˜λŠ” 문자λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  <script> tag μ•ˆμ— alert()λ₯Ό μ‚½μž…ν•  수 μžˆλ‹€.

INPUT : ${alert(1)}

OUTPUT : var message = `0 search results for '${alert(1)}'`

이와 같이 슀크립트λ₯Ό 검색 바에 μž…λ ₯ν•˜κ²Œ 되면 message λ³€μˆ˜λ‘œ μŠ€ν¬λ¦½νŠΈκ°€ λ“€μ–΄κ°€κ²Œ λ˜λ©΄μ„œ

Last updated