php变量覆盖经验解说续写(两则)
一:Dedecms变量覆盖新型绕过:
一哥也提及到了的:Jannock 看留言.
请看看文件:include/filter.inc.php
引用一哥话语:
这是2B的dede再次变量覆盖漏洞根源。。
这是过滤或替换非法关键字。正常的。
/* 对_GET,_POST,_COOKIE进行过滤 */
foreach(Array('_GET','_POST','_COOKIE') as $_request)
{
foreach($$_request as $_k => $_v)
{
${$_k} = _FilterAll($_k,$_v);
}
}
等同于重新赋值了,之前做的过滤无效了。
这是过滤或替换非法关键字。正常的。
漏洞关键是主要是下面的代码:
function _FilterAll($fk, &$svar) //这是过滤或替换非法关键字。
{
global $cfg_notallowstr,$cfg_replacestr;
if( is_array($svar) )
{
foreach($svar as $_k => $_v)
{
$svar[$_k] = _FilterAll($fk,$_v);
}
}
else
{
if($cfg_notallowstr!='' && preg_match("#".$cfg_notallowstr."#i", $svar))
{
ShowMsg(" $fk has not allow words!",'-1');
exit();
}
if($cfg_replacestr!='')
{
$svar = preg_replace('/'.$cfg_replacestr.'/i', "***", $svar);
}
}
return $svar;
}
/* 对_GET,_POST,_COOKIE进行过滤 */
foreach(Array('_GET','_POST','_COOKIE') as $_request)
{
foreach($$_request as $_k => $_v)
{
${$_k} = _FilterAll($_k,$_v); //这里只有过滤或替换非法关键字,当GPC为off的时候可以用注入了.
}
}
所以在GPC=OFF的时候,被转义的变量又会被重新覆盖而变成正常代码。
Eg: typeid=2\'
经过覆盖 typeid=2'
看他的过滤会把脏话替换成***, 如果我们传如的参数里面有这样的一个字符 /他妈/ 他就会成为/***/,我相信大家已经想到了什么。
我联想到了XSS .
<script>/**/alert(1)/**/</script>
csse:[link href=”WooYun: 新浪微博某官方应用存储型XSS – 重温一个利用方法~“]gainover[/link]
更多连接:
https://forum.90sec.org/thread-4228-1-1.html 没ID搜索:[【原创】] (首发)dedecms 5.7 最新漏洞(绝非网上公布的)
https://forum.90sec.org/thread-4249-1-1.html 没ID搜索:[【原创】] 对最近dedecms注入的分析
http://www.2cto.com/Article/201211/169202.html
二.boblog任意变量覆盖漏洞—–php内置函数的问题
1.简单说说流程:$_SERVER["REQUEST_URI"];控制了$q_url->绕过正则$RewriteRules[]不够细致->经过一些过程->parse_url出url->最后
parse_str($parsedURL['query']); (parse_str函数变量覆盖!)
然后有两个出路:1.虽然用了basename()来限制,但是可以利用data://来执行命令.只是这种方式的利用是有限制的
[PHP>5.2.0&allow_url_include=On].
2.可以变量覆盖绕过系统global.php文件中防御变量覆盖的函数unregister_GLOBALS()。
程序写得不错^-^ 赞一个! 可惜 我们可以利用unset()就让他消失了.从而引发各种漏洞。。。
一些链接:
php data://
高级PHP应用程序漏洞审核技术 (百度搜索下) ->此文章中概括了大量php内置函数能引发变量覆盖的问题!
吐槽WB.