Braid信息安全博客 - Web安全|代码审计|安全开发|Java|php|python

【PHP代码审计】 Metinfo5.3.10版本前台Getshell

0x01 前言

这篇文章是从表弟Veneno的博客上看到并转载过来的,原文链接:http://www.venenof.com/index.php/archives/179/。第一次看到zip://伪协议出现在漏洞中,学习了~
里面有两个知识点需要理解:
1.Metinfo采用的伪全局变量,之前也有过变量覆盖导致SQL注入的案例
/include/common.inc.php

foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
foreach($$_request as $_key => $_value) {
$_key{0} != '_' && $$_key = daddslashes($_value,0,0,1);
$_M['form'][$_key]=daddslashes($_value,0,0,1);
}
}

2.zip://伪协议的使用
zip:///usr/share/nginx/html/webmulu/1.zip#1.php

0x02 漏洞分析

grep下引用了common.inc.php的文件

然后发现后台登录检查的地方有个$depth变量,我们检查下这个文件

<?php
if($depth!=''&&$depth!='../'&&$depth!='../../'){die();}
if(!isset($depth))$depth='';
...
if($action=="login"){
$metinfo_admin_name = $login_name;
$metinfo_admin_pass = $login_pass;
$metinfo_admin_pass=md5($metinfo_admin_pass);
/*code*/
if($met_login_code==1){
require_once $depth.'../include/captcha.class.php';
...

结合下zip伪协议就可以绕过require_once中’../include/captcha.class.php’的限制了(一开始只想着截断了…)

0x03 漏洞证明

首先生成一个特定的zip包如下:

然后我们前台注册一个账户,上传头像处将这个zip包上传,得到路径:
D:/winsoftware/wamp/www/met539/upload/head/1.png(当然这里只能得到相对路径)

构造POC如下:

可以看到成功执行了命令,运气不错获取的是系统权限。