1581, 5/80 ȸ¿ø°¡ÀÔ  ·Î±×ÀΠ 
   asdzxc301
   Æ÷¸Ë ½ºÆ®¸µ ¹ö±× ºÐ¼®

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=1152 [º¹»ç]


¿ø¹® : http://downloads.securityfocus.com/library/format-bug-analysis.pdf

Andreas Thuemmel, a.thuemmel@web.de
-Version 1.0, 15-02-2001-


1. ¾È³» ¹× ¿ä¾à
Æ÷¸ä½ºÆ®¸µ¹ö±×´Â ·ÎÄà À̳ª ¿ø°Ý°ø°Ý¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â »õ·Î¿î ±â¼úÀÌ´Ù.
1999³â 9¿ù À§Çè¿¡ ´ëÇÑ ³»¿ëÀÌ ¹ßÇ¥µÇ°í 2000³â 6¿ù wu-ftpd 2.6.0¿¡ ´ëÇÑ
°ø°ÝÄڵ尡 ¹ßÇ¥µÇ¾ú´Ù. °ø°ÝÄÚµå´Â 1³âÁ¤µµ ¾ð´õ±×¶ó¿îµå¿¡¼­ ¹èÆ÷µÇ¾úÀ¸¸ç
2000³â ¿©¸§ÀÌÈÄ ¸¹Àº ¼öÀÇ Æ÷¸Ë½ºÆ®¸µ¹ö±×¸¦ ±âÃÊ·ÎÇÑ °ø°ÝÄڵ尡
¹ßÇ¥µÇ¾úÀ¸¸ç ¸®´ª½º¿Í À¯´Ð½º ¹èÆ÷ÀÚµé°ú ¹ê´õµéÀÇ °ü½É»ç°¡ µÇ¾ú´Ù.

. ¿ø°Ý °ø°Ý:
  wu-ftpd, BSD ftpd, proftpd, rpc.statd, PHP 3¿Í 4, TIS-Firewall Toolkit, ...

. ·ÎÄÃ °ø°Ý:
  lpr, LPRng, ypbind, BSD chpass ¿Í fstat, libcÀÇ localistaion, ...

. ¶ó¸é ¿úÀº Æ÷¸ä½ºÆ®¸µ¹ö±×¸¦ ÀÌ¿ëÇÏ¿© wu-ftpd¿Í rpc.statd ±×¸®°í
  LPRngµîÀ» °ø°ÝÇÑ´Ù.

ÀÌ ±â»ç´Â Æ÷¸ä½ºÆ®¸µ °ø°ÝÄÚµåÀÇ ¼ÓÀÓ¼ö¿Í Á¦ÇÑ»çÇ׵ ´ëÇÏ¿© »ý°¢ÇÏ°í
ºÐ¼®ÇϱâÀ§Çؼ­ ¾²¿©Á³´Ù. ¿ö½ÌÅÏ´ëÇÐÀÇ ftp¼­¹ö(wu-ftpd 2.6.0)¿Í Red Hat
Linux 6.2¸¦ ÀÌ¿ëÇؼ­ ½ÇÁúÀûÀÎ ¿¹¸¦ µé°ÍÀÌ´Ù.  ÀÌ ±â»çÀÇ ±¸Á¶´Â ´ÙÀ½°ú °°´Ù.

. ¹®Á¦ÀÇ Á¤ÀÇ
. ½ºÅØÀбâ
. ¹®ÀÚ¿­ º¯¼öÀÇ ³»¿ë Àбâ
. Á¤¼ö°ªÀÇ ¾²±â
. Æ÷¸Ë½ºÆ®¸µ ¹ö±×¿¡ ´ëÇÑ ¹æ¾î

÷ºÎÀÇ »ùÇÃÄÚµå´Â ÀÌ ±â»çÀÇ ¿¹¸¦ À§ÇÏ¿© ¾²¿©Á³´Ù. ÀÌ ÄÚµå´Â ¸î¸îÀÇ
´Ù¸¥½Ã½ºÅÛ¿¡¼­ À¯¿ëÇÑ Æ÷¸äÆ®½º¸µÀ» »ý¼ºÇÒ ¼ö ÀÖ´Ù.

2. ¹®Á¦¿Í »ý°¢

C¾ð¾î(C++Æ÷ÇÔ)¿¡¼­´Â ÀμöÀÇ ¼ö¸¦ °¡º¯ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ°Ô
Á¤ÀǵǾîÀÖ´Ù. ºÒ·ÁÁú¶§¿¡ ¸î°³ÀÇ Àμö°¡ ÇÔ¼ö¿¡ ÁÖ¾îÁ³´ÂÁöÀ» ¾Ë·ÁÁØ´Ù.
Ç¥ÁØ CÀÇ °æ¿ì fprintf(), printf(), sprintf(), snprintf(), vprintf(),
vsprintf(), vsnprintf(), setproctitle()¿Í syslog()µîÀÌ À̵éÁßÀÇ
ÇϳªÀÌ´Ù. ÀÌ ¸ðµç ÇÔ¼öµéÀº °øÅëµÈ Á¡ÀÌ µÎ°¡Áö ºÎºÐÀÌ ÀÖ´Ù.

. óÀ½Àμö´Â ºÒ·ÁÁø Æ÷¸ä¹®ÀÚ¿­ÀÌ´Ù.
. ´ÙÀ½¿¡ ¿À´Â Àμö´Â Æ÷¸ä¹®ÀÚ¿­ÀÇ ÇüÅ¿¡ µû¶ó ¿©·¯°®·Î º¯È¯µÈ´Ù.

