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 : 12310 Date : 2008/12/24 07:50
|