蛋疼的我又YY了一下一种爆路径
寂寞的瘦子 (LISP异教徒) | 2014-05-30 20:20
本次采用耗尽内存的方法,溢出爆路径。。
有些代码为了处理某些数据会这样处理,应该有看到过吧,就是递归,但是php不是很常见(递归在lisp那是家常便饭啊~~)
<?php $a=$_GET["id"]; #$a=array(array(1)); function now($a){ if(is_array($a)){ foreach($a as $key => $val){ $a[$key]=now($val); } }else{ $a=addslashes($a); } return $a; } print_r(now($a)); ?>
上面这个代码为了处理提交过来的数据,做了个递归来保证对每个数组成员做过滤,我承认递归绝对是件效率非常不高,而且及其耗内存的算法。但是相比迭代在表达上更加清晰。
假如我提交过来id是数组然后是个无穷数组那么结果可想而知
代码就像这样YY
果断的就爆了
我这里的$a是$_GET["id"]的值,可以控制,那么我提交
xxx.com/xxx.php?id[][][][][]....=1这里省略了无数的[]就可以把溢出了爆路径了。
好了YY结束了。
当提交过多[]的时候id变成了没有定义。就是说这个接受长度是有限的,哪位小伙伴看到过这种把[]当数组解析的手册说明(我知道id[]这样传会把id当数组解析的,但是不知道原理)?我想知道为何[]超出了一定长度就会出现没有id没有定义?
这个拿数组测试只是举个例子。别的变量假如你能控制,让他进入这种几乎无穷的递归也是可以爆的~
相关内容:
各种吐槽:
1#
Mody | 2014-05-30 20:59
goingdown
2#
Sunshie (http://phpinfo.me) | 2014-05-30 21:13
dispaly_errors=off肿么办
3#
Dennx (xxxxxxxx) | 2014-05-30 21:43
K:\
是我见识短浅了么。。。
4#
寂寞的瘦子 (LISP异教徒) | 2014-05-31 00:47
@Dennx 我两块硬盘,分了很多盘的,感谢wooyun的固态硬盘啊,让我如今开软件各种爽~~
5#
寂寞的瘦子 (LISP异教徒) | 2014-05-31 10:24
@Sunshie php的traceback能力确实很强啊,bug位置准确定位。display主要针对的是程序员,关闭了爆路径有点难