有很多网站为了安全起见,在WEB Server前面架了防火墙,或者做了TCP/IP过滤,对外只开放TCP 80端口。从入侵者角度来看,要入侵那么从80上跑的CGI入手是比较可行的,当然也可以用别的办法,例如旁敲侧击,呵呵。从网管角度来看,一是要保证CGI的安全性,另外 *** 的整体安全性也是很重要的。针对基于80端口入侵、防范而出的CGI扫描器数不胜数,但基本上原理都一样。
CGI扫描器原理说起来其实非常简单,可以用四句话来概括:连接目标WEB SERVER;发送一个特殊的请求;接收目标服务器返回数据;根据返回数据判断目标服务器是否有此CGI漏洞。
当管理的服务器达到一定数量的时候,手工检测自己的服务器是否存在各种各样的CGI漏洞,那就太消耗时间和精力了,所以一个网管手上有个比较好用的CGI漏洞扫描器还是必要的。OK!今天我们就自己来动手用C写一个简单的CGI扫描器,帮助自己在日常工作中检测服务器:))
源代码如下,很多地方我都加了注释,别嫌我烦哦:))编译好的程序可以从http://eyas.3322.net/program/cgicheck.exe下载。
/************************************************************************* Module:CGICheck.cpp Author:ey4s Date:2001/5/16说明:这是一个Console下多线程,带有进度显示的CGI扫描器的模板,更改一下szSign和SendBuff就可以扫描其他CGI漏洞,设置了连接、发送、接收超时,速度还可以哦。希望可以帮助到admins检测自己的服务器:))
*************************************************************************/ #i nclude
#define iPort 80//目标Web Server端口#define szSign “500 13rnServer: Microsoft-IIS/5.0”//根据此标志来检查目标是否有漏洞
#pragma comment(lib,“ws2_32.lib”)
/////////////////////////////////////////////////////////////////////////// // //定义&初始化全局变量// char *SendBuff=“GET /NULL.printern”,//发送的请求buff CurrentTarget[52]=,//存放最后一个线程将扫描的目标turn[4][2]=;//显示进度时的字符int SendBuffLen=strlen(SendBuff),//发送的buff长度iConnTimeout,//TCP Connect TimeOut ii=0,//扫描进度iTotal;//服务器总数HANDLE hSemaphore=NULL,//信标内核对象句柄,用来控制线程数量hStdout;//console标准输出句柄,做进度显示的时候用的struct timeval timeout;//连接、发送和接收的超时值DWORD SleepTime;//每个一个线程后等待的时间 /////////////////////////////////////////////////////////////////////////// void ShowError(char *);//显示出错信息函数,可以写完善一些,偶偷懒了:)
BOOL ResetCursor(void);//重置光标位置,线程输出的时候调用的DWORD WINAPI ShowProInfo(LPVOID);//显示进度信息DWORD WINAPI scan(LPVOID);//扫描函数void usage(char *);//帮助函数/////////////////////////////////////////////////////////////////////////// int main(int argc,char **argv)
{ HANDLE hThread=NULL;//线程句柄DWORD dwThreadID;//线程ID struct sockaddr_in sa;int i,MaxThread;//更大线程数量WSADATA wsd;long PreviousCount;clock_t start,end;//程序运行的起始和结束时间double duration;
//检查用户输入参数if(argc!=5)
{ usage(argv[0]);return 1;} //get target range int StartNet=inet_addr(argv[1]);int StopNet=inet_addr(argv[2]);int StartHost=ntohl(StartNet);int StopHost=ntohl(StopNet);//取得线程数量MaxThread=atoi(argv[3]);//取得conn超时时间iConnTimeout=atoi(argv[4]);//检查参数合法性if((iConnTimeout>6) || (iConnTimeout500) ||(StopHost { usage(argv[0]);return 1;} //计算时间SleepTime=1000*iConnTimeout/MaxThread;//设置连接超时值timeout.tv_sec = iConnTimeout;timeout.tv_usec =0;__try { //开始计时start=clock();//加载winsock库if (WSAStartup(MAKEWORD(1,1), &wsd) != 0)
{ ShowError(“WSAStartup”);__leave;} //创建信标内核对象句柄hSemaphore=CreateSemaphore(NULL,MaxThread,MaxThread,NULL);if(hSemaphore==NULL)
{ ShowError(“CreateSemaphore”);__leave;} //取得console标准输出句柄hStdout=GetStdHandle(STD_OUTPUT_HANDLE);if(hStdout==INVALID_HANDLE_)
{ ShowError(“GetStdHandle”);__leave;} //设置目标总数iTotal=StopHost-StartHost;//创建进度显示线程hThread=CreateThread(NULL,0,ShowProInfo,NULL,0,&dwThreadID);if(hThread==NULL)
{ ShowError(“1 CreateThread”);__leave;} //关闭句柄CloseHandle(hThread);//循环创建扫描线程for(i=StartHost;i
2 即便用户当时未登录,因为PoisonTap现已在每个缓存域名上强制绑定了这些后门,使进犯者可以运用Cookie并在将来发动同源恳求 }一、 进犯力度 DESKeySpec desKey = DES...
“招骋伴游女骗术-【陈成龙大哥】” 预约兼职模特服务平台商务接待商务伴游给您的温馨提醒留订金能够迅速的刚开始预约吗只有付款了订金,艺人经纪人才可以给您优先选择分配,也可以区别清晰您是确实顾客還是过了嘴...
王者荣耀蔷薇之心什么时候可以换呢?五五开黑节又出获得蔷薇之心的活动了,只要能凑齐150个蔷薇之心,玩家就可以直接兑换永久内测皮肤,不过怎么才能换皮肤?琵琶网小编马上就给大家分享一下兑换攻略。 王...
一、使用工具黑客接单流程 1、接单怎么找一个师傅黑客来到HKEYLOCALMACHINESAMSAM,点击弹出SAM权限编辑窗口中的AM权限。使用工具一般怎么联系我还在其续集中对智域进行了更直接的讨论...
喆怎么读?喆是什么意思?喆的词语出处也是那里?很多人在生活、学习中遇到“喆”这个词,大家都不知道怎么读这个生僻字。你想知道这些有趣的生僻字怎么读吗?豪友网专门精心整理了生僻字怎么读相关的内容,为你释疑...
手机成了现代人们生活中不可或缺的一部分。生活中很多事情都离不开手机。手父母的影响很多孩子也被手机吸引了。孩子玩手机的时间越长。越难以戒掉手机。那么该如何戒掉孩子的手机瘾呢,下面友谊长存小编就来和大家说...