´ÙÀ½¿¡ À̾߱âÇÏ´Â ºÎºÐµéÀº ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖµµ·Ï printf()ÇÔ¼ö¸¦
±âÁØÀ¸·Î ¼³¸íÇÑ´Ù. ´ÙÀ½¿¡ ¼³¸íÇÏ´Â ¹®ÀåµéÀº Æ÷¸ä¹®ÀÚ¿­À» ó¸®ÇÏ´Â
¸ðµç ÇÔ¼ö¿¡¼­ Àß µ¿ÀÛÇÑ´Ù. Æ÷¸ä¹®ÀÚ¿­Àº ´ÙÀ½ÀÇ µÎ°¡Áö°æ¿ì¿¡ »ç¿ëÇÑ´Ù.

. µû¶ó¿À´Â Àμö¸¦ ¹®ÀÚ¿­·Î º¯°æÇÏ´Â ¹æ¹ýÀ» Á¤ÀÇ
. ¾ó¸¶³ª ¸¹Àº Àμö°¡ ÇÊ¿ä·Î ÇÏ´ÂÁö Á¤ÀÇ

Æ÷¸ä¹®ÀÚ¿­ÀÚ½ÅÀº Ãâ·Â½ºÆ®¸²À¸·Î º¹»çµÇ°í µû¶ó¿À´Â ÀμöµéÀ» ¾î¶»°Ô
º¯È¯ÇÒ°ÍÀÎÁö¿¡ ´ëÇÑ Á¤ÀǸ¦ ´ãÀº º¯È¯ÁöÁ¤ÀÚµéÀÎ Æò¹üÇÑ ¹®ÀÚµéÀÇ È¥ÇÕÀ¸·Î
µÇ¾îÀÖ´Ù.

int i = 20;
int j = 10;
char *format_string = "The numbers are %d and %d";
printf(format_string, i, j);

À§ÀÇ ÄÚµå´Â "The numbers are 20 and 10"À̶ó°í Ç¥ÁØÃâ·ÂÀ¸·Î ÀμâÇÑ´Ù.
"%d"°¡ º¯È¯ÁöÁ¤ÀÚ ÀÌ´Ù. º¯È¯ÁöÁ¤ÀÚ´Â %·Î ½ÃÀÛÇÑ´Ù. %µÚ¿¡ µû¶ó¿À´Â
¹®ÀÚµéÀº Ãâ·Â(Á¤·Ä, Æø, paddingµî)ÀÇ ÇüŸ¦ ÁöÁ¤ÇÏ°í, ÁÖ¾îÁø ÀμöÀÇ
ÇüŸ¦ °áÁ¤ÇÑ´Ù. Ãâ·Â½ºÆ®¸²¿¡¼­ ¸ðµç %ÀÇ ÇüÅÂÁö½ÃÀÚ´Â ÀûÀýÇÑ ÀμöÀÇ
°ªÀ¸·Î ´ëÄ¡µÈ´Ù. (%ÀÚü¸¦ Ãâ·ÂÇÏ´Â %%´Â Á¦¿Ü)
Áß¿äÇÑ º¯È¯Áö½ÃÀÚ´Â ´ÙÀ½°ú °°´Ù.

. %d - Á¤¼ö(int)¸¦ ½ÊÁø¹ý¼ö(decimal)
. %x - Á¤¼ö(int)¸¦ 16Áø¹ý¼ö(hex)
. %s - ¹®ÀÚ¿­

¹öÆÛ¿À¹öÇ÷οì¿Í °°ÀÌ Æ÷¸ä½ºÆ®¸µ¹ö±×ÀÇ ¹®Á¦´Â ÇÁ·Î±×·¥°³¹ß»õÀÇ ¹«Áö¿Í
°ÔÀ¸¸§¿¡ÀÇÇÏ¿© ¹ß»ýÇÑ´Ù. ´ÙÀ½ÀÇ Äڵ带 »ý°¢ÇØ º¸ÀÚ

char *user_supplied_input;
[...]
printf(user_supplied_input);

¶Ç´Â

char *user_supplied_input;
char *some_string;
[...]
sprintf(some_string, "%s", user_supplied_input);
[...]
printf(some_string);

¾çÂÊ°æ¿ì´Ù »ç¿ëÀÚ°¡ Á¦°øÇÑ ÀÔ·ÂÀÌ printf()ÇÔ¼öÀÇ Æ÷¸ä¹®ÀÚ¿­·Î Á¦°øµÈ´Ù.

printf("%s", user_supplied_input);
º¸´Ù´Â
printf("%s", some_string);
ÀÌ ´õ¿í Á¤È®ÇÑ »ç¿ë¹ýÀÌ´Ù(?). À§ÀÇ ¿¹¿¡¼­ »ç¿ëÀÚ°¡ %x°¡ Æ÷ÇԵǾî ÀÖ´Â
¹®ÀÚ¿­À» ÀÔ·ÂÇÑ´Ù¸é ¾î¶² Çö»óÀÌ ¹ß»ýÇÒ±î? printf()´Â Á¤¼ö Àμö°¡
Æ÷¸ä¹®ÀÚ¿­ÀÇ µÚ¿¡ ÀÖÀ»°ÍÀ̶ó°í °¡Á¤ÇÒ °ÍÀÌ´Ù. ±×·¯³ª °Å±â¿¡´Â Àμö°¡
¾ø´Ù. ÀÌ¿Í°°Àº À߸øµÈÁ¡Àº ÄÄÆÄÀϽÿ¡ ÀνĵÇÁö ¾Ê´Â´Ù.


¿¹: wu-ftpd 2.6.0

wu-ftpd 2.6.0ÀÇ ¹®Á¦´Â vreply()(src/ftpd.c)¿¡ ÀÖ´Ù.
°£´ÜÇÏ°Ô vreply()´Â ´ÙÀ½°ú °°ÀÌ º¸ÀδÙ.

