首页
社区
课程
招聘
[原创]网站后台扫描软件源码,多线程,可过滤网站页面重定向。
发表于: 2014-9-1 20:10 14292

[原创]网站后台扫描软件源码,多线程,可过滤网站页面重定向。

2014-9-1 20:10
14292

由于前段时间,学校网站渗透测试扫描目标站关键目录的时候,发现个严重问题就是我手上的软件扫描目标站的时候全部返回的都是200的页面,当然实际情况是不可能那么多的关键页面,肯定是页面做了重定向,高端的软件向神马WVS一扫网站要挂掉。所以就有了现在这个软件。软件在开发初期我连扫描用的Http接口都不知道,各种查资料,各种问,才知道了InternetOpen 这些http的接口函数,写着有遇到各种问题,发现这个接口有个天然BUG,无法解决,又是各种问才知道,必须进行异常处理,另外多线程的扫描我以前也接触少所有编写难度也非常大只能一点一点慢慢摸索,最让人郁闷的就是在线程函数里面,不能调用MFC的窗口类对象,后来改成消息出来才解决问题的。。。。。。。。。。。。。。。。。。。。。历时近一个月,反复重写,才有了现在模样,

过滤页面重定向扫描方式我主要主要是通过多次获取网页页面大小,然后对获取的大小进行排序,然后选出其中 重复页面大小最多的页面,这个页面就是网站重定向的页面。然后在每次扫描里面对这个页面大小进行判断。

还有些功能没有添加,准备慢慢写,信奉开源的原则现在把源码放出来给那些感兴趣的一起研究研究,如果有什么意见的,可以直接给我提,毕竟小弟第一次写软件没啥子经验,各位前辈高人见谅。

由于是VS写的,里面生成了一些杂七杂八的东西,太大了没法都传上来,只能把源代码放出来。
如果需要整个工程文件的可以Me我。  另外附带加2写字典给大家。

带过滤的扫描代码:
UINT FunctionWx(LPVOID pParam)
{
  CMySynDlg *pDialog=(CMySynDlg *)pParam;  //获得主窗口指针

  HWND hWnd;

  int ErrorNumber=0;
  int AutoNumber=0;
  long AutoLength[20];
  long Maxvalue;   //定位出的重定向页面
  WCHAR Maxvalues[7];

  hWnd=AfxGetApp()->GetMainWnd()->GetSafeHwnd();   //获得主窗口句柄

  

  //---------------------------------设置超时

  CInternetSession httpSession; //创建一个会话链接

  httpSession.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT,5000);
  httpSession.SetOption(INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT,5000);
  httpSession.SetOption(INTERNET_OPTION_SEND_TIMEOUT,5000);  

  //----------------------------------end

  CHttpFile *httpFile=NULL; //用于文件和返回操作
  INTERNET_PORT httpPort=pDialog->Ports;
  CHttpConnection *pHttpConnection=httpSession.GetHttpConnection(pDialog->wangzhi,httpPort,NULL,NULL,NULL);  //获得一个指向httpconnection的指针  
   
  if(pHttpConnection!=NULL)
  {
    
     CString RequestWay("HTTP_VERB_HEAD");
    CString dxs("");
    CString sxs("HTTP/1.1");
    Couts  one;
    char outs[4];
    
    outs[3]='\0';

    if(filex!=FALSE) //判断新打开的字典是否为空
    { 
          
      CString   strHeads=_T("Content-Type:   application/x-www-form-urlencoded");//http协议
      CString   circle("");
      CString   strFormData;
      CString   Views("");
      strFormData.Format( _T("UserName= %s"),circle); 
      

      while(filex.ReadString(dxs))             //读文件字典
      {

        httpFile=pHttpConnection->OpenRequest(2,dxs,NULL,1,NULL,HTTP_VERSION,INTERNET_FLAG_DONT_CACHE); 

        

        CurrentFileNumber++;     //当前读取字典的位置
                                        
        int Gnumber=0;
  errorWx:  if(httpFile!=NULL)
        {
          //
          BOOL bSendRequest;
          try  //捕获发生延时错误
          {
              
            bSendRequest=httpFile->SendRequest(NULL,0,(LPVOID)(LPCTSTR)strFormData,0);
          }
          catch(...)
          {
            
            Gnumber++;
            if(Gnumber<=3)
            {
              
              goto errorWx;
            }  
          }
          if(bSendRequest==TRUE)
          {
             char bufQuery[32];
            WCHAR ErrorsTab[32];
            

            memset(bufQuery,0,32);
            memset(ErrorsTab,0,32);

            DWORD dwLengthBufQuery=sizeof(bufQuery);
            DWORD Errorsh=sizeof(ErrorsTab);
            
            
            if(AutoNumber<20)
            {
              //定位重定位页面的大小
              BOOL bQueryInfo=httpFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH,ErrorsTab,&Errorsh,NULL);
              AutoLength[AutoNumber]=_wtol(ErrorsTab);
              AutoNumber++;
              int k;
              if(AutoNumber==19)
              {
                //-----------------------------------------长度信息整理

                for(int i=0;i<18;i++)  //对收集的网页长度进行排序
                {
                  for(int j=0;j<18;j++)
                  {
                      if(AutoLength[j]>AutoLength[j+1])
                    {
                      k=AutoLength[j];
                      AutoLength[j]=AutoLength[j+1];
                      AutoLength[j+1]=k;
                    }
                  }
                }
                int n=1;
                int max=1;
                
                for(int i=0;i<19;i++)
                {
                  if(AutoLength[i]==AutoLength[i+1])
                  {
                    n++;
                  }
                  else
                  {
                    if(n>=max)
                    {
                      max=n;
                      Maxvalue=AutoLength[i];     //选出重定位页面最大的那个大小
                      n=1;
                    }
                  }
                }
                //-----------------------------------------end
                _ltow(Maxvalue,Maxvalues,10);  //将长整形在转换会WC
                filex.SeekToBegin(); // 长度收集完毕
              }
            }   
            else
            {  
              BOOL bQueryInfo=httpFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH,ErrorsTab,&Errorsh,NULL);
              BOOL bQueryInfoh=httpFile->QueryInfo(HTTP_QUERY_RAW_HEADERS,bufQuery,&dwLengthBufQuery,NULL);
              CString ms(bufQuery);  //网站访问返回结果
            //  CString me(ErrorsTab); //错误页面大小
              Views=pDialog->wangzhi+dxs;
                outs[0]=bufQuery[9];   //可以用WCHAR解决问题
              outs[1]=bufQuery[10];
              outs[2]=bufQuery[11];
              
              
               if(strcmp(outs,"404")!=0)
               {
                if(strcmp(outs,"200")==0)
                {
                  if(StrCmpCW(Maxvalues,ErrorsTab)!=0)
                  {
                    pDialog->dialog->yxd=true;
                    pDialog->dialog->t=&Views;                                                                
                    ::SendMessage(hWnd,tabaddstring,0,0);   //调用消息出来函数
                  }
                  
                }
                else
                {                
                    Views=Views + "     "+ms;
                        pDialog->dialog->yxd=false;
                    pDialog->dialog->t=&Views;
                    ::SendMessage(hWnd,tabaddstring,0,0);   //调用消息出来函数    
                }
               }
                
            }
          
          }
          
         }
        
      }
      

      //----------------------------------------------这里表示扫描结束关闭字典

      AfxEndThread(0); //结束线程
      //filex.Close();   //扫描结束关闭字典文件
    }
  }
  return 0;

}

