20252808 2025-2026-2 《网络攻防实践》第十次作业
20252808 2025-2026-2 《网络攻防实践》第十次作业
一. 实验内容
1.1 实验内容概述
1.1.1 SEED SQL注入攻击与防御实验
我们已经创建了一个Web应用程序,并将其托管在www.SEEDLabSQLInjection.com。该Web应用程序是一个简单的员工管理应用程序。员工可以通过此Web应用程序查看和更新数据库 中的个人信息。此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。员工是一般角色,可以查看或更新自己的个人资料信息。完成以下任务:
① 熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。
② 对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
③ 对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
④ SQL对抗:修复上述SQL注入攻击漏洞。
1.1.2 SEED XSS跨站脚本攻击实验(Elgg)
为了演示攻击者可以利用XSS 漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。
① 发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
② 弹窗显示cookie信息:将cookie信息显示。
③ 窃取受害者的cookies:将cookie发送给攻击者。
④ 成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
⑤ 修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
⑥ 编写XSS蠕虫。
⑦ 对抗XSS攻击。
1.2 实验相关知识概述
1.2.1 SQL注入攻击与防御
SQL语言基础:SQL(Structured Query Language,结构化查询语言 )是用于管理关系数据库的标准语言。像SELECT语句用于从数据库表中检索数据,例如SELECT * FROM Users可获取Users表中的所有记录;UPDATE语句用于修改表中已有数据,如UPDATE Users SET salary = 10000 WHERE eid = 1可将员工编号为1的薪资更新为10000 。
SQL注入原理:当应用程序使用用户输入来构造SQL查询,且未对输入进行有效验证时,攻击者可通过输入恶意SQL代码,改变原本查询逻辑。比如在登录验证的查询语句SELECT * FROM Users WHERE username = '输入用户名' AND password = '输入密码'中,若输入恶意内容,如' OR '1'='1作为密码输入,会使查询逻辑变为永真条件,绕过密码验证登录系统。
SQL注入攻击类型:
针对SELECT语句攻击:通过构造特殊输入,使SELECT语句返回未授权数据,或绕过身份验证。
针对UPDATE语句攻击:利用输入漏洞,修改数据库中不应被普通用户修改的数据,如员工薪资、权限等。
1.2.2 XSS跨站脚本攻击
XSS原理:XSS(Cross - Site Scripting,跨站脚本)攻击是攻击者在Web页面中注入恶意脚本(通常是JavaScript),当用户浏览该页面时,恶意脚本在用户浏览器中执行,实现窃取用户信息、修改页面内容等恶意行为。
XSS攻击类型:
反射型XSS:攻击者构造恶意链接,诱使用户点击。用户点击后,恶意脚本随服务器响应返回给用户浏览器并执行,一般不存储在服务器端。
存储型XSS:攻击者将恶意脚本上传并存储到服务器端(如数据库),当其他用户访问相关页面时,恶意脚本被加载并执行。本次实验中的Elgg应用程序可能存在此类漏洞。
XSS攻击危害:
窃取用户信息:如获取用户的cookie信息,用于登录用户账号,访问用户隐私数据。
页面篡改:修改页面显示内容,误导用户或进行恶意宣传。
传播恶意代码:在用户之间传播XSS蠕虫,扩大攻击范围。
XSS攻击防御:
输入输出过滤:对用户输入进行严格过滤,去除或转义可能包含恶意脚本的字符;对输出到页面的数据也进行检查和转义,防止恶意脚本注入。
使用安全的编码实践:采用安全的编程方式,避免在页面中直接使用用户输入内容,防止被恶意利用。
设置HTTP安全头:如设置Content - Security - Policy(CSP)头,限制页面可加载的资源来源,阻止恶意脚本的执行。
二. 实验过程
2.1 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数
在百度网盘下载SEEDUbuntu-16.04-32bit.zip。下载实验需要用到的SEEDUbuntu-16.04-32虚拟机资源,下载完成后安装配置虚拟机,结束后启动新安装的SEED虚拟机。

创建新的虚拟机,选择磁盘位置为SEEDUbuntu-16.04-32bit.vmdk,成功安装!


修改主机名为自己姓名:

2.2 SEED SQL注入攻击与防御实验
2.2.1 熟悉SQL语句
打开虚拟机终端命令行,输入命令mysql -u root -p登录数据库,密码为seedubuntu

输入命令use Users切换到Users数据库,再输入命令show tables;查看数据库中所有的表

输入命令select * from credential;查询表项

