background image

5.1 变量本身的 key

    说到变量的提交很多人只是看到了 GET/POST/COOKIE 等提交的变量的值,但是忘记了有的

程序把变量本身的 key 也当变量提取给函数处理。

--code-------------------------------------------------------------------------
<?php

//key.php?aaaa'aaa=1&bb'b=2 
//print_R($_GET); 

foreach ($_GET AS $key => $value)
{
  print $key."\n";

}
?>

-------------------------------------------------------------------------------

    上面的代码就提取了变量本身的 key 显示出来,单纯对于上面的代码,如果我们提交 URL:

--code-------------------------------------------------------------------------

key.php?<script>alert(1);</script>=1&bbb=2
-------------------------------------------------------------------------------

    那么就导致一个 xss 的漏洞,扩展一下如果这个 key 提交给 include()等函数或者 sql 查询

 

呢?:)

+++++++++++++++++++++++++

漏洞审计策略
-------------------------
PHP 版本要求:无

系统要求:无

审计策略:通读代码
+++++++++++++++++++++++++

5.2 变量覆盖(variable-overwrite)

    很多的漏洞查找者都知道 extract()这个函数在指定参数为 EXTR_OVERWRITE 或者没有指

定函数可以导致变量覆盖,但是还有很多其他情况导致变量覆盖的如:

5.2.1 遍历初始化变量

请看如下代码:

--code-------------------------------------------------------------------------

<?php
//var.php?a=fuck

$a='hi';
foreach($_GET as $key => $value) {
  $$key = $value;

}
print $a;

?>
-------------------------------------------------------------------------------

    很多的 WEB 应用都使用上面的方式(注意循环不一定是 foreach),如 Discuz!4.1 的 WAP 部分

的代码:

--code-------------------------------------------------------------------------

$chs = '';
if($_POST && $charset != 'utf-8') {
  $chs = new Chinese('UTF-8', $charset);