Dedecms存在储存型跨站脚本漏洞

0x00前言

开始从小的漏洞开始练习,搬运项目地址:

https://github.com/imsebao/Code-Audit

0x01

Dedecms是一款开源的PHP开源网站管理系统。 Dedecms会员功能carbuyaction.php中的address、des、email、postname参数存在存储型XSS漏 洞,攻击者可利用漏洞获得管理员cookie。 测试环境:DedeCMS-V5.7-UTF8-SP2 发布日期: 2017-03-15 官方最新版 漏洞利用条件:DedeCMS 开启shop模块

漏洞分析

漏洞触发点在 /plus/carbuyaction.php 文件 address 、 des 、 email 、 postname 参数过滤不严 导致xss漏洞触发。
漏洞文件代码在 carbuyaction.php 第 111 行

$address = cn_substrR(trim($address),200);
$des = cn_substrR($des,100);
$postname = cn_substrR(trim($postname),15);
$tel= preg_replace(\"#[^-0-9,\\/\\| ]#\", \"\", $tel);
$zip= preg_replace(\"#[^0-9]#\", \"\", $zip);
$email= cn_substrR($email,255);

这里 $postname 参数最然做了长度限制,但是我们开始可以利用最短xss payload 触发xss漏洞。 继续跟踪cn_substrR函数,在

/include/helpers/string.helper.php 第24行if ( ! function_exists('cn_substrR'))
{
function cn_substrR($str, $slen, $startdd=0)
{
$str = cn_substr(stripslashes($str), $slen, $startdd);
return addslashes($str);
}

这里只用 stripslashes 和 addslashes 函数进行了过滤,但是没有过滤xss攻击函数,导致漏洞触 发 漏洞

漏洞利用

前台用户登录下单,在街道地址填写xss跨站代码。

<svg/onload=alert(0)>

总结
也算是一种思路,不过之前看的几个cms,不仅仅使用了这个消毒函数,而且还多我们的输入做了很严格的正则过滤,还有实体编码。
总的来说,我们审计的时候看到这种过滤函数倒也没必要绝望,绕过的方法太多了。
比如:sql注入仅仅使用了这个函数过滤,却没有使用inval()来对数字限定,我们可以不使用‘闭合就可以绕过了。再比如宽字节注入也可以。
xss的话就像上面的我们可以使用xss函数。

相关推荐