xiaof 2020-03-05
开始从小的漏洞开始练习,搬运项目地址:
https://github.com/imsebao/Code-Audit
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函数。