声明:本次实践是在合法授权情况下进行,数据已经全部加密,主要是提供思路交流学习,请勿用于任何非法活动,否则后果自负。
本地代码走查
本次白盒代码测试的cms是DuomiCms,这次使用Seay工具进行代码审查,下载DuomiCms源码,然后工具加载。
先全局搜索危险函数,依次排查;
extract();//把数组编程变量
parser_str();//把字符串变成变量
$$; //可变变量,将变量的值读出来然后再赋值为变量
在函数定位后,在文件中依次寻找有通用性的文件后缀内容,如下所示;
//此类后缀的文件一般是函数库
common.func
.func.
.class.
.inc.
发现符合条件的文件为/duomiphp/common.php.
<?php
error_reporting(0);
if(is_file($_SERVER['DOCUMENT_ROOT'].'/duomiphp/webscan.php')){
require_once($_SERVER['DOCUMENT_ROOT'].'/duomiphp/webscan.php');
}
define('duomi_INC', preg_replace("|[/\]{1,}|",'/',dirname(__FILE__) ) );
define('duomi_ROOT', preg_replace("|[/\]{1,}|",'/',substr(duomi_INC,0,-8) ) );
define('duomi_DATA', duomi_ROOT.'/data');
if(PHP_VERSION < '4.1.0') {
$_GET = &$HTTP_GET_VARS;
$_POST = &$HTTP_POST_VARS;
$_COOKIE = &$HTTP_COOKIE_VARS;
$_SERVER = &$HTTP_SERVER_VARS;
$_ENV = &$HTTP_ENV_VARS;
$_FILES = &$HTTP_POST_FILES;
}
$starttime = microtime();
require_once(duomi_INC.'/common.func.php');
//检查和注册外部提交的变量
foreach($_REQUEST as $_k=>$_v)
{
if( strlen($_k)>0 && m_eregi('^(cfg_|GLOBALS)',$_k) && !isset($_COOKIE[$_k]) )
{
exit('Request var not allow!');
}
}
function _RunMagicQuotes(&$svar)
{
if(!get_magic_quotes_gpc())
{
if( is_array($svar) )
{
foreach($svar as $_k => $_v) $svar[$_k] = _RunMagicQuotes($_v);
}
else
{
$svar = addslashes($svar);
}
}
return $svar;