Hydra爆破[无验证码]Web页面
Hydra是密码爆破神器,读者可以阅读这篇文章<Hydra – Brute Force Techniques>,了解Hydra支持的协议。其中,爆破Http登陆密码比爆破其他协议的密码更为复杂,本文将介绍如何爆破HTTP登陆页面的密码。HTTP有两种方式发送密码:Get Method和Post Method,后者比前者复杂,因此需要区别对待。0.区分Get/Post类型的登陆页面...
Hydra是密码爆破神器,读者可以阅读这篇文章<Hydra – Brute Force Techniques>,了解Hydra支持的协议。其中,爆破Http登陆密码比爆破其他协议的密码更为复杂,本文将介绍如何爆破HTTP登陆页面的密码。HTTP有两种方式发送密码:Get Method和Post Method,后者比前者复杂,因此需要区别对待。
0.区分Get/Post类型的登陆页面
0.1.使用Wireshark:
分析HTTP协议怎会少了Wireshark?区分Web是以Get Method还是以Post Method发送密码对Wireshark而言简直是小菜一碟:选择网卡后,在"Display fitler"中输入http,然后刷新登入页面,回到Wireshark,分组列表的"Info"列会显示该登入页面使用何种Method发送密码。如下图,是我登入TP-Link路由器(TL-WR841N)管理页面时,Wireshark捕获的结果,TP-Link以Http Get Method方式发送密码:
0.2.使用Firefox-firebug插件:
用Firefox打开登入页面,按F12或者在页面上右键-"查看元素",激活Firebug,如下图:
点击Firebug-"网络",然后登入页面。网络标签页会列出登入页面发出的请求,以及消息头。消息头中将列出请求类型:
因为访问Web页面少不了浏览器,所以本文就使用Firebug演示。有了上面的铺垫,我们由简单到复杂,爆破登陆页面。
1.爆破Get Method类型的登陆页面
先从Get Method入手,靶机还是TP-Link的登陆页面。用hydra爆破Get Method类型的登陆页面,需要关注2个信息:服务器IP和登陆页面(Login Page)。在Firebug-网络标签页中选择一个请求-进入右侧的消息头(Headers),点击"编辑和重发"按钮,Firebug会列出在新请求(New Request)框中IP和登陆页面的信息:
上图中服务器IP是192.168.2.1;请求的登陆页面是 "/"。现在可以基于这些信息开始构建hydra的命令(假设你已经有爆破字典,没有的话可以参考这篇文章生成字典):
hydra -l Eugene -P wordlist.txt -t 4 -vV -f 192.168.2.1 http-get /
#-l Eugene是登入账户名 简单起见没有使用用户名字典
#-P 指定密码字典
#-f 爆破成功后hydra就停下
#对于参数http-get 需要提供前面firebug给出的IP:"192.168.2.1"和登陆页面:"/"
人品足够好,hydra不久会给出密码(password:123321as):
2.爆破Post Method类型的登陆页面
爆破Post Method类型的登陆页面相对麻烦,需要关注4个信息:服务器IP,登录页面,消息主体(Request Body)和错误消息(payload)。所幸,这些信息在Firebug中也有提供。
消息主体(其实是POST消息提交的表单参数)位于:Firebug-网络-消息头-编辑和重发-新请求,如下图:
错误消息位于:Firebug-网络-响应-响应载荷(payload),(PS:错误消息作为hydra区分登录是否成功的重要参考信息。并不需要提取全部错误消息,只需要找到代表性的登录错误提示即可),如下图:
先看一个简单的页面(老婆做的页面...),输入错误的密码后会在页面上打印一段错误消息,比如我输入name:admin,key:1234,看下Firebug的输出:
<html>
<header>
<meta charset="utf-8"/>
</header>
<body>
<form action="post1.php" method="post">
name:
<input name='uName' type='text' />
key:
<input name='uKey' type='password' />
<input type="submit" value="Submit" />
</form>
<?php
$uName = $_POST["uName"];
$uKey = $_POST["uKey"];
if ($uKey !== "999") {
// header("Location: index.php");
// exit;
echo "Error";
};
?>
</body>
</html>
Firebug显示服务器IP:192.168.0.151;登陆页面是/post.php;请求主体,也就是POST提交的表单参数:uName=admin&uKey=1234;服务返回的错误消息中包含"Error"字符串。因此,我们可以这样构建hydra命令行:
hydra -l admin -P wordlist.txt -f -t 4 -vV 192.168.0.151 http-post-form "/post.php:uName=^USER^&uKey=^PASS^:Error"
运行命令,同样,人品够好的话hydra会马上返回结果:
再修改一下登陆页面,当输入错误的密码时,弹出错误对话框:
<html>
<header>
<meta charset="utf-8"/>
</header>
<body>
<form action="post2.php" method="post">
name:
<input name='uName' type='text' />
key:
<input name='uKey' type='password' />
<input type="submit" value="Submit" />
</form>
<?php
$uName = $_POST["uName"];
$uKey = $_POST["uKey"];
if ($uKey !== "999") {
echo "<script>alert('ERROR')</script>";
};
?>
</body>
</html>
修改后的消息头和响应载荷(payload)分别为:
错误消息中包含"alert"字符串,将它作为关键字,构建如下hydra的命令:
hydra -l admin -P wordlist.txt -f -t 8 -vV 192.168.0.151 http-post-form "/post2.php:uName=^USER^&uKey=^PASS^:alert"
最终获得账号密码
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)