VulnHub靶场之CH4INRULZ_v1.0.1
继续靶机实验,老样子,先打开kali和靶机
查看kali的IP地址,然后进行主机查找
使用nmap命令:nmap -sP 192.168.80.1/24
接下来进行端口扫描,,,nmap:nmap -p 1-65535 -sV 192.168.80.129
:
可以清楚看见,开放了ftp端口,ssh,两个web服务,首先访问一下192.168.80.129:80
emmm,一个frank tope的个人博客页面,没发现啥:
进行目录扫描,进行信息收集!!使用dirbuster
发现有个401错误!!该错误消息表明您首先需要登录(输入有效的用户名和密码)!!
进行一下访问!!
是需要登录的,而且我们不知道账号和密码,,,,先留着吧
继续信息收集,这个只是跑目录,跑一下文件,利用dirb
几个dirb常用的字典路径
/usr/share/dirb/wordlists/big.txt #大字典
/usr/share/dirb/wordlists/common.txt #公共字典
/usr/share/dirb/wordlists/extensions_common.txt #常用文件扩展名字典
/usr/share/dirb/wordlists/mutations_common.txt #备份扩展名
也可以用自己的字典,扫出一个备份文件:
下载下来,打开看看:
发现一串账号密码一样的东西,使用john进行破解,得到密码:
然后继续返回到我们刚刚需要登录的地方尝试登录:
登陆成功!!提示如下:
*这是我未完成的工具清单
-上传工具(已完成,但需要安全检查)
有个上传的地方???最终找到上传的地方!!!还有个提示:脚本安全“50%完成”
这里应该能上传吧,先试试看,随便传一个文件
结果提示:File is not an image.Sorry, only JPG, JPEG, PNG & GIF files are allowed.Sorry, your file was not uploaded.
改文件名进行抓包,依旧不行:
怀疑是校验了文件头,,,,,添加文件头进行测试,上传成功,不过不知道文件的路径:
不过改成php文件还是不行,陷入死胡同!!!
对了,不是还有一个web服务的端口吗??去访问一下看看:192.168.80.129:8011
前一个网页的服务???进行信息收集!!!先扫一通:
发现api???进行访问!!得到信息:
逐个进行访问,结果发现只有files_api.php能够进行访问!!!!
得到的提示:
没有传递给我名为file的参数
*注意:这个api不使用json,所以以原始格式发送文件名
进行get传参发现提示错误!!!
尝试POST传递参数!!!成功!!
emmm,想尝试一下能否读取80端口的上传的upload.php文件
不过我们不知道路径,,,尝试读取apache配置文件:/etc/apache2/sites-enabled/000-default
,成功读取到:
直接读取upload.php看看,发现直接执行了该文件:
行吧,再试试看文件包含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/,尝试访问我们上传的文件,成功:
而且我们之前尝试使用file读取的时候发现他是直接执行php文件的,可以进行尝试一波:
恩恩,木有问题,,,直接上PHP脚本反弹shell:
得到shell:
使用python获取标准shell:python -c 'import pty; pty.spawn("/bin/bash")'
直接查看内核:uname -a
emmm,好像比我们上一个靶机的还要老,,直接脏牛吧:searchsploit Dirty
,下面这些应该都行吧:
先下载到本地:cp /usr/share/exploitdb/exploits/linux/local/40839.c ~
emmmm,靶机文件和文件夹都不能创建:
那我们就找一个可写入的文件夹,最后发现/tmp文件夹中可以写文件:
emmmm,但是vi 1.c还是写不进去文件,,换方法吧!!
在kali上打开apache,并且配置好服务,在靶机上下载:
vim /etc/apache2/ports.conf
/etc/init.d/apache2 start
cp /usr/share/exploitdb/exploits/linux/local/40839.c /var/www/html
编译执行:
gcc -pthread 40839.c -o dirty -lcrypt
./dirty
执行结果:
输入新的密码,啊哈哈哈哈,成功了
切换用户:
成功获取到flag:
总结
说实话这个靶场利用了文件包含和文件上传的漏洞
而且不是分开利用,两者缺一不可,虽说是一个还没开发完的网站咯
总体来说还是学到了许多的东西!!!继续加油!!