Discuz! X 储存型XSS (X1 ~ X3.1最新版)

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

### 简要描述: Discuz! X 储存型XSS一枚,存在于X1 ~ X3.1最新版 ### 详细说明: 发表帖子时,Discuz对于其中的ed2k链接做了解析处理,虽然对于链接中的名称等进行了处理,但是未对传入的文件大小做处理(转为int),造成了XSS。 ed2k地址形如: ``` ed2k://|file|%E8%8B%B1%E9%9B%84%E4%BC%A0%E8%AF%B46%EF%BC%9A%E7%A9%BA%E4%B9%8B%E8%BD%A8%E8%BF%B9FC%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%873CD%E5%AE%8C%E7%BE%8E%E7%A0%B4%E8%A7%A3%E7%8F%8D%E8%97%8F%E7%89%88.exe|468173|F85A01E2F6049D10F1881ACDA4A9F704|h=MJLSJERMY4VYJIB5ZKPP7TQHQ6HI6USW|/ ``` 其中的468173即文件大小,这段地址在Discuz的function_discuzcode.php中被处理 ``` if($allowbbcode) { if(strpos($msglower, 'ed2k://') !== FALSE) { $message = preg_replace("/ed2k:\/\/(.+?)\//e", "parseed2k('\\1')", $message); //调用了parseed2k } } ``` ``` function parseed2k($url) { global $_G; list(,$type, $name, $size,) = explode('|', $url); //读出了地址中的类型、名称、文件大小数据 $url = 'ed2k://'.$url.'/'; $name = addslashes($name); if($type == 'file') { $ed2kid = 'ed2k_'.random(3); //一直到这里,均未对上面的$size变量进行安全处理,此时$size变量是字符串类型的 //下面一行,sizecount($size)调用了sizecount函数,传入了字符串型的$size return '<a...

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