输入条件,查询Name为‘Boby’的相关信息
select * from credential where Name = 'Boby';

2.2.2 对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
浏览器打开www.SEEDLabSQLInjection.com网页。

按F12进入开发者模式,任意输入用户名和密码点击登录。发现登录过程中是使用 get请求访unsafe_home.php。

通过本地文件查看他的源码/var/www/SQLInjection/unsafe_edit_frontend.php。发现是直接将用户输入拼接到SQL语句中。这里存在典型的SQL注入漏洞。

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

2.2.3 对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
任意输入点击保存。发现登录过程中同样使用get请求访unsafe_edit_backend.php。

用终端打开vim /var/www/SQLInjection/unsafe_edit_backend.php查看页面源代码.观察代码可以发现查询语句回改变不应改变的字段的值,例如假设输入nickname字段为‘,Salary='1' where Name='Ryan';#,最终结果不该改变的salary值会被成功修改

打开Edit Profile页面,在nickname栏输入', Salary='20252808' where name='Ryan';#,点击Save后发现界面中的Salary项成功修改

2.2.4 SQL对抗:修复上述SQL注入攻击漏洞
这里unsafe_home.php文件默认为只读,因此要先修改unsafe_home.php文件权限为可以编辑

修改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注入漏洞。输入Admin’#发现不能成功登录了,说明漏洞修复成功。


2.3 SEED XSS跨站脚本攻击实验
2.3.1 发布恶意消息,显示报警窗口
在浏览器中访问 http://www.xsslabelgg.com ,并登录Alice的账号(使用账号:Alice,密码:seedalice 进行登录)


点击Alice头像进入主页,再选择 Edit profile,最后在 Brief description中输入XSS攻击代码 。
输入:

点击保存,发现弹出xss警告弹窗。

2.3.2 弹窗显示cookie信息:将cookie信息显示。
将Brief description中的信息更改,点击保存则可以弹出cookie信息。


2.3.3 窃取受害者的cookies:将cookie发送给攻击者
打开终端命令行输入ifconfig查看本机ip地址为192.168.200.8

将Brief description处的内容换成:

打开命令行输入命令nc -l 5555 -v监听5555端口,之后只要有用户访问Alice的主页,netcat就会接收到该用户的cookie

2.3.4 成为受害者朋友
使用Alice的账户访问Boby的主页,打开开发者工具,点击添加好友这一按钮,下方显示请求代码,说明要发送一个附带id时间戳与token三个参数的请求

删掉好友回到初始状态。根据上述信息构造payload,在alice账户about me模块中加入如下代码
点击保存后回到主页发现已经自动添加Boby为好友

2.3.5 修改受害者信息
在alice账户的about me中填写,并保存。
获取当前登录用户的身份信息、安全令牌,构造篡改个人资料的请求,自动悄悄发送请求,把用户简介改成:I am 20252808JLL.
构造修改信息xss攻击代码,并输入Alice中about me中edit HTML模式:

Boby访问Alice之后,发现Boby主页个人信息已经被强制更改

2.3.6 修改受害者信息
在alice账户的about me中填写,并保存
下面一段XSS蠕虫病毒代码,不仅会偷偷篡改个人资料,还会把自身代码复制到个人简介里,实现自我复制、无限传播,访问者打开页面就会中招。
回到Alice主页中的Edit profile处,在about me模块中加入如下代码
此时的Alice账户:

登录Boby账户并访Aalice主页后,可以看到个人信息已经被强制修改

2.3.7 对抗xss攻击
登录admin账号(账号Admin,密码seedelgg),链接为www.xsslabelgg.com/admin,“plugin”——>“HTMLawed” ——>改为"Deactivate"


重新模拟XSS攻击后发现攻击失败

三. 学习中遇到的问题及解决
问题1:在编辑JS程序代码在About me中添加失败。
解决方案:查询资料后发现需要打开About me框右上角的edit html模式,否则在Visual editor模式下编辑无法保存程序代码。
四. 学习感悟、思考
在本次实验,与前面实验不同之处在于此次实验学习了SQL注入、Web渗透,蠕虫病毒等相关知识。实验期间,我深入了解了什么是XSS攻击以及被蠕虫病毒感染等实践,并意识到网络安全隐患无处不在,让我对网络安全的学习更加深入。同时,此次实验遇到的问题很少很顺利完成实验,拓展了我在网络攻防技术领域的知识储备,让我明白在平时我们要小心访问Web页面,严防数据库安全。
浙公网安备 33010602011771号