Discuz!的addcslashes对序列化字符串处理不当造成数据注入

- AV AC AU C I A
发布: 2025-04-13
修订: 2025-04-13

### 简要描述: 首先声明一点,这个漏洞2014-09-10在“腾讯安全应急响应中心”发过,账号现已放弃,对于腾讯不想多说什么 问题描述: Discuz_X3.2及以下 可盗取管理员、用户信息,蠕虫攻击等 ### 详细说明: source\class\discuz\discuz_database.php public static function quote($str, $noarray = false) { if (is_string($str)) return '\'' . addcslashes($str, "\n\r\\'\"\032") . '\''; ..... source\function\function_core.php function dunserialize($data) { if(($ret = unserialize($data)) === false) { $ret = unserialize(stripslashes($data)); } return $ret; } “return '\'' . addcslashes($str, "\n\r\\'\"\032") . '\'';”这句会把ascii的1A转换成3个字符,分别是ascii的0H,33H,32H。 通过提交1A可以让dunserialize()函数if返回false调用“$ret = unserialize(stripslashes($data));”, 这句会将数据再次addcslashes一次,如果提交的数据中有\就会产生数据的覆盖, 比如'a:2{s:4:"key1";s:4:"\\\\";s:4:"key2";s:4:"data";}'会变成'a:2{s:4:"key1";s:4:"\\";s:4:"key2";s:4:"data";}'。 如果这两个数据都是可提交的,就可以通过提交适当的\造成注入而改写数组的值、增加数组、实例化对象等。 ### 漏洞证明: 下面个人空间的XSS 通过布局数组改写$blockdata['parameters'][$blockname]['title']参数的值绕过过滤 <?xml version="1.0" encoding="ISO-8859-1"?><root> <item id="diypage">...

0%
暂无可用Exp或PoC
当前有0条受影响产品信息