蛋疼的我又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没有定义?

这个拿数组测试只是举个例子。别的变量假如你能控制,让他进入这种几乎无穷的递归也是可以爆的~

[原文地址]

相关内容:

一个PHP爆路径方法,PHP数组溢出暴网站绝对路径

分享一个爆PHP路径的方法,PHP暴露网站绝对路径的方法

各种吐槽:

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主要针对的是程序员,关闭了爆路径有点难