uchome<=2.0的程序中js.php文件存在代码执行漏洞,原因是正则匹配时引号使用不当,导致可以任意提交并执行PHP代码。 Php中单引号与双引号是有区别的: " "双引号里面的字段会经过编译器解释,然后再当作HTML代码输出。 ' '单引号里面的不进行解释,直接输出。 这里正则匹配后的2在双引号里,导致了代码可以执行。 Js.php 问题代码如下: include template("data/blocktpl/$id"); $obcontent = ob_get_contents(); obclean(); $s = array("/(r|n)/", "/<divs+class="pages">.+?</div>/is", "/s+(href|src)="(.+?)"/ie"); $r = array("n", '', 'js_mkurl("1", "2")');//代码执行 $content = ''; if($obcontent) { $obcontent = preg_replace($s, $r, $obcontent); $lines = explode("n", $obcontent); foreach ($lines as $line) { $line = addcslashes(trim($line), '/''); $content .= "document.writeln('$line');n"; } } else { $content .= "document.writeln('NO DATA')"; } Ucenter Home 2.0(官方最新) + Ucenter 1.5(官方最新) 官方已经发布补丁
uchome<=2.0的程序中js.php文件存在代码执行漏洞,原因是正则匹配时引号使用不当,导致可以任意提交并执行PHP代码。 Php中单引号与双引号是有区别的: " "双引号里面的字段会经过编译器解释,然后再当作HTML代码输出。 ' '单引号里面的不进行解释,直接输出。 这里正则匹配后的2在双引号里,导致了代码可以执行。 Js.php 问题代码如下: include template("data/blocktpl/$id"); $obcontent = ob_get_contents(); obclean(); $s = array("/(r|n)/", "/<divs+class="pages">.+?</div>/is", "/s+(href|src)="(.+?)"/ie"); $r = array("n", '', 'js_mkurl("1", "2")');//代码执行 $content = ''; if($obcontent) { $obcontent = preg_replace($s, $r, $obcontent); $lines = explode("n", $obcontent); foreach ($lines as $line) { $line = addcslashes(trim($line), '/''); $content .= "document.writeln('$line');n"; } } else { $content .= "document.writeln('NO DATA')"; } Ucenter Home 2.0(官方最新) + Ucenter 1.5(官方最新) 官方已经发布补丁