服务报价 | 域名主机 | 网络营销 | 软件工具| [加入收藏]
 热线电话: #
当前位置: 主页 > php教程 > php教程 >

高级PHP应用程序漏洞审核技术(4)

时间:2011-03-10 14:59来源:未知 作者:最模板 点击:
漏洞审计策略 PHP版本要求:php4和php5.2.1 系统要求:无 审计策略:通读代码 2)当magic_quotes_gpc = Off时,在php5.24下测试显示: aaaa 'aaa bb' b 对于magic_quotes_gpc

漏洞审计策略
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版本信息。

 (责任编辑:最模板)

顶一下
(2)
100%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容