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);