void vreply([...], char *fmt, [...])
{
        char buf[BUFSIZ];
        [...]

        snprintf(buf, sizeof(buf), fmt);
        [...]
}


ÀÌ¿Í°°Àº °æ¿ì¿¡ site exec¸í·ÉÀÇ *fmt´Â SITE EXEC¸í·É°ú ÇÔ²² »ç¿ëÀÚ°¡
Á¦°øÇÑ ¹®ÀÚ¿­À» Æ÷ÇÔÇÏ°í ÀÖ´Ù. ÀÌ ¹æ¹ýÀ¸·Î ftp»ç¿ëÀÚ´Â snprintf()¸¦
Á¦¾îÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àå¿¡¼­´Â ¾î¶»°Ô ÀÌ·¯ÇÑ ¹ö±×°¡ °ø°ÝµÇ´ÂÁö º¸¿©ÁÙ
°ÍÀÌ´Ù.

3. ½ºÅÃÀбâ
ÇÔ¼ö¿¡ ÀÎÀÚ¸¦ ³Ñ°ÜÁָ鼭 caller´Â È°¼ºÈ­ ÀÚ·á(activation record(or
frame))¸¦ ½ºÅÿ¡ ³Ö´Â´Ù. ¿¹¸¦ µé¸é ÇÔ¼ö f(int i, int *j)°¡ ºÒ·ÁÁú¶§¿¡
´ÙÀ½°ú °°Àº ½ºÅÃÀÇ ±¸Á¶¸¦ °¡Áö°Ô µÈ´Ù.


    |  +----------------------------+   <--------- Bottom of stack
    |  | Local variables,           |
    |  | saved registers,           |
    |  | activation record of       |
    |  | other functions            |
    |  |                            |
    |  |                            |
    |  +----------------------------+   // -------------------------
    |  |                            |   // --                     --
    |  |  Pointer to J              |   // --  ÀÌ ºÎºÐÀÌ f()¿¡    --
    |  |                            |   // --  ´ëÇÑ È°¼ºÈ­ ÀÚ·á   --
    |  +----------------------------+   // --  °¡ µÈ´Ù.           --
    |  |                            |   // --                     --
    |  |  value of I                |   // --                     --
    |  |                            |   // --                     --
    |  +----------------------------+   // --                     --
    |  |                            |   // --                     --
    |  |  Return address to caller  |   // --                     --
    |  |          f()               |   // --                     --
    |  |                            |   // --                     --
    |  +----------------------------+   // -------------------------
    |  |  saved registers           |
    |  +----------------------------+
    |  |  local variables of        |
    |  |          f()               |
    |  |                            |
    |  +----------------------------+   <--------- Top of stack
    V

¸¸¾à Àû´çÇÑ Àμö°¡ ¾ø´Â»óÅÂÀÇ Æ÷¸ä½ºÆ®¸µÀ» printf()¿¡ ÁØ´Ù¸é ¾î¶²
»óȲÀÌ ³ªÅ¸³¯±î?  printf()¸¦ À§ÇÑ ¸ðµç Àμö´Â ½ºÅÿ¡ ³õ¿©Áø´Ù.
printf()´Â activation record°¡ Æ÷¸ä½ºÆ®¸µÀÇ ¸ðµç º¯È¯Áö½ÃÀÚ°¡ °¡¸®Å°´Â
¼ö¸¸Å­ÀÇ Àμö°¡ ½ºÅÿ¡ ÀÖ´Ù°í °¡Á¤ÇÏ°Ô µÈ´Ù. ¸ðµç %´Â ½ºÅØ¿¡¼­ Àû´çÇÑ
À§Ä¡ÀÇ °ªÀ» ÀÐ°Ô µÈ´Ù. ÀÌ°ÍÀº ½ºÅÃÀ» ¾Æ·¡ÂÊÀ¸·Î ÀÐ°ÔµÇ°í ½ÇÁúÀûÀÎ
È°¼ºÈ­ ÀÚ·á(activation record)ÀÇ ¹üÀ§¸¦ ¹þ¾î³µ´ÂÁö¿Í »ó°ü¾øÀÌ
Ãâ·Â½ºÆ®¸²ÂÊÀ¸·Î Àμ⸦ ÇϰԵȴÙ. activation record¿¡´Â ¹üÀ§°Ë»ç°¡
¾ø´Ù.

ÀϹÝÀûÀÎ »óȲ¿¡¼­ ¸ð¸ä½ºÆ®¸µÀº caller¿¡ ÀÇÇØ ÀûÀýÇÑ Å©±âÀÇ ÀÚ·á°¡
½ÇÁ¦ activation record¿¡ ³Ö¾îÁö°Ô µÈ´Ù. Æ÷¸ä½ºÆ®¸µ Á¶ÀÛ °ø°ÝÀÚ´Â
printf()°¡ ½ÇÁ¦ activation recordº¸´Ù Å©´Ù¶ó°í »ý°¢ÇÏ°Ô ¸¸µç´Ù.

ÀÌ¿Í°°Àº ¹æ¹ýÀ¸·Î printf()ÇÔ¼ö°¡ Ãâ·Â½ºÆ®¸²À¸·Î Ãâ·ÂÀ» ÇϰԵǸé
°ø°ÝÀÚ´Â ½ºÅÃÀÇ °ªµéÀ» ÀÐÀ»¼ö ÀÖ°Ô µÈ´Ù.

