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 將這個語句的前面#注釋符去掉
第二個位置:
<Directory "D:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin">
AllowOverride None
Options None -----將這個位置替換為: Options Indexes ExecCGI
Order allow,deny
Allow from all
</Directory>
這兩個位置配置好之后。就可以用C/C++編程了!
第一步:我們編寫一個這樣的文件
1 #include<stdio.h> 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 <html> 2 <head> 3 <title>后台</title> 4 </head> 5 6 <body> 7 <h1> 后台界面</h1> 8 <form action="http://localhost/cgi-bin/gxjun.cgi" method="post" id=CGI > 9 10 請輸入命令cmd: <input type="text" name="textlist" /><br><br> 11 <input type="submit" /><br> 12 </form> 13 <hr> 14 <body> 15 </html>
這個界面的運行的效果,如下圖:
當然,這個當我們在做web的時候,這個是可以內嵌到,我們的項目中的!在於你將這個jsp放到哪個地兒啦!
最后就是重點了! 就像我上面寫的cgi一樣! 寫一個下面這樣的代碼:
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<stdlib.h> 4 //#include<stdexcept> 5 #include<windows.h> 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("<br><br>\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<br><br>", 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 return 0; 59 }
編譯之后,形成hello.exe改成將.exe屬性改為hello.cgi文件,放置到cgi-bin目錄中,當然,如果有服務器,之間放到服務器中就可以看! 就像這樣
3.打開瀏覽器,輸入類似這樣的如下圖:
輸入一個 tasklist之后,得到這樣一個頁面顯示:
輸入: ipconfig 之后得到的畫面:
好了! 關於,網站后台的知識,大概就這么多了! 寫的比較操蛋! 當然,還可以無限的加精! 這個,得看,你能花多少時間在這個上面了! 做的精華了,你就是一個Hacker!
當然,其實這個技術,不僅僅僅限於web這方面,可以適應任何軟件,我們可以生成一個lib/dll文件,然后#progma(lib,"**.lib");這樣的宏命令,嵌入到我們的軟件中,利用這個存在的軟件,作為幌子,可以暗暗的操控被人的系統的! 當然也可以再寫一個dll文件,來執行相應的操作的!這樣的話,就需要加入很多的隨機元素,比如文件生成不能再是Gxjun,txt,而應該是隨機的生成,路徑隨意的生成,,當然這些都是很容易實現的,這樣很容易躲過360的鈎子這個流氓軟件! 然后對別人 的軟件偷偷的竊取信息什么的!! 當然,有360把關最底層,你所做的行為不可能逃過它的的監控,唯一的方法就是花錢,讓360放行,等等! 當然,我們還是可以通過下載者自己放行就可以了(雖然會被攔截)!
----------------以上都是依據本屌實際操作可行,以及學習得到的經歷,分享出來,供大家參考,如果有誤,歡迎,嚴厲帶着苛刻的指正!謝謝!------------------