PHP程序漏洞审计:魔术引号带来的新的安全问题

在《高级PHP应用程序漏洞审核技术》[1]一文里的"魔术引号带来的新的安全问题"一节里,有

提到通过提取魔术引号产生的“\”字符带来的安全问题,同样这个问题在这里又一次完美体

现,如下面的代码片段:

// foo.php?xigr='ryat

function daddslashes($string, $force = 0) {

!defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());

if(!MAGIC_QUOTES_GPC || $force) {

if(is_array($string)) {

foreach($string as $key => $val) {

$string[$key] = daddslashes($val, $force);

}

} else {

$string = addslashes($string);

}

}

return $string;

}

...

foreach(array('_COOKIE', '_POST', '_GET') as $_request) {

foreach($$_request as $_key => $_value) {

$_key{0} != '_' && $$_key = daddslashes($_value);

}

}

echo $xigr['hi'];

// echo \

上面的代码原本期望得到一个经过daddslashes()安全处理后的数组变量$xigr['hi'],但是没

有对变量$xigr做严格的类型规定,当我们提交一个字符串变量$xigr='ryat,经过上面的处理

变为\'ryat,到最后$xigr['hi']就会输出\,如果这个变量引入到SQL语句,那么就会引起严重

的安全问题了,再来看下面的代码片段:

...

if($xigr) {

foreach($xigr as $k => $v) {

$uids[] = $v['uid'];

}

$query = $db->query("SELECT uid FROM users WHERE uid IN ('".implode("','", $uids)."')");

利用上面提到的思路,通过提交foo.php?xigr[]='&xigr[][uid]=evilcode这样的构造形式可

以很容易的突破GPC或类似的安全处理,形成SQL注射漏洞:D

关键词: php漏洞 , 漏洞审计

上一篇: 最新phpcms v9.4/9.5版本tag的伪静态修改方法
下一篇: mysql in 排序问题:可以按in里面的顺序来排序

目前还没有人评论,您发表点看法?
发表评论

评论内容 (必填):