¿¹: wu-ftpd 2.6.0
Red Hat 6.2 ¸®´ª½º½Ã½ºÅÛ¿¡¼­ÀÇ ftp¼¼¼Ç¿¹¸¦ µé¾îº»´Ù. ftpŬ¶óÀ̾ðÆ®
´ë½Å¿¡ netcaÀ» »ç¿ëÇÏ¿´´Ù. »ç¿ëÀÚÀÇ ÀÔ·ÂÀº ±½Àº(?)±Û¾¾·Î Ç¥ÇöÇÑ´Ù.
»ç¿ëÀÚ "andreas"°¡ "SITE EXEC %x %x %x %x"¸í·ÉÀ» ½ÇÇàÇÑ´Ù.  %x´Â
Æ÷¸ä½ºÆ®¸µÀ¸·Î Àνĵǿ© °á°ú´Â "31 bffff53c 1ee 6d"·Î ³ªÅ¸³ª ½ÇÁ¦ ftpd
processÀÇ ½ºÅðªÀ» Ãâ·ÂÇÑ´Ù.


% nc jeddy3 21
220 jeddy3 FTP server (Version wu-2.6.0(2) Thu Aug 3 18:24:27 CEST
2000)
ready.
USER andreas
331 Password required for andreas.
PASS 2138
230 User andreas logged in.
SITE EXEC %x %x %x %x
200-31 bfffff53c 1ee 6d
200 (end of '%x %x %x %x')
QUIT
221-You have transferred 0 bytes in 0 files.
221-Total traffic for this session was 291 bytes in 0 transfers.
221-Thank you for using the FTP service on jeddy3.
221 Goodbye.


4. ÇÁ·Î¼¼¼­ ¸Þ¸ð¸®ÀÇ ÀÓÀÇ À§Ä¡ÀÇ ¹®ÀÚ¿­ Àбâ

¸¸¾à printfÀÇ Ãâ·ÂÀÌ »ç¿ëÀÚ¿¡°Ô º¸¿©Áø´Ù¸é, °ø°ÝÀÚ´Â ½ºÅÃÀÇ ³»¿ë¸¸À»
º¸´Â°ÍÀÌ ¾Æ´Ï°í, text³ª data¶Ç´Â heapµîÀÇ ÀÓÀÇÀ§Ä¡ÀÇ ¹®ÀÚ¿­À» ÀÐÀ» ¼ö
ÀÖ´Ù. ¾î¶»°Ô ÀÌ·¸°Ô µ¿ÀÛÇÏ´ÂÁö´Â ¹®ÀÚ¿­ Àμö°¡ ¾î¶»°Ô ÇÔ¼ö¿¡°Ô
Àü´ÞµÇ´ÂÁö¿¡ °üÇÑ ³»¿ëÀ» ¾Ë¾Æ¾ß ÇÑ´Ù. ¹®ÀÚ¿­Àμö¿¡ ´ëÇÑ activation
record´Â ÂüÁ¶(Æ÷ÀÎÅÍ°°Àº..)°ª¸¸À» ÀúÀåÇÏ°í ÀÖ´Ù. µû¶ó¼­ %s¸¦ ÀÌ¿ëÇؼ­
¿øÇÏ´Â ³»¿ëÀ» Ç¥½ÃÇϱâ À§Çؼ­´Â Æ÷ÀÎÅ͸¦ activation record¿¡
±â·ÏÇÏ¿©¾ß ÇÑ´Ù. ±×·¯³ª °ø°ÝÀÚ´Â ÇÁ·Î±×·¥Äڵ带 ¼öÁ¤ÇÒ¼ö ¾ø°í Ãß°¡ÀûÀÎ
Æ÷ÀÎÅ͸¦ printf()ÀÇ ½ºÅÿ¡ ³ÖÀ»¼ö ÀÖÀ» »ÓÀÌ´Ù. ±×µéÀº %s¸¦
ÀԷ¹®ÀÚ¿­¿¡ ³ÖÀ»¼ö ÀÖ´Ù. ÇÏÁö¸¸ ¾î¶»°Ô ÀûÀýÇÑ Æ÷ÀÎÅ͸¦ activation
record¿¡ ³ÖÀ»¼ö ÀÖÀ»±î? ±×°Í¿¡ ´ëÇÑ Á¤´äÀº Æ÷¸ä½ºÆ®¸µ¿¡ ÀÖ´Ù.

Æ÷¸ä½ºÆ®¸µÀÚ½ÅÀÌ ½ºÅÿ¡ ÀúÀåµÈ´Ù°í °¡Á¤ÇØ º¸ÀÚ. (Áö±ÝºÎÅÍ Æ®¸¯) %d³ª
%x¸¦ %s¾Õ¿¡ ³Ö¾îÁÖ¸é printf()´Â Æ÷¸ä½ºÆ®¸µÀÇ ½ÃÀۺκоձîÁö ½ºÅÃÀб⸦
½ÇÇàÇÑ´Ù. Æ÷¸ä½ºÆ®¸µ ÀÚ½ÅÀº °ø°ÝÀÚ°¡ °ü½ÉÀÖ´Â ¹®ÀÚ¿­À» Áö½ÃÇÏ´Â ¸Þ¸ð¸®ÀÇ
Æ÷ÀÎÅ͸¦ ±¸¼ºÇÏ´Â ¸î¹ÙÀÌÆ®(32ºñÆ® architecturesÀΰæ¿ì 4¹ÙÀÌÆ®)·Î
½ÃÀÛÇÑ´Ù. printf()°¡ %s¸¦ Çؼ®Çϱ⠽ÃÀÛÇϸé, printf()´Â Á¤È®ÇÏ°Ô
Æ÷ÀÎÅÍ¿¡¼­ ¹®ÀÚ¿­À» ÃßÃâÇÏ°Ô µÈ´Ù.(?)

