本文章來給大家介紹PHPCMS 2008 最新漏洞圖文測試詳解,有需要了解的同學可進入參考參考。
Phpcms2008 是一款基於 PHP+Mysql 架構的網站內容管理系統,也是一個開源的 PHP 開發平台。Phpcms 采用模塊化方式開發,功能易用便於擴展,可面向大中型站點提供重量級網站建設解決方案。3年來,憑借 Phpcms 團隊長期積累的豐富的Web開發及數據庫經驗和勇於創新追求完美的設計理念,使得 Phpcms 得到了近10萬網站的認可,並且越來越多地被應用到大中型商業網站。
0x02 寫在前面的話$dbclass = 'db_'.DB_DATABASE;
require $dbclass.'.class.php';
$db = new $dbclass;
$db->connect(DB_HOST, DB_USER, DB_PW, DB_NAME, DB_PCONNECT, DB_CHARSET);
require 'session_'.SESSION_STORAGE.'.class.php';
$session = new session();
session_set_cookie_params(0, COOKIE_PATH, COOKIE_DOMAIN);
if($_REQUEST)
{
if(MAGIC_QUOTES_GPC)
{
$_REQUEST = new_stripslashes($_REQUEST);
if($_COOKIE) $_COOKIE = new_stripslashes($_COOKIE);
extract($db->escape($_REQUEST), EXTR_SKIP);
}
else
{
$_POST = $db->escape($_POST);
$_GET = $db->escape($_GET);
$_COOKIE = $db->escape($_COOKIE);
@extract($_POST,EXTR_SKIP);
@extract($_GET,EXTR_SKIP);
@extract($_COOKIE,EXTR_SKIP);
}
if(!defined('IN_ADMIN')) $_REQUEST = filter_xss($_REQUEST, ALLOWED_HTMLTAGS);
if($_COOKIE) $db->escape($_COOKIE);
}
//echo QUERY_STRING;
if(QUERY_STRING && strpos(QUERY_STRING, '=') === false && preg_match("/^(.*).(htm|html|shtm|shtml)$/", QUERY_STRING, $urlvar))
{
//var_dump($urlvar[1]);
//echo 'test';
parse_str(str_replace(array('/', '-', ' '), array('&', '=', ''), $urlvar[1]));
}
這裡的話首先實例化了這個數據庫,產生了一個$db資源句柄,他是用來操作數據庫的if(QUERY_STRING && strpos(QUERY_STRING, '=') === false && preg_match("/^(.*).(htm|html|shtm|shtml)$/", QUERY_STRING, $urlvar))
{
//var_dump($urlvar[1]);
//echo 'test';
parse_str(str_replace(array('/', '-', ' '), array('&', '=', ''), $urlvar[1]));
}
看看這裡?define('HTTP_REFERER', isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '');
define('SCRIPT_NAME', isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : preg_replace("/(.*).php(.*)/i", "\1.php", $_SERVER['PHP_SELF']));
define('QUERY_STRING', safe_replace($_SERVER['QUERY_STRING']));
這裡有個過濾,但是不影響
0x04 SQL注入!!!$db->query("UPDATE ".DB_PRE."ads SET `clicks`=clicks+1 WHERE adsid=".$ads['adsid']);
$info['username'] = $_username;
$info['clicktime'] = time();
$info['ip'] = IP;
$info['adsid'] = $id;
$info['referer'] = HTTP_REFERER;
$year = date('ym',TIME);
$table = DB_PRE.'ads_'.$year;
$table_status = $db->table_status($table);
//echo 'test';
if(!$table_status) {
include MOD_ROOT.'include/create.table.php';
}
$db->insert($table, $info);
注意這裡的HTTP_REFERER這個常量function insert($tablename, $array)
{
$this->check_fields($tablename, $array);
return $this->query("INSERT INTO `$tablename`(`".implode('`,`', array_keys($array))."`) VALUES('".implode("','", $array)."')");
//echo "INSERT INTO `$tablename`(`".implode('`,`', array_keys($array))."`) VALUES('".implode("','", $array)."')";
}
所以你懂的