不带过滤的:
UINT FunctionTnn(LPVOID pParam)
{
  CMySynDlg *pDialog=(CMySynDlg *)pParam;  //获得主窗口指针

  HWND hWnd;

  hWnd=AfxGetApp()->GetMainWnd()->GetSafeHwnd();   //获得主窗口句柄

  

  //---------------------------------设置超时

  CInternetSession httpSession; //创建一个会话链接

  httpSession.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT,5000);
  httpSession.SetOption(INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT,5000);
  httpSession.SetOption(INTERNET_OPTION_SEND_TIMEOUT,5000);

  //----------------------------------end

  CHttpFile *httpFile=NULL; //用于文件和返回操作
  INTERNET_PORT httpPort=pDialog->Ports;
  CHttpConnection *pHttpConnection=httpSession.GetHttpConnection(pDialog->wangzhi,httpPort,NULL,NULL,NULL);  //获得一个指向httpconnection的指针  
   
  if(pHttpConnection!=NULL)
  {
    
     CString RequestWay("HTTP_VERB_HEAD");
    CString dxs("");
    CString sxs("HTTP/1.1");
    Couts  one;
    char outs[4];
    outs[3]='\0';

    if(filex!=FALSE) //判断新打开的字典是否为空
    { 
          
      CString   strHeads=_T("Content-Type:   application/x-www-form-urlencoded");//http协议
      CString   circle("");
      CString   strFormData;
      CString   Views("");
      strFormData.Format( _T("UserName= %s"),circle); 
      

      EnterCriticalSection(&Wayone_cx);  //进入临界区对象。

      while(filex.ReadString(dxs))             //读文件字典
      {

        httpFile=pHttpConnection->OpenRequest(2,dxs,NULL,1,NULL,HTTP_VERSION,INTERNET_FLAG_DONT_CACHE); 

        LeaveCriticalSection(&Wayone_cx);  //释放临界区对象。

        CurrentFileNumber++;     //当前读取字典的位置
                                        
        int Gnumber=0;
  errornn:    if(httpFile!=NULL)
        {
          //
          BOOL bSendRequest;
          try
          {
          bSendRequest=httpFile->SendRequest(NULL,0,(LPVOID)(LPCTSTR)strFormData,0);
          }
          catch(...)
          {
            Gnumber++;
            if(Gnumber<=3)
            {
              
              goto errornn;
            }
          }
          if(bSendRequest==TRUE)
          {
             char bufQuery[32];
            memset(bufQuery,0,32);
            DWORD dwLengthBufQuery=sizeof(bufQuery);
            
            BOOL bQueryInfo=httpFile->QueryInfo(HTTP_QUERY_RAW_HEADERS,bufQuery,&dwLengthBufQuery,NULL);
            {    
              CString ms(bufQuery);  //网站访问返回结果
              
              Views=pDialog->wangzhi+dxs;
                outs[0]=bufQuery[9];
              outs[1]=bufQuery[10];
              outs[2]=bufQuery[11];
                 
               if(strcmp(outs,"404")!=0)
               {
                if(strcmp(outs,"200")==0)
                {

                  pDialog->dialog->yxd=true;
                  pDialog->dialog->t=&Views;                                                                
                    ::SendMessage(hWnd,tabaddstring,0,0);   //调用消息出来函数
                }
                else
                {
                  Views=Views + "     "+ms;
                    pDialog->dialog->yxd=false;
                  pDialog->dialog->t=&Views;
                  ::SendMessage(hWnd,tabaddstring,0,0);   //调用消息出来函数                
                }
               }
                
            }
          
          }
          
         }
        
      }
      

      //----------------------------------------------这里表示扫描结束关闭字典

      AfxEndThread(0); //结束线程
      //filex.Close();   //扫描结束关闭字典文件
    }
  }
  return 0;
}


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 4
支持
分享
最新回复 (25)
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不错呀。
2014-9-1 20:17
0
雪    币: 292
活跃值: (153)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
四川人么。。
2014-9-1 21:43
0
雪    币: 265
活跃值: (86)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
支持共享
2014-9-1 22:09
0
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
很好的东西 想我当时也在写这样的软件 也是各种找资料啊 慢慢就进步了 鼓励
2014-9-1 22:35
0
雪    币: 83
活跃值: (158)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
是四川的
2014-9-1 23:39
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
支持原创作品,虽然不怎么用。
2014-9-2 07:53
0
雪    币: 144
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
回复是因为有一天会用到
2014-9-2 10:15
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
轮子。。。。。。。。。。。。。。。
2014-9-2 10:19
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
支持一个,虽然,对c是个小白
2014-9-2 12:21
0
雪    币: 492
活跃值: (53)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
11
收藏了,多谢开源
2014-9-5 09:14
0
雪    币: 83
活跃值: (158)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
界面美化啊,还有一些功能我还没有做,有兴趣的可以自己弄,或者等我弄好发出来也OK。
2014-9-5 11:30
0
雪    币: 203
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
不错!。。。
2014-10-15 21:53
0
雪    币: 229
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
感谢分享,下载试一下
2014-10-16 10:50
0
雪    币: 153
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
AfxGetApp()->GetMainWnd() == AfxGetMainWnd()
2014-10-16 11:09
0
雪    币: 83
活跃值: (158)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
16
----
2014-10-28 15:14
0
雪    币: 83
活跃值: (158)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
17
最近乘空余时间吧C段旁站和子域名的扫描也做好了,,放出来。
2015-4-16 15:46
0
雪    币: 83
活跃值: (158)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
18
http://pan.baidu.com/s/1ntEBARZ 这个是下载链接。
2015-4-16 15:51
0
雪    币: 40
活跃值: (707)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
目录有什么用
2015-6-11 16:10
0
雪    币: 83
活跃值: (158)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
20
寻找 敏感页面 进行利用啊。
2015-6-12 16:00
0
雪    币: 83
活跃值: (158)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
21
有朋友提到了完整工程, 本人写的不好,本来不好意思发上来的,不过有朋友需要,也厚着脸皮发上来,希望对需要的朋友有帮助,当然如果大家能完善或者修改的更加实用的话,麻烦也给我发一份。下面贴上完整工程地址。
2015-6-12 16:05
0
雪    币: 83
活跃值: (158)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
22
链接: http://pan.baidu.com/s/1eQzZwtG 密码: n2p8
2015-6-12 16:37
0
雪    币: 114
活跃值: (601)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
支持一下,不错
2015-6-12 17:32
0
雪    币: 229
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
感谢分享了啊
2015-6-12 18:05
0
雪    币: 191
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
好东西啊,支持
2015-7-17 15:39
0
游客
登录 | 注册 方可回帖
返回
//