À§¿Í °°Àº °æ¿ìÀÇ printf()°¡ Ãâ·ÂÇÏ´Â ¿¹¸¦ º¸¸é
+----------------------+----------------------------------+-------------------+
| Adress of string     |  Lots of trash: local vars,      |  the string       |
| copied as characters |  registers, return addresses,    |  that attacker is |
| to the output stream |  that are interpreted as integers|  interested in    |
+----------------------+----------------------------------+-------------------+

À§¿Í°°Àº °æ¿ìÀÇ Æ®¸¯Àº activation record¸¦ Æ÷¸ä½ºÆ®¸µÀÌ ½ÃÀÛÇÏ´Â
À§Ä¡±îÁö È®ÀåÇÏ´Â °ÍÀÌ´Ù. ÀÌ ¹æ¹ýÀ¸·Î °ø°ÝÀÚ´Â activation recordÀÇ
¸îºñÆ®¸¦ Á¦¾îÇÒ ¼ö ÀÖ°Ô µÈ´Ù.




¾Õ¿¡¼­ º¸¿©Áø ±â¼úÀÎ Æ÷¸ä½ºÆ®¸µÀÌ ÇÔ¼öÀÇ ·ÎÄú¯¼öó·³ ½ºÅØ¿¡ ÀúÀåµÉ¶§¿¡¸¸
°¡´ÉÇÑ ±â¼úÀÌ´Ù. ´Ù¸¥¸»·Î Ãâ·Â½ºÆ®¸²ÀÌ ´Ù¸¥¹öÆÛ·Î ÀμâµÇ¸é(sprintf),
À̹öÆÛ¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.

µÎ¹ø° Á¦¾à»çÇ×ÀÌ ÀÖ´Ù. C¿¡¼­ ¹®ÀÚ¿­Àº ASCIIZÇüÅ·ΠÀúÀåµÇ¾î¾ß ÇÑ´Ù.
±×·¯¹Ç·Î Æ÷ÀÎÅÍ°¡ Áö½ÃÇÏ´Â ¹®ÀÚ¿­¿¡´Â 0x00À» Æ÷ÇÔÇÒ ¼ö ¾ø´Ù.
32-bit¾ÆÅ°ÅØó¿¡¼­ ÀÌ°ÍÀº 2%ÀÇ ÁÖ¼Ò°ø°£ÀÌ Á¡°ËµÇÁö ¾Ê´Â´Ù´Â ¶æÀÌ´Ù.

Remark:
½ºÅÿ¡ ÀÖ´Â Æ÷¸ä½ºÆ®¸µÀ» ã±â À§ÇÏ¿© ÃæºÐÇÑ %xµé·Î %sÀ» ä¿ì¸é °á°ú´Â
°Å´ëÇÑ Æ÷¸ä½ºÆ®¸µ¿¡ ÀÖ´Ù.(?)  CÇ¥ÁضóÀ̺귯¸®¿¡¼­ Áö¿øµÈ´Ù¸é, $Ç÷¡±×ÀÇ
»ç¿ëÀº ÁÖ¾îÁø Àμö·Î Á÷Á¢ JUMPÇÏ´Â ¾ÆÁÖ È¿°úÀûÀÎ ¹æ¹ýÀÌ´Ù.
ÀÌ°ÍÀº ÀԷ¹öÆÛÀÇ °ø°£À» Àß¾àÇÒ »Ó¸¸¾Æ´Ï¶ó, ·ÎÄú¯¼öµéÀ̳ª ·¹Áö½ºÅÍ°ª°ú
Á¤¼ö·Î º¯È¯µÈ ¸®ÅÏÁÖ¼Ò°¡ À߸ø Ãâ·ÂµÇ´Â°ÍÀ» ¸·¾ÆÁØ´Ù.


¿¹: wu-ftpd 2.6.0

À̹ø¿¡´Â Á»´õ Á¶½ÉÇؼ­ ¸¸µé¾îÁø Æ÷¸ä½ºÆ®¸µÀÌ "SITE EXEC"ÀÇ Àμö·Î »ç¿ëµÈ´Ù.

"AA"´Â paddingÀ» À§Çؼ­ »ç¿ëµÈ´Ù. ´ÙÀ½ÀÇ ÀÌ»óÇÑ ¹®ÀÚ¿­ "@e°¡°¡"¿Í "pj°¡°¡"´Â
passwd±¸Á¶Ã¼ *pwÀÇ pw_name°ú pw_passwdÇʵ带 Áö½ÃÇÏ´Â Æ÷ÀÎÅÍÀÎ 0x8086a70°ú
0x8086540À» Ç¥ÇöÇÏ´Â ¹®ÀÚµéÀÌ´Ù. "277$"´Â 277 %X¸¦ ´ë½ÅÇؼ­ »ç¿ëµÇ¾ú´Ù.        
¾Æ·¡¿¡¼­ º¸¿©Áö´Â "andreas"´Â pw->pw_nameÀÇ °ªÀÌ°í
"$1$P3aRAfUA$ATCfz9G/KGUiKn9NZSV6M1"´Â pw->pw_passwd(/etc/passwdó·³ ¾Ïȣȭ)°ªÀÌ´Ù.

% nc jeddy3 21
220 jeddy3 FTP server (Version wu-2.6.0(2) The Aug 3 18:24:27 CEST 2000)
ready.
4.1.1 USER andreas
331 Password required for andreas.
4.1.2 PASS 2138
230 User andreas logged in.
4.1.2.1 SITE EXEC AA@e°¡°¡%227$s
200-aa@2°¡°¡andreas
200   (end of 'aa@e°¡%277$s')
SITE EXEC AApj°¡%227$s
200-aapj°¡$1$P3aRAfUA$ATCfz9G/KGUiKn9NZSV6M1
200   (end of 'aapj°¡%277$s')


