'Apache Environment¸¦ »ç¿ëÇÒ ¶§ ¹ß»ýÇÒ ¼ö ÀÖ´Â SQL Injection Ãë¾à¼º'¿¡ °üÇÑ ÇÙ½É Á¤¸®

 

 

by Beist Security Study Group
(http://beist.org)

Members of Beist Research Group : beist and anonymous people
Members of Beist Study Group : beist, dars21, obhacker, passion, p-jackpot, jacaranda, cina, algot23

 

 

 

 

¿ä¾à: º» ¹®¼­´Â [À̽ÂÁø, ¡®Apache Environment¸¦ »ç¿ëÇÒ ¶§ ¹ß»ýÇÒ ¼ö ÀÖ´Â SQL Injection Ãë¾à¼º¡¯, 2003] ¹®¼­¿¡¼­ Á¦½ÃÇÑ ±â¹ýÀ» Beist Security Study Group¿¡¼­ ÇÙ½É ³»¿ë¸¸ °£Ãß·Á Á¤¸®ÇÑ ¹®¼­ÀÌ´Ù. ÀϹÝÀûÀ¸·Î magic_quotes_gpc ¼³Á¤ÀÌ onÀ¸·Î µÇ¾î Àִ ȯ°æ¿¡¼± SQL Injection °ø°ÝÀ» ÇϱⰡ Èûµé´Ù°í »ý°¢µÇ´Âµ¥ À¥ ÇÁ·Î±×·¥¿¡¼­ Apache Environment¸¦ À߸ø »ç¿ëÇÒ °æ¿ì SQL InjectionÀ» ¼º°øÇÒ ¼ö ÀÖ´Â °¡´É¼ºÀÌ ÀÖ´Ù. º» ¹®¼­´Â ÀÌ·¯ÇÑ ¹®Á¦¿¡ ´ëÇØ¼­ ´Ù·ç°í ÀÖ´Ù.

 

 

 

 

 

 

 

1. °³¿ä

´ëºÎºÐ À¥ ÇÁ·Î±×·¥Àº ÇØ´ç ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÏ´Â Á¤º¸¸¦ À¯¿¬ÇÏ°í Æí¸®ÇÏ°Ô °ü¸®Çϱâ À§ÇØ µ¥ÀÌÅͺ£À̽º¿Í ¿¬µ¿ÇÏ¿© µ¿ÀÛÇÑ´Ù. µ¥ÀÌÅͺ£À̽º¿Í ¿¬µ¿À» Çϱâ À§Çؼ­ À¥ ÇÁ·Î±×·¥Àº Parameter¸¦ ÅëÇØ µ¥ÀÌÅͺ£À̽º¿¡ º¸³¾ µ¥ÀÌÅ͸¦ ÁöÁ¤ÇÑ´Ù. À̶§ µ¥ÀÌÅͺ£À̽º·Î ³Ñ¾î°¡´Â Parameter¸¦ ¾ÇÀÇÀûÀ¸·Î Á¶ÀÛÇÏ¿© ½Ã½ºÅÛ¿¡¼­ ºÎ´çÇÑ Á¤º¸³ª ±ÇÇÑÀ» ȹµæÇÏ´Â °ø°Ý ±â¹ýÀ» SQL InjectionÀ̶ó ÇÑ´Ù.

[À̽ÂÁø, ¡®Apache Environment¸¦ »ç¿ëÇÒ ¶§ ¹ß»ýÇÒ ¼ö ÀÖ´Â SQL Injection Ãë¾à¼º¡¯, 2003] ¹®¼­¿¡¼­´Â À¥ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¶§ Apache Environment¸¦ À߸ø »ç¿ëÇÒ °æ¿ì ÀϾ ¼ö ÀÖ´Â SQL Injection ±â¹ý¿¡ ´ëÇØ¼­ Á¦½ÃÇÏ¿´´Ù. ³»¿ëÀ» °£´ÜÈ÷ »ìÆìº¸¸é ±âÁ¸ À¥ ÇÁ·Î±×·¥À» °ø°ÝÇÒ °æ¿ì magic_quotes_gpc ÀÇ Á¦ÇÑ ¶§¹®¿¡ SQL Injection °ø°ÝÀ» ¼öÇàÇϱâ Èûµç °æ¿ì°¡ Á¾Á¾ ÀÖ¾ú´Âµ¥ À§ ¹®¼­¿¡¼­´Â Apache Environment¸¦ À߸ø »ç¿ëÇÒ °æ¿ì À̸¦ ¿ìȸÇÏ¿© °ø°ÝÇÒ ¼ö ÀÖ´Â ¹æ¹ý¿¡ ´ëÇØ¼­ ³ªÅ¸³»¾ú´Ù.

º» ¹®¼­´Â À§ ¹®¼­¸¦ ¹ÙÅÁÀ¸·Î Beist Security Study Group¿¡¼­ ÇÙ½ÉÀûÀÎ ³»¿ë¸¸ °£·«ÇÏ°Ô Á¤¸® ¿ä¾àÇÑ ¹®¼­ÀÌ´Ù. ¶ÇÇÑ º» ¹®¼­´Â SQL Injection °ø°Ý ±â¹ý¿¡ °üÇÑ ±âÃÊ Áö½Ä ¼³¸íÀº »ý·«ÇÏ¿´´Ù.. ÀÌ¿¡ °üÇÑ Áö½ÄÀº ÀÎÅͳݿ¡¼­ ½±°Ô ¹®¼­·Î Á¢ÇÒ ¼ö ÀÖ´Ù.

 

 

 

 

 

 

2. ±â¼úÀûÀÎ ³»¿ë

¸ÕÀú magic_quotes_gpc °¡ ¹«¾ùÀÎÁö °£·«È÷ ¾Ë¾Æº¸°Ú´Ù. ÇØ´ç ¿É¼Ç¿¡ °ü·ÃµÈ PHP ¿É¼Ç Á¤º¸¸¦ ÀοëÇϸé,

 

 

--Àοë--

magic_quotes_gpc boolean

GPC (Get/Post/ÄíŰ) ÀÛµ¿ÀÇ magic_quotes »óŸ¦ ¼³Á¤ÇÕ´Ï´Ù. magic_quotes°¡ onÀ̸é, ¸ðµç ' (ÀÛÀº µû¿ÈÇ¥), " (Å« µû¿ÈÇ¥), \ (¹é½½·¡½¬), NULÀº ÀÚµ¿ÀûÀ¸·Î ¹é½½·¡½¬·Î À̽ºÄÉÀÌÇÁµË´Ï´Ù.

 

Âü°í: magic_quotes_sybase Áö½Ã¾îµµ ONÀ̸é magic_quotes_gpc°¡ ¿ÏÀüÈ÷ ±³Ã¼µË´Ï´Ù. µÎ Áö½Ã¾î¸¦ ¸ðµÎ Ȱ¼ºÈ­Çϸé ÀÛÀº µûÀ½Ç¥´Â ''·Î À̽ºÄÉÀÌÇÁÇÕ´Ï´Ù. Å« µû¿ÈÇ¥, ¹é½½·¡½¬, NULÀº °ÇµéÀÌÁö ¾Ê°í, À̽ºÄÉÀÌÇÁ ÇÏÁö ¾Ê½À´Ï´Ù.

--Àοë--

 

 

Áï, °á·ÐÀ» ³»¸®¸é PHP ¼³Á¤¿¡¼­ magic_quotes_gpc°¡ onÀ¸·Î µÇ¾îÀÖÀ» ¶§ SQL Injection ±â¹ýÀ» »ç¿ëÇϱⰡ Á» ´õ ¾î·Á¿öÁø´Ù. ¿Ö³ÄÇϸé SQL Injection °ø°ÝÀÇ ÇÙ½ÉÀÌ µÇ´Â ÀÛÀº µû¿ÈÇ¥, Å« µû¿ÈÇ¥ µîÀÌ À̽ºÄÉÀÌÇÁ ó¸®µÇ¾î °ø°Ý¿¡ ÀÌ¿ëÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù.

º» ¹®¼­´Â magic_quote_gpc ¿É¼ÇÀÌ onÀ¸·Î µÇ¾îÀÖÀ» ¶§, ÀÌ ¿É¼Ç ÀÚü¸¦ ¿ìȸÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼­ ¼³¸íÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª ƯÁ¤ À¥ ÇÁ·Î±×·¥ÀÇ °æ¿ì Apache Environment º¯¼ö¸¦ Á÷Á¢ÀûÀ¸·Î °¡Á®¿Í »ç¿ëÇÏ´Â °æ¿ì°¡ Àִµ¥, À̶§ Ãë¾à¼ºÀÌ ¹ß»ýÇÒ ¼ö ÀÖ°í, ÀÌ¿¡ °üÇØ¼­ ÃÊÁ¡À» ¸ÂÃá´Ù. ´ÙÀ½ Äڵ带 º¸ÀÚ.

 

 

env_test.php

<?

 

echo "HTTP_USER_AGENT : \t\t$HTTP_USER_AGENT\n";

echo "getenv(\"HTTP_USER_AGENT\") : \t" . getenv("HTTP_USER_AGENT") . "\n";

 

?>

 

 

À§ÀÇ php ÄÚµå´Â env_test.php ¿¡ Á¢±ÙÇÑ »ç¿ëÀÚÀÇ À¥ ºê¶ó¿ìÀú Á¤º¸¿¡ ´ëÇØ¼­ 2°¡Áö ÇüÅ·ΠÃâ·ÂÇØÁØ´Ù. ù°´Â $HTTP_USER_AGENT º¯¼öÀ̰í, µÑ°´Â Apache À¥ ¼­¹ö·ÎºÎÅÍ ¹°·Á ¹ÞÀº ȯ°æ º¯¼ö HTTP_USER_AGENT¸¦ getenv() ÇÔ¼ö·Î °¡Á®¿Í Ãâ·ÂÇØÁØ´Ù. ´ÙÀ½°ú °°Àº HTTP ¿äûÀ» º¸³»¼­ °á°ú¸¦ º¸°Ú´Ù.

 

 

[beist@localhost beist]$ telnet beist.org 80

Trying 222.239.227.44...

Connected to beist.org (222.239.227.44).

Escape character is '^]'.

GET /env_test.php HTTP/1.1

User-Agent: test

Host: beist.org

 

HTTP/1.1 200 OK

Date: Sun, 20 Nov 2005 07:58:39 GMT

Server: Apache/2.0.50 (Fedora)

X-Powered-By: PHP/4.3.8

Content-Length: 59

Connection: close

Content-Type: text/html; charset=euc-kr

 

HTTP_USER_AGENT :               test

getenv("HTTP_USER_AGENT") :     test

 

 

User-Agent ºÎºÐ¿¡ test¸¦ ÀÔ·ÂÇÑ °á°ú, env_test.php ¿¡¼­ °¢°¢ µ¿ÀÏÇÑ °á°ú¸¦ Ãâ·ÂÇØÁÖ¾ú´Ù. ´ÙÀ½Àº User-Agent¿¡ Escape ¹®ÀÚ¸¦ Æ÷ÇÔÇÏ¿© º¸³½ °á°úÀÌ´Ù.

 

 

[beist@localhost beist]$ telnet beist.org 80

Trying 222.239.227.44...

Connected to beist.org (222.239.227.44).

Escape character is '^]'.

GET /env_test.php HTTP/1.1

User-Agent: test'hack

Host: beist.org

 

HTTP/1.1 200 OK

Date: Sun, 20 Nov 2005 08:00:10 GMT

Server: Apache/2.0.50 (Fedora)

X-Powered-By: PHP/4.3.8

Content-Length: 70

Connection: close

Content-Type: text/html; charset=euc-kr

 

HTTP_USER_AGENT :               test\'hack

getenv("HTTP_USER_AGENT") :     test'hack

 

 

À̽ºÄÉÀÌÇÁ ¹®ÀÚ¸¦ Æ÷ÇÔÇÏ¿© º¸³½ °á°ú ¼­·Î ´Ù¸¥ Ãâ·ÂÀ» º¸¿©ÁÖ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ¿øÀÎÀ» »ìÆìº¸¸é, getenv()¸¦ ÀÌ¿ëÇÏ¿© °¡Á®¿Â ȯ°æ º¯¼ö´Â PHP°¡ ¾Æ´Ñ À¥ ¼­¹ö¿¡¼­ ÀúÀåÇϰí Àִ ȯ°æ º¯¼öÀÌ´Ù. Áï, PHP¿¡¼­ ¾î¶°ÇÑ Ã³¸® °úÁ¤À» °ÅÄ¡±â ÀÌÀüÀÇ º¯¼öÀÌ´Ù. ±×·¯¹Ç·Î »ç¿ëÀÚ°¡ º¸³½ µ¥ÀÌÅÍ´Â ¼ø¼öÇÑ ÇüÅ·ΠÀ¥ ¼­¹öÀÇ È¯°æ º¯¼ö¿¡ º¸°üµÇ¾î ÀÖ´Ù. ¹Ý¸é¿¡ $HTTP_USER_AGENT´Â PHP¿¡¼­ ¸¸µé¾î³½ °ÍÀ¸·Î, À¥ ¼­¹ö°¡ °®°í ÀÖ´Â HTTP_USER_AGENT º¯¼ö °ªÀ» °¡Á®¿Í °¡°øÇÑ (¿©±â¼­´Â À̽ºÄÉÀÌÇÁ 󸮸¦ °¡°ø °úÁ¤ÀÇ ÇÑ ¿¹¶ó°í º¼ ¼ö ÀÖ´Ù.) °ÍÀÌ´Ù.

¸¸¾à À§ÀÇ »ç·Êó·³ À¥ ÇÁ·Î±×·¥¿¡¼­ getenv() ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ƯÁ¤ ȯ°æ º¯¼ö¸¦ °¡Á®¿Ã °æ¿ì À̽ºÄÉÀÌÇÁ 󸮰¡ µÇÁö ¾ÊÀ¸¹Ç·Î ÇØÄ¿ ÀÔÀå¿¡¼­´Â SQL Injection °ø°Ý¿¡ À¯¿ëÇÏ°Ô ¾Ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ÀÌ °ø°Ý ±â¹ýÀº GETÀ̳ª POSTµîÀ¸·Î Àü´ÞµÇ´Â Parameter¸¦ Á¶ÀÛÇÒ ¼ø ¾ø±â ¶§¹®¿¡ °ø°Ý¿¡ ÇѰ谡 ÀÖÀ» ¼öµµ ÀÖ´Ù. (´ëºÎºÐÀÇ Parameter°¡ GET, POST·Î Àü´ÞµÇ±â ¶§¹®ÀÌ´Ù.) ±×·¯³ª ½ÇÁ¦·Î À̸¦ ÀÌ¿ëÇÑ °ø°Ý ±â¹ýÀÌ ÀûÁö ¾Ê°Ô ÀáÀçÇϰí ÀÖ´Ù°í »ý°¢µÈ´Ù. ÀǿܷΠÀ¥ ÇÁ·Î±×·¥¿¡¼­ getenv() ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ȯ°æ º¯¼ö¸¦ °¡Á®¿À´Â °æ¿ì°¡ ¸¹ÀÌ Á¸ÀçÇϱ⠶§¹®ÀÌ´Ù.

Ãë¾à ÀáÀç °¡´É¼ºÀ» °¡Áø ȯ°æ º¯¼ö¸¦ ¿¹¸¦ µé¾î HTTP_X_FORWARDED_FOR³ª HTTP_USER_AGENT¸¦ º¼ ¼ö ÀÖ´Ù. ÀÌ È¯°æ º¯¼ö´Â »ç¿ëÀÚ°¡ ¸¶À½´ë·Î Á¶ÀÛÇÒ ¼ö ÀÖ´Â º¯¼öÀε¥ À̸¦ ¾Ç¿ëÇÒ °æ¿ì SQL Injection °ø°ÝÀ» ÇÒ ¼ö ÀÖ´Â °¡´É¼ºÀÌ Á¸ÀçÇÑ´Ù. ¹°·Ð À̿ܿ¡µµ getenv()¸¦ ÀÌ¿ëÇÏ¿© °¡Á®¿À´Â ¸ðµç ȯ°æ º¯¼öµµ ÁÖ¸ñÇØ¾ß ÇÑ´Ù.

 

 

 

 

 

 

3. ¸¶Ä¡´Â ¸»

º» ¹®¼­¿¡¼­´Â ÇÙ½É ¿ø¸®¿¡ ´ëÇØ¼­¸¸ ¾Ë¾Æº¸¾ÒÁö¸¸ SQL Injection¿¡ ´ëÇÑ Áö½ÄÀÌ ÀÖ´Ù¸é À̸¦ ÀÀ¿ëÇÏ±â ¾î·ÆÁö ¾ÊÀ» °ÍÀÌ´Ù. SQL InjectionÀº ¾ÆÁ÷±îÁöµµ ÁÖ¿ä À¥ ÇØÅ· ±â¹ý Áß¿¡ Çϳª·Î ÀÎ½ÄµÉ Á¤µµ·Î ¸¹ÀÌ »ç¿ëµÇ±â ¶§¹®¿¡ ÀÌ ºÎºÐ¿¡ ´ëÇØ¼­ °¢º°ÇÑ ÁÖÀǰ¡ ÇÊ¿äÇÏ´Ù. ´ëºÎºÐ ÇØÅ· ±â¹ýÀÇ ±â¼úÀûÀÎ ÃÖÁ¾ ¸ñÇ¥´Â ShellÀ» ȹµæÇÏ´Â °ÍÀÌÁö¸¸ À¥ ÇØÅ·ÀÇ Æ¯¼º »ó ÀÛÁö¸¸ ºÎ´çÇÑ ±ÇÇÑÀ¸·Îµµ À¥ »çÀÌÆ®¿¡ Ä¡¸íÀûÀÎ ÇÇÇØ¸¦ ÀÔÈú ¼öµµ Àֱ⠶§¹®¿¡ ´õ¿í ÁÖÀǰ¡ ¿ä±¸µÈ´Ù.

ÀÌ¿ÜÀÇ ¿¬±¸·Î, magic_quotes_gpc¿¡¼­ GPC°¡ GET, POST, COOKIE¸¦ ³ªÅ¸³»±â ¶§¹®¿¡, HEAD µîÀÇ Method·Î ¿äûÇÒ °æ¿ì¿£ À̽ºÄÉÀÌÇÁ°¡ ¾î¶»°Ô 󸮵ÉÁö »ìÆìº¸¾Ò´Âµ¥ ³»ºÎÀûÀ¸·Î´Â °°Àº Method·Î Ãë±ÞÇϱ⠶§¹®¿¡ ´Ù¸¥ HTTP Method·Î º¸³»´õ¶óµµ À̽ºÄÉÀÌÇÁ 󸮰¡ µÇ¹Ç·Î ¾È½ÉÇØµµ µÈ´Ù.

(¶ÇÇÑ ¾Õ¿¡¼­ HTTP_X_FORWARDED_FOR¸¦ ¿¹·Î µé¾ú´Âµ¥, º» ¹®¼­¿Í Á÷Á¢ÀûÀ¸·Î °ü·ÃÀº ¾øÁö¸¸ ÀÌ¿¡ ´ëÇØ¼­ ÇѰ¡Áö ´õ ÷ºÎÇÏÀÚ¸é, ´ëºÎºÐ À¥ ÇÁ·Î±×·¥Àº ÀÌ º¯¼ö °ªÀ» ½Å·ÚÇÏ´Â °æÇâÀÌ ÀÖ´Ù. À̰ÍÀº »ç¿ëÀÚÀÇ ÁÖ¼Ò¸¦ ³ªÅ¸³»´Â °ªÀε¥, REMOTE_ADDR º¯¼ö °ª°ú´Â ´Þ¸® »ç¿ëÀÚ°¡ Á÷Á¢ÀûÀ¸·Î Á¶ÀÛÇÒ ¼ö Àֱ⠶§¹®¿¡ °¡±ÞÀûÀÌ¸é »ç¿ëÀ» ÇÇÇÏ°í ±»ÀÌ »ç¿ëÀ» ÇÑ´Ù¸é ÀûÀýÇÑ Á¶Ä¡¸¦ ÃëÇÑ ÈÄ »ç¿ëÇØ¾ß ÇÑ´Ù.)