漏洞审计策略 |
PHP版本要求:php4和php<5.2.1
系统要求:无
审计策略:通读代码 |
2)当magic_quotes_gpc = Off时,在php5.24下测试显示:
aaaa'aaa bb'b
对于magic_quotes_gpc = Off时所有的变量都是不安全的,考虑到这个,很多程序都通过addslashes等函数来实现魔术引号对变量的过滤,示例代码如下:
<?php //keyvul.php?aaa'aa=1' //magic_quotes_gpc = Off if (!get_magic_quotes_gpc()) { $_GET = addslashes_array($_GET); }
function addslashes_array($value) { return is_array($value) ? array_map('addslashes_array', $value) : addslashes($value); } print_R($_GET); foreach ($_GET AS $key => $value) { print $key; } ?>
以上的代码看上去很完美,但是他这个代码里addslashes($value)只处理了变量的具体的值,但是没有处理变量本身的key,上面的代码显示结果如下:
Array ( [aaa'aa] => 1\' ) aaa'aa
漏洞审计策略 |
PHP版本要求:无
系统要求:无
审计策略:通读代码 |
代码注射
PHP中可能导致代码注射的函数
很多人都知道eval、preg_replace+/e可以执行代码,但是不知道php还有很多的函数可以执行代码如:
assert() |
call_user_func() |
call_user_func_array() |
create_function() |
变量函数 |
... |
这里我们看看最近出现的几个关于create_function()代码执行漏洞的代码:
<?php //how to exp this code $sort_by=$_GET['sort_by']; $sorter='strnatcasecmp'; $databases=array('test','test'); $sort_function = ' return 1 * ' . $sorter . '($a["' . $sort_by . '"], $b["' . $sort_by . '"]); '; usort($databases, create_function('$a, $b', $sort_function));
漏洞审计策略 |
PHP版本要求:无
系统要求:无
审计策略:查找对应函数(assert,call_user_func,call_user_func_array,create_function等) |
变量函数与双引号
对于单引号和双引号的区别,很多程序员深有体会,示例代码:
echo "$a\n"; echo '$a\n';
我们再看如下代码:
//how to exp this code if($globals['bbc_email']){
$text = preg_replace( array("/\[email=(.*?)\](.*?)\[\/email\]/ies", "/\[email\](.*?)\[\/email\]/ies"), array('check_email("$1", "$2")', 'check_email("$1", "$1")'), $text);
另外很多的应用程序都把变量用""存放在缓存文件或者config或者data文件里,这样很容易被人注射变量函数。
漏洞审计策略 |
PHP版本要求:无
系统要求:无
审计策略:通读代码 |
PHP自身函数漏洞及缺陷
PHP函数的溢出漏洞
大家还记得Stefan Esser大牛的Month of PHP Bugs(MOPB见附录2)项目么,其中比较有名的要算是unserialize(),代码如下:
unserialize(stripslashes($HTTP_COOKIE_VARS[$cookiename . '_data']);
在以往的PHP版本里,很多函数都曾经出现过溢出漏洞,所以我们在审计应用程序漏洞的时候不要忘记了测试目标使用的PHP版本信息。
(责任编辑:最模板) |