5. ÇÁ·Î¼¼¼­ÀÇ ÀÓÀÇÀÇ À§Ä¡¿¡ Á¤¼ö°ª ¾²±â

ÀϹÝÀûÀÎ ¹®ÀÚ¿­·Î º¯È¯ÇÏ´Â º¯È¯ÁöÁ¤ÀÚ ¿Ü¿¡ Ưº°ÇÑ ¸ñÀûÀ¸·Î »ç¿ëÇÏ´Â ÁöÁ¤ÀÚ·Î %nÀÌ ÀÖ´Ù.

BSDÀÇ ¸àÆäÀÌÁö¿¡´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾîÀÖ´Ù.

. %n: The number of characters written so far is into the integer indicated
      by the [corresponding] int * (or variant) pointer agrument.
      (Á¤¼öÆ÷ÀÎÅÍ°¡ Áö½ÃÇÏ°í Àִ°÷¿¡ Ãâ·ÂµÈ ¹®ÀÚÀÇ °¹¼ö¸¦ Á¤¼ö°ªÀ¸·Î ±â·ÏÇÑ´Ù.)

¿¹¸¦µé¸é ´ÙÀ½ÀÇ ÀϺΠÄÚµåÀÇ °á°ú·Î i=5ÀÌ´Ù.

int i;
printf("12345%n", &i);

À§¿¡¼­ º»°Íó·³ printf()°¡ ¸Þ¸ð¸®ÀÇ ¾Æ¹«À§Ä¡¿¡³ª Á¤¼ö°ªÀ» ¾µ ¼ö ÀÖ´Ù. ÁÖ¾îÁø Æ÷¸ä½ºÆ®¸µÀÌ
½ºÅÿ¡ À§Ä¡ÇÏ°í, °ø°ÝÀÚ°¡ ¾ÕÀå¿¡¼­ ¼³¸íÇÑ ±â¼úÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù¸é, ÃæºÐÇÑ %xµÚ¿¡ %nÀ»
»ç¿ëÇÏ¿© ½ºÅÃÀ» µû¶ó¼­ ³»·Á°£ ´ÙÀ½ Æ÷¸ä½ºÆ®¸µÀÌ À§Ä¡ÇÑ °÷¿¡ ´Ù´Ù¸¦¼ö ÀÖ´Ù. Æ÷¸ä½ºÆ®¸µÀº
´ÙÀ½À» ÇÒ ¼ö ÀÖ´Â ¸Þ¸ð¸®·Î ±¸¼ºµÈ ¹ÙÀÌÆ®µé(Æ÷ÀÎÅÍ·Î ¹ø¿ªµÈ)·Î ½ÃÀÛÇÑ´Ù.
°ø°ÝÀÚ°¡ ÇÒ¼ö Àִ°Í
. Áß¿äÇÑ ÇÁ·Î±×·¥ÀÇ Á¢±ÙÁ¦¾î¸¦ ´þ¾î¾²±â
. ³»ºÎ¿¬°á Å×À̺íµé, ÇÔ¼öÆ÷ÀÎÅÍ, setjmp/longjmp¹öÆÛµé, ½ºÅÃÀÇ ¸®ÅÏÁÖ¼ÒµîÀÇ ´þ¾î¾²±â

±×·¯³ª ¾²¿©Áø °ªÀº %nÀÌ ³ªÅ¸³ª±â Àü±îÁöÀÇ Ãâ·ÂµÈ ¹®ÀÚµéÀÇ °¹¼ö¿¡ ÀÇÇÏ¿© °áÁ¤µÈ´Ù.
Á¤¸»·Î ¿ÏÇÏ´Â Á¤¼ö°ªÀ» ±â·ÏÇÒ ¼ö ÀÖÀ»±î? ±×°ÍÀº °¡´ÉÇÏ´Ù, ÇÏÁö¸¸ ´Ù¸¥ µÎ°³ÀÇ Æ®¸¯ÀÌ ÇÊ¿äÇÏ´Ù.

ù¹ø° Æ®¸¯Àº ´õ¹ÌÃâ·Â¹®ÀÚ¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. 1000À» ±â·ÏÇϱâ À§Çؼ­´Â 1000°³ÀÇ ´õ¹Ì¹®ÀÚ¸¦
Ãâ·ÂÇÏ¸é µÈ´Ù. ¹°·Ð ½ºÅÃÀ» µû¶ó ³»·Á°¡¸ç Æ÷¸ä½ºÆ®¸µ¿¡ ´Ù´Ù¸£±âÀ§ÇÑ %xÀÇ »ç¿ë±æÀ̸¦ °í·ÁÇØ¾ß ÇÑ´Ù.
(%.8x°¡ 32-bit±¸Á¶¿¡¼­ ÁÁÀº¼±ÅÃÀÌ´Ù. ÀÌ°ÍÀÇ Ãâ·Â±æÀÌ´Â ½ÇÁ¦ Ãâ·ÂµÇ´Â°Í°ú »ó°ü¾øÀÌ 8ÀÚ¸®ÀÌ´Ù.
¶ÇÇÑ $Ç÷¡±×µµ »ç¿ë °¡´ÉÇÏ´Ù.) 1000°³ÀÇ ´õ¹Ì¹®ÀÚ¸¦ Ãâ·ÂÇÏ´Â ±äÆ÷¸ä½ºÆ®¸µÀÇ »ç¿ëÀ» ÇÇÇϱâ À§ÇÏ¿©,
ÆøÁöÁ¤ÀÚ°¡ »ç¿ëµÉ ¼ö ÀÖ´Ù. ....

