这篇文章我记得发过了,但是没找到,再发一次
对比补丁我们发现在\include\discuzcode.func.php里:
$discuzcodes['searcharray']['bbcode_regexp'] = array( //标签的正则
"/\[ali gn=([^\[\<]+?)\]/i", ---->补丁前
"/\[flo at=([^\ [\<]+?)\]/i"
|
V
"/\[align=(left|center|right)\]/i", ---->补丁后
"/\[float=(left|right)\]/i"
继续看下面的codz是杂处理这2个标签的:
$discuzcodes['replacearray']['bbcode_regexp'] = array( //替换的正则
........
"
",
"
"
替换的代码部分:
$ mess age = str_replace($discuzcodes['searcharray']['bbcode_str'],
$ discuzcodes['replacearray']['bbcode_str'],
pre g_replace(
($p ars etype != 1 && $ all owb bcode == 2 && $GLOBALS['_DCACHE']['bbcode s'] ? array_merge($discuzcode s ['sea rcharra y']['bbcod e_regexp'], $GLOB ALS['_DCACHE']['bbcodes']['sear charray']) : $discuzcod es ['searcharray']['bbcode_regexp']),
($parsety pe != 1 && $a llo wbb code == 2 && $GLOBALS['_DCACHE ']['bbcodes'] ? arra y_merge( $discuzc odes[ 'replacearray']['bbcode_regexp'], $GLOBALS['_DCACHE']['bbc odes']['rep la ce array']) : $discuzco d es['r e pl ace array']['bb cod e_reg ex p']),
$message));
经过测试发现$message在进入上面的str_replace以前已经被htmlspecialchars或者类似函数处理过,
Discuz0724补丁补掉的一个XSS+补掉的另外一个XSS
,电脑资料
《Discuz0724补丁补掉的一个XSS+补掉的另外一个XSS》(https://www.unjs.com)。所以没有办法使用"和<>这也就是意味着 "/\[ align= ([^\[\<]+?)\]/ i"-->"
" 是没办法用"<>等闭合,我们再看float标签:
"/\[floa t= ([^ \[\<]+? )\]/ i" -->"
"
替换后的\\1进入
测试codz:
[float=expression(alert(123456789))]test[/float]
上面的只是弹个筐筐,鉴于很多牛牛都bs这个筐筐,的确有的情况有筐筐也是没办法利用的,因为alert(123456789)这个里面没有什么特别的敏感符号。我们看看"/\[float=([^\[\<]+?)\]/i" 这个提取的正则没有什么特别的过滤只是$message在替换前就被htmlchars了
所以完全是可以利用的 如:
\31\32\33\34\35\ 36\37\38\39\29\29]test[/float]
不过还是弹筐筐 :)。
后话:Dz的discuzcode部分代码写的真的很烂[我是说代码风格],我估计DZ的负责代码安全的人员也看的郁闷啊,才导致漏洞没看出来?纯粹的YY ..... 。不过xss的黑盒测试比看代码要来的方便啊[看到这话,有人会很高兴的]。
Dz0724补丁补掉的另外一个xss
\include\common.inc.php里:
( $PHP_SELF, 0, strrpos($PHP_SELF, '/'))).'/');