欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

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

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

由于前段时间,学校网站渗透测试扫描目标站关键目录的时候,发现个严重问题就是我手上的软件扫描目标站的时候全部返回的都是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;
}

上传的附件 MySyn代码.rar
MySyn程序.rar
最齐全的目录字典.rar
QQ截图20140901165323.jpg

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功