ÀÌ¿Í°°Àº À̷п¡ ÀÇÇÏ¿© ¿øÇÏ´Â °ªÀ» ±â·ÏÇÒ ¼ö´Â ÀÖÁö¸¸ Ç¥ÁØ C¶óÀ̺귯¸®ÀÇ ±¸Çö¿¡ µû¶ó
ÀÓÀÇÀÇ ±ä Æø ÁöÁ¤ÀÚ¸¦ »ç¿ëÇÒ ¼ö ¾ø´Â Ưº°ÇÑ Á¦ÇÑÀÌ °É¸®´Â °æ¿ì°¡ À־ µÎ¹ø° Æ®¸¯ÀÌ ÇÊ¿äÇÏ´Ù.

µÎ¹ø° Æ®¸¯Àº %nÀ» ÇѹøÀÌ»ó »ç¿ëÇÏ´Â °ÍÀÌ´Ù. %nÀ» ÇѹøÀÌ»ó »ç¿ëÇϸé, ÇϳªÀÇ ÁÖ¼Ò¿¡ ´ëÇÏ¿© À̵¿ÀÌ
µÇ¸é¼­ ¸î¹øÀÇ ¾²±â°¡ ÁøÇàµÈ´Ù. ¿¹¸¦µé¸é ¸®Æ²¿£µð¾È 32ºñÆ®(IA32°°Àº) ±¸Á¶¿¡¼­ "misaligned"±â·ÏÀÌ
Çã¶ôµÇ´Âµ¥, ÀÌ°ÍÀº ÇϳªÀÇ Æ÷ÀÎÅÍ¿¡¼­ 1¾¿ Áõ°¡ÇÏ¿©  4¹øÀÇ ¼º°øÀûÀÎ Á¤¼öÀÇ ±â·ÏÀÌ °¡´ÉÇÏ´Ù.
ÀÌ¿Í°°Àº ¹æ¹ýÀº Ç×»ó 3¹ÙÀÌÆ®ÀÇ ÀڷḦ ´þ¾î¾²¹Ç·Î ³²¾ÆÀÖ´Â ÇϳªÀÇ ¹ÙÀÌÆ®´Â ´ÙÀ½ ¾²±â¿¡¼­ º¯°æµÇÁö¾Ê°í
³²¾ÆÀÖ°Ô µÈ´Ù. ¼­·Î´Ù¸¥ %n»çÀÌ¿¡ ù¹ø°Ʈ¸¯ÀÌ »ç¿ëµÇ°í ´ÙÀ½ ±â·Ï¿¡¼­ ¹ÙÀÌÆ®ÀÇ °ªÀ» Á¶Á¤ÇÔÀ¸·Î¼­
LSB°¡ º¯°æµÇÁö ¾Êµµ·Ï ÇÑ´Ù. ÀÌ°°Àº ¹æ¹ýÀº ÇϳªÀÇ ¹ÙÀÌÆ® ±â·Ï½Ã¿¡ 255°³ÀÇ ´õ¹Ì¹®ÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.





ºò¿£µð¾È ±¸Á¶¿¡¼­ÀÇ À§ÀÇ ³»¿ëÀÌ µÚÁýÇô¼­ ³ªÅ¸³­´Ù. °¢°¢ÀÇ ¼º°øÀûÀÎ ±â·ÏÀº 1¾¿ °¨¼ÒÇϸ鼭 ±â·ÏµÈ´Ù.
~~~¾Æ ±ÍÂù¾Æ~~~~~~

¿¹: wu-ftpd 2.6.0

¸¶Áö¸·À¸·Î "SITE EXEC"´Â ½ºÅÃÀÇ ¸®ÅÏÁÖ¼Ò¸¦ ´þ¾î¾²±â À§Çؼ­ »ç¿ëµÈ´Ù. ½ÇÁúÀûÀÎ Æ÷¸ä½ºÆ®¸µÀº ÷ºÎ¿¡
ÁÖ¾îÁø ÄÚµå·Î »ý¼ºµÇ¾ú´Ù. (Àμö´Â -n 1098 -m 0xbfffe4c8 -k 0xbfffd55a -d ÀÌÁö¸¸ ½Ã½ºÅÛ¸¶´Ù
´Ù¸¦¼ö ÀÖ´Ù.) %hnÁöÁ¤ÀÚ(hÇ÷¡±×´Â int´ë½Å¿¡ short int¸¦ ÀǹÌÇÑ´Ù.)´ÙÀ½¿¡´Â x86ÀÇ ¸®´ª½º ½© Äڵ尡
µû¶ó¿Â´Ù. ftpÁ¦¾î¹®ÀÚȸÇÇ°¡ ÇÊ¿äÇÏ´Ù.(0xff¸¦ µÎ¹ø»ç¿ëÇϸé 0xffÇϳªÀÇ Àǹ̰¡ µÈ´Ù.) ´ÙÀ½ÀÇ ¿¹¸¦ º¸¸é
°ø°ÝÀÚ´Â ½©À» ¾ò¾ú°í, "uname -a"¿Í "id"¸í·É¾î¸¦ »ç¿ëÇÏ¿© root°¡ µÇ¾úÀ½À» È®ÀÎÇÏ°í ÀÖ´Ù.

% nc jeddy3 21
220 jeddy3 FTP server (Version wu-2.6.0(2) Thu Aug 3 18:24:27 CEST 2000)
ready.
5.1.1 USER andreas
331 Password required for andreas.
5.1.2 PASS 2138
230 User andreas logged in.
SITE EXEC AA.............format string ............Áß°£¿¡ %hnÀÌ ³×°³ÀÖ´Ù.....................
200-aa...........................^^.............................................
200 (end of 'aa ........................................)

uname -a

Linux jeddy3 2.2.14-5.0 #1 Tue Mar .....

id

uid=0(root) gid=0(root)


¹öÆÛ¿À¹öÇ÷οì ó·³, ¼º°øÀûÀÎ °ø°ÝÀ» À§Çؼ­ °ø°ÝÀÚ´Â ¸î°³ÀÇ ÇÁ·Î¼¼½º³»ºÎ ÁÖ¼Ò¿¡ ´ëÇؼ­ ¾Ë°í Àְųª
ÃßÃøÇØ¾ß ÇÑ´Ù.

. ´þ¾î¾²±â ¿øÇÏ´Â ÁÖ¼ÒÀÇ À§Ä¡(¿¹: ¸®ÅÏÁÖ¼Ò)
. ¾²°íÀÚ ÇÏ´Â °ª(¿¹: °ø°ÝÀÚÀÇ ½©ÄÚµå ÁÖ¼Ò)
. Æ÷¸ä½ºÆ®¸µ±îÁö ³»·Á°¡±âÀ§ÇØ ÇÊ¿äÇÑ ¹ÙÀÌÆ®(ÀÌ Á¤º¸´Â ¹öÆÛ¿À¹öÇ÷ο쿡¼­´Â ÇÊ¿ä¾ø´Â °ÍÀÌ¿´´Ù.)

¸¸¾à Ãâ·ÂÀÌ °ø°ÝÀÚ¿¡°Ô º¸³»Áö¸é, °ø°ÝÀÚ´Â ½ºÅÃÀ» ÀÐÀ»¼ö ÀÖ´Ù. ÀÌ°ÍÀº °ø°ÝÀÚ°¡ À§ÀÇ °ªÀ» ÃßÃøÇϱâ
½±°ÔÇÑ´Ù. ¿ø·¡ ¾Ë·ÁÁø wu-ftpd¸¦ À§ÇÑ expolitÄÚµå´Â ÀÌ°ÍÀ» ã´Â°ÍÀ» ÀÚµ¿È­ Çß´Ù.
ÁøÁ¤ÇÑ ½ºÅ©¸³Æ®±âƼ expolitÀÌ´Ù.

[Ãâó] Æ÷¸Ë ½ºÆ®¸µ ¹ö±× ºÐ¼® -Andreas|ÀÛ¼ºÀÚ ¹Ì½ºÆ¼

  Hit : 11393     Date : 2008/12/24 07:50



    
1501   Äı¸Á¶ ÆľÇÇϱâ À§ÇÑ °­Á     asd2862
11/19 8855
1500   ÇØÄ¿°¡ µÇ±âÀ§ÇØ ¾Ë¾Æ¾ßÇÒ 30°¡Áö Ãâó :ÇØÄ¿´ëÇÐ[5]     asdzxc301
12/12 12759
1499   À©µµ¿ì µµ½º ¸í·É¾î(?)[1]     asdzxc301
12/13 9558
1498   ºô°ÔÀÌÃ÷¿¡ ´ëÇؼ­[2]     asdzxc301
12/13 9403
1497   ¾î¼Àºí¸®¾î ÃÑÁ¤¸® °­Á     asdzxc301
12/13 20005
1496   ¾î¼Àºí¸®¾î °­Á 1Æí[1]     asdzxc301
12/13 13408
1495   ¾î¼Àºí¸®¾î °­Á 2Æí     asdzxc301
12/13 8555
1494   ¾î¼Àºí¸®¾î °­Á 3Æí     asdzxc301
12/13 9653
1493   ¾î¼Àºí¸®¾î °­Á 4Æí     asdzxc301
12/13 11210
1492   ¾î¼Àºí¸®¾î °­Á 5Æí     asdzxc301
12/13 20907
1491   ¾î¼Àºí¸®¾î °­Á 6Æí     asdzxc301
12/13 8638
1490   ¾î¼Àºí¸®¾î °­Á 7Æí ¸¶Áö¸·¿ä ¤¾¤¾[2]     asdzxc301
12/13 10659
1489   ÃÊÂ¥¸¦ À§ÇÑ ÆÄÀ̽ã[2]     asdzxc301
12/18 16531
1488   ÆÞ°ú ÆÄÀ̽ã ÇÁ·Î±×·¡¹Ö ¼­Àû     asdzxc301
12/18 9160
1487   ÆÞ1[1]     asdzxc301
12/18 11247
  Æ÷¸Ë ½ºÆ®¸µ ¹ö±× ºÐ¼®     asdzxc301
12/24 11392
1485   [1Àå]¹ÙÀÌ·¯½ºÀÇ Á¤ÀÇ & À§Ç輺[5]     ÀÛÀºÇØÄ¿
12/02 7300
1484   FTP ¼³Á¤ ¿À·ù¸¦ ÀÌ¿ëÇÑ ¹ö±× °ø°Ý(¸ÔÈ÷´Â °÷µµ ÀÖÀ» °ÍÀÌ°í...¾Æ´Ò¼öµµ..)¤»[4]     ÀÛÀºÇØÄ¿
11/30 7628
1483   [2Àå]¹ÙÀÌ·¯½ºÀÇ Á¾·ù¿Í Ư¡[5]     ÀÛÀºÇØÄ¿
12/10 8434
1482   bof & fsb ¿¡ À¯¿ëÇÑ ÆÞ ½ºÅ©¸³Æ®[5]     awsedr45
03/11 11664
[1][2][3][4] 5 [6][7][8][9][10]..[80]

Copyright 1999-2024 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org