Ä¿ÇǴнº, ½Ã½ºÅÛ ¿£Áö´Ï¾îÀÇ ½°ÅÍ Ä¿ÇÇÇâÀÌ ³ª´Â *NIX
Ä¿ÇǴнº
½Ã½ºÅÛ/³×Æ®¿÷/º¸¾ÈÀ» ´Ù·ç´Â °÷
* HanIRCÀÇ #coffeenix ¹æ
[ Àåºñ ¹× ȸ¼± ÈÄ¿ø ]
HOME > µ¥ÀÌÅͺ£À̽º(database) > MySQL µµ¿ò¸»
°Ë»ö : »çÀÌÆ® WHOIS À¥¼­¹ö Á¾·ù


  MySQL¿¡¼­ º¸¾ÈÀ§ÇØ load_file() °æ·Î Á¦ÇÑÇϱâ ÀÛ¼ºÀÏ : 2010/05/27 21:02
 
  • ±Û¾´ÀÌ : ÁÁÀºÁøÈ£ ( http://coffeenix.net/ )
  • Á¶È¸¼ö : 26430
          [ ÀÌÀüÈ­¸é / ¼öÁ¤ ]   ºñ¹Ð¹øÈ£ :     Àμâ¿ë È­¸é
      Á¦  ¸ñ : MySQL¿¡¼­ º¸¾ÈÀ§ÇØ load_file() °æ·Î Á¦ÇÑÇϱâ
    ÀÛ¼ºÀÚ : ÁÁÀºÁøÈ£(truefeel, http://coffeenix.net/ )
    ÀÛ¼ºÀÏ : 2009.12.1(È­)
    Á¤¸®ÀÏ : 2010.5.14(±Ý)

    1. SQL Injection¿¡¼­ load_file() ÇÔ¼öÀÇ À§Çè

    SQL Injection(SQL ÀÎÁ§¼Ç) °ø°Ý¿¡ ´ëóÇϱâ À§Çؼ­´Â ´ÙÀ½°ú °°Àº Á¶Ä¡°¡ ÇÊ¿äÇÏ´Ù.

    - SQL Injection°ø°Ý µî À¥Ãë¾à¼ºÀÌ ¾øµµ·Ï ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Â°Ô ¿ì¼±ÀÌ´Ù. (±×·¯³ª ¸¹Àº »çÀÌÆ®¿¡¼­ À̺κÐÀº µÞÀüÀÌ´Ù.)
    - ÁÖ±âÀûÀ¸·Î ¸ðÀÇ Å×½ºÆ®¸¦ ÇÑ´Ù.
    - À¥¹æÈ­º®¿¡¼­ UNION SELECT, UNION ALL SELECT, LOAD_FILE() µî ´Ù¾çÇÑ SQL Injection °ø°Ý À¯ÇüÀ» Â÷´ÜÇÑ´Ù.
    - ±×¸®°í, load_file() ÇÔ¼öÀÇ °æ·Î Á¦Çѵµ °í·ÁÇÑ´Ù.

    MySQLÀÇ SELECT LOAD_FILE() ÇÔ¼ö, LOAD DATA´Â ¼­¹ö³»¿¡ ÀÖ´Â ÆÄÀÏÀ» ÀоîµéÀÌ´Â ¸í·ÉÀÌ´Ù. MySQL µ¥¸óÀÌ ÆÄÀÏÀ» ÀÐÀ» ±ÇÇÑÀÌ ÀÖ´Ù¸é, ¼­¹ö³»ÀÇ °æ·Î¿Í »ó°ü¾øÀÌ ¾î¶°ÇÑ ÆÄÀÏÀÌ¶óµµ ÀÐÀ» ¼ö ÀÖ´Ù. À¥ÆäÀÌÁö°¡ SQL Injection °ø°ÝÀÇ Ãë¾àÁ¡ÀÌ ÀÖ´Ù°í ÇÒ ¶§ ´ÙÀ½°ú °°Àº Çü½ÄÀ¸·Î ½±°Ô À¥¿¡¼­ ¼­¹ö ³»ÀÇ ÆÄÀÏÀ» È®ÀÎÇÒ ¼ö ÀÖ´Â À§Ç輺ÀÌ Á¸ÀçÇÑ´Ù.

     
    select ...»ý·«... from ...»ý·«...  UNION SELECT LOAD_FILE("/etc/passwd");
     


    ÀÌ ÇÔ¼ö°¡ Æí¸®¼º, È°¿ë¼º Ãø¸é¿¡¼­´Â ÁÁÀ» ¼ö ÀÖÁö¸¸, º¸¾È¿¡´Â Ãë¾àÇÑ Åë·Î¸¦ Á¦°øÇÏ´Â ¼ÀÀÌ´Ù.

    ÃÖ±Ù(2009¿ù ¸») ·ç¸¶´Ï¾ÆÀÇ Unu ÇØÄ¿´Â ¼¼°è ÁÖ¿ä »çÀÌÆ®¿Í ±¹³» º¸¾È ¾÷ü »çÀÌÆ®¸¦ SQL Injection°ø°ÝÀ¸·Î ÇØÅ·À» Çß´Ù. ±×¸®°í, MySQLÀÇ load_file() ÇÔ¼ö·Î ¼­¹öÀÇ /etc/ ÆÄÀϱîÁö ĸÃÄÇÏ¿© ºí·Î±×¿¡ °ø°³ÇÑ ÀûÀÌ ÀÖ´Ù. ÀÌ ±Û¿¡¼­´Â ÀÛÀº ºÎºÐÀÎ load_file() ÇÔ¼öÀÇ °æ·Î Á¦ÇÑ¿¡ ´ëÇؼ­ ¾ê±âÇÒ °ÍÀÌ´Ù.


    2. MySQL¼­¹ö·Î Á÷Á¢Àû Á¢±ÙÀÌ ºÒ°¡´ÉÇصµ DB¼­¹öÀÇ ÆÄÀÏÀ» º¼ ¼ö ÀÖ´Ù.

     
    [ ±¸¼º ¿¹ ]

    - A¼­¹ö : À¥¼­¹ö
    - B¼­¹ö : MySQL¼­¹ö
     


    À§Ã³·³ À¥¼­¹ö¿Í MySQL¼­¹ö°¡ ºÐ¸®µÇ¾î ÀÖÀ» ¶§, À¥¼­¹ö¿¡¼­ load_file("/etc/passwd") ÇÔ¼ö¸¦ È£ÃâÇß´Ù¸é ¾î¶² ¼­¹öÀÇ ÆÄÀÏÀ» º¸¿©ÁÙ±î? MySQL µ¥¸óÀÌ local ÆÄÀÏ¿¡ Á¢±ÙÇÏ¿© º¸¿©ÁÖ´Â °ÍÀ̹ǷÎ, B¼­¹öÀÇ ÆÄÀÏÀÌ µÈ´Ù. ±×·¯¹Ç·Î ¿ÜºÎ¿¡¼­ MySQL¼­¹ö·ÎÀÇ Á÷Á¢ÀûÀÎ Á¢±ÙÀÌ ºÒ°¡´ÉÇÏ´õ¶óµµ, load_file()ÇÔ¼ö¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù¸é DB¼­¹ö ³»ºÎÀÇ ÆÄÀÏÀ» º¼ ¼ö ÀÖ´Ù.


    3. MySQL¿¡¼­ load_file() ÇÔ¼öÀÇ °æ·Î¸¦ Á¦ÇÑÇÏ´Â ¹æ¹ý



    MySQL ¸Å´º¾óÀ» »ìÆ캸ÀÚ.

     
    --secure-file-priv=path
    ÀÌ ¿É¼ÇÀº LOAD_FILE() ÇÔ¼ö ¹× LOAD DATA ¿Í SELECT ... INTO OUTFILE ¸í·É¹®ÀÌ Æ¯Á¤ µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏ¿¡¼­¸¸ µ¿ÀÛÀ» Çϵµ·Ï ÇÑÁ¤ÇÑ´Ù. ÀÌ ¿É¼ÇÀº MySQL 5.1.17¿¡¼­ Ãß°¡µÇ¾ú´Ù.
     


    À§Ã³·³ MySQL 5.1.17ºÎÅÍ´Â LOAD_FILE() ÇÔ¼ö, LOAD DATA, SELECT ... OUTFILEÀ» ƯÁ¤ µð·ºÅ丮³»ÀÇ ÆÄÀϸ¸ Çã¿ëÇϵµ·Ï ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. --secure-file-priv ¿É¼ÇÀº µ¿ÀûÀ¸·Î´Â ¼³Á¤°ªÀ» º¯°æÇÒ ¼ö°¡ ¾ø´Ù. my.conf ÀÇ '[mysqld]' ¼½¼Ç¿¡ ´ÙÀ½°ú °°Àº ¼³Á¤À» ÇÑ´Ù. (°æ·Î´Â ¿î¿µ ȯ°æ¿¡ ¸Â°Ô ÇÒ °Í)

     
    [mysqld]

    secure-file-priv=/var/tmp
     


    À§Ã³·³ ¼³Á¤ÇÏ°í MySQL µ¥¸óÀ» ½ÇÇàÇϸé load_file()À» »ç¿ëÇÒ ¼ö ÀÖ´Â °æ·Î°¡ /var/tmpÀ¸·Î Á¦ÇÑÀÌ µÈ´Ù.


    4. secure-file-priv ¼³Á¤ Àû¿ë Àü/ÈÄ ºñ±³

    1) secure-file-priv= Àû¿ëÀü

    ¨ç SELECT °á°ú¸¦ /tmp/result.txt ÆÄÀÏ·Î ÀúÀå

     
    mysql> select * from log into outfile "/tmp/result.txt";
    Query OK, 151 rows affected (0.00 sec)
     


    ¨è ±ÇÇÑÀÌ ÀÖ´Â ÆÄÀÏÀ» load_file()·Î ÀÐÀ¸¸é È­¸é¿¡ ÆÄÀÏ ³»¿ëÀÌ ±×´ë·Î Ãâ·ÂµÈ´Ù. (°á°ú È­¸éÀº »ý·«)

    ¨é ±ÇÇÑÀÌ ¾ø´Â ÆÄÀÏÀ» load_file()·Î ÀÐÀ» ¸é NULL¸¸ Ç¥½ÃµÈ´Ù.

     
    1) ÆÄÀÏ ±ÇÇÑ

    # ls -al syslog.conf protocols
    -rw-r--r-- 1 root root 6108 Oct 12  2006 protocols
    -rw-r----- 1 root root  734 Jul  2  2009 syslog.conf

    2) load_file() ÇÔ¼ö »ç¿ë

    mysql> select load_file("/etc/syslog.conf");
    +-------------------------------+
    | load_file("/etc/syslog.conf") |
    +-------------------------------+
    | NULL                          |
    +-------------------------------+
    1 row in set (0.00 sec)
     


    2) secure-file-priv= Àû¿ëÈÄ

    ¨ç ¼³Á¤°ª È®ÀÎ

     
    mysql> show variables like 'secure%';
    +------------------+-----------+
    | Variable_name    | Value     |
    +------------------+-----------+
    | secure_auth      | OFF       |
    | secure_file_priv | /var/tmp/ |
    +------------------+-----------+
    2 rows in set (0.00 sec)
     


    ¨è °æ·Î¸¦ /var/tmp/ ·Î Á¦ÇÑÇßÀ¸¹Ç·Î, /etc/ ¾Æ·¡ ÆÄÀÏÀº NULL·Î Ç¥½ÃµÈ´Ù. (/etc/protocols ÆÄÀÏÀº ´©±¸³ª Àб⠱ÇÇÑÀÌ ÀÖÀ½)

     
    mysql> select load_file("/etc/protocols");
    +-----------------------------+
    | load_file("/etc/protocols") |
    +-----------------------------+
    | NULL                        |
    +-----------------------------+
    1 row in set (0.00 sec)
     


    ¨é SELECT ... INTO OUTFILE »ç¿ëÇÒ ¶§ ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.

     
    1) MySQLµ¥¸óÀÌ ¾²±â ±ÇÇÑÀÌ ¾ø¾î¼­ ¿¡·¯°¡ ¹ß»ý
    mysql> select * from myfile into outfile "/var/log/result.txt";
    ERROR 1 (HY000): Can't create/write to file '/var/log/result.txt' (Errcode: 13)

    2) MySQLµ¥¸óÀÌ ¾²±â ±ÇÇÑÀº ÀÖÁö¸¸, --secure-file-priv ¼³Á¤À¸·Î °æ·Î Á¦ÇÑµÇ¾î ³ª¿À´Â ¿¡·¯
    mysql> select * from myfile into outfile "/tmp/result.txt";
    ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
     



    5. Âü°í ÀÚ·á

    1) MySQL °ü·Ã

    * MySQL »ç¿ëÀڸŴº¾ó - ¸í·É¾î ¿É¼Ç
      http://www.mysqlkorea.co.kr/sub.html?mcode=manual&scode=user&m_no=23109&cat1=&cat2=&cat3=〈=k&ver_name=USER

    * MYSQL 5.1 ¸Å´º¾ó - 5.1.2. Server Command Options ( --secure-file-priv=path )
       http://dev.mysql.com/doc/refman/5.1/en/server-options.html

    * MYSQL LOAD_FILE SQL Injection
      http://www.tullyrankin.com/mysql-load_file-sql-injection
      LOAD_FILE ÇÔ¼ö´Â 16Áø¼ö ¹®ÀÚ¿­·Î ÆÄÀÏÀ» ÀÐÀ» ¼öµµ ÀÖ´Ù.
      (¿¹) /etc/passwd ´Â 0x2f6574632f706173737764.
           LOAD_FILE(0x2f6574632f706173737764)
      ¡Ø ÀÌ URL¿¡ ¼Ò°³µÈ perl½ºÅ©¸³Æ® 4¹ø° ÁÙÀÇ 0x$encn"; Àº 0x$enc\n"; ¸¦ Àß ¸ø Ç¥±âÇÑ °ÍÀÓ

    2) SQL Injection °ü·Ã

    * SQL Injection Cheat Sheet
      http://michaeldaw.org/sql-injection-cheat-sheet

    * Backdoor webserver using MySQL SQL Injection
      http://www.greensql.net/publications/backdoor-webserver-using-mysql-sql-injection

    * 12.22~23 Ä¿ÇǴнº À̾߱â (Intel»çÀÌÆ® SQL Injectionµî) (2009.12.24)
      http://coffeenix.net/bbs/viewtopic.php?p=5988#5988

    * ´ë·® SQL Injection °ø°Ý ÁÖÀÇ (2009.12.11)
      http://coffeenix.net/bbs/viewtopic.php?p=5978#5978

    * nProtect À¥»çÀÌÆ®, SQL Injection°ø°Ý ´çÇØ (2009.11.30)
      http://truefeel.tistory.com/171
      Ä¿ÇǴнº Ä«Æä ÃÖ±Ù ±Û
    [04/18] ??? ?????
    [04/17] ???? onion ?????? -
    [04/11] ±¹°¡&#5
    [04/10] Stride Into Dream:
    [03/20] Re: ¿Â¶óÀΰÔÀÓÀÇ Á¾ÁÖ±¹ ´ëÇѹα¹
    [10/20] Cross Compiler ±ò
    [07/14] SSL ¬¡¬°
    [04/26] Re: µµ½ºÈ­¸é ¿ø°ÝÁ¶Á¾ ¿©ºÎ
    [04/25] µµ½ºÈ­¸é ¿ø°ÝÁ¶Á¾ ¿©ºÎ
    [10/30] Cshell¿¡¼­ ³­¼ö ¼³Á¤
    [10/23] °øÇ×öµµÁÖ½Äȸ»ç SE ±¸ÀÎ Ëì
    [01/26] Re: wgetÀ¸·Î ´Ù¸¥¼­¹ö¿¡ÀÖ´Â µð·ºÅ丮¸¦ °¡Á®¿À·Á°íÇÕ´Ï´Ù.
    [01/25] wgetÀ¸·Î ´Ù¸¥¼­¹ö¿¡ÀÖ´Â µð·ºÅ丮¸¦ °¡Á®¿À·Á°íÇÕ´Ï´Ù.
    [01/11] ƯÁ¤ ¾Èµå·ÎÀ̵å WebView ¹öÀü¿¡¼­ SSL ¹®Á¦ (WebView ¹ö±×)
    [08/01] DNS forwarder (Àü´ÞÀÚ) ¼­¹ö¸¦ ÅëÇؼ­ Äõ¸®ÇÏ¸é ¿ª¹æÇâÀ» ¹Þ¾Æ¿ÀÁú ¸øÇÕ´Ï´Ù.
      New!   ÃÖ±Ù¿¡ µî·ÏÇÑ ÆäÀÌÁö
      KiCad EDA Suite project (Free/Libre/Open-Source EDA Suite) (CAD)
      ¿ÀÇÂij½ºÄÉÀ̵å ijµå (OpenCASCADE CAD)
      QCad for Windows --- GNU GPL (Free Software)
      The Hello World Collection
      IPMI¸¦ È°¿ëÇÑ ¸®´ª½º ¼­¹ö°ü¸®
      DNS ¼³Á¤ °Ë»ç
      nagiosgraph ¼³Ä¡ ¹æ¹ý
      Slony-I ¼³Ä¡ ¹æ¹ý (postgresql replication tool)
      Qmail±â¹ÝÀÇ Anti spam ½Ã½ºÅÛ ±¸ÃàÇϱâ
      clusterssh

    [ ÇÔ²²ÇÏ´Â »çÀÌÆ® ]




    ¿î¿µÁø : ÁÁÀºÁøÈ£(truefeel), ¾ß¼ö(yasu), ¹ü³ÃÀÌ, sCag
    2003³â 8¿ù 4ÀÏ~