20242934 2024-2025-2 《网络攻防实践》第十周作业

1.实践内容

(1)SEED SQL注入攻击与防御实验

我们已经创建了一个Web应用程序,并将其托管在 三达不溜.SEEDLabSQLInjection.com。该Web应用程序是一个简单的员工管理应用程序。员工可以通过此Web应用程序查看和更新数据库中的个人信息。此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。员工是一般角色,可以查看或更新自己的个人资料信息。完成以下任务:

熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。

对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。

对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。

SQL对抗:修复上述SQL注入攻击漏洞。

(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攻击。

2.实践过程

2.1SEED SQL注入攻击与防御实验
2.1.1熟悉SQL语句:
通过指令mysql -u root -p,登录mysql数据库(此处密码为seedubuntu)

输入指令show databases;,查看mysql数据库中所有的库
由结果推测包含员工个人信息的creditential表在Users这个库中

输入指令use Users;,进入这个名为Users的数据库
再输入指令show tables;,便可查看Users数据库中所有的表

输入指令select * from credential;,查询Users数据库中名为creditential的表中存储的内容
由结果可知,creditential表存储了每个员工的ID、姓名、薪水等个人信息

通过指令select Name from creditential;查看此表中存储的所有员工姓名

2.1.2对SELECT语句的SQL注入攻击:
上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序
在浏览器登陆www.SEEDLabSQLInjection.com,用户名测试输入:hyf,密码测试输入:1234567890

在登录界面键入F12,然后点击Login,即可捕获刚才登录操作的数据
这时登录界面提示输入的账户不存在,且通过捕获的数据发现该Web应用程序将输入的用户名和密码发送至unsafe_home.php校验

输入vim/var/www/SQLInjection/unsafe_home.php,在Text Editor中打开www.SEEDLabSQLInjection.com存储动态信息文件var中的unsafe_home.php,即可查询到源代码

分析unsafe_home.php源代码
SQL语句中WHERE name= ‘\(input_uname’ and Password=‘\)hashed_pwd’将键入的用户名注入至\(input_uname,将键入的密码注入至 \)hashed_pwd

该Web应用通过用户名Admin区分管理员和员工,管理员(用户名Admin)可select所有员工的个人信息

根据以上对源代码的分析,可设计出攻击方案:登陆时键入用户名Admin’#,密码空着
因为键入用户名Admin’#且不输入密码后,WHERE name= ‘inputuname′andPassword=′
hashed_pwd’变为WHERE name= ‘Admin’#’ and Password=‘$hashed_pwd’。
如此一来,#后的代码就成了注释语句,不参与程序运行,并且用户名还是Admin,这样做的结果是在不输入密码的情况下便能以管理员角色登陆系统,查看用户信息


2.1.3对UPDATE语句的SQL注入攻击:
通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
用户名输入Alice’#,密码空,以员工Alice的角色登录系统


点击Edit Profile进行编辑,将Alice的昵称取为Ice,在登录界面键入F12,点击Save,即可捕获刚才编辑操作的数据
由捕获数据可知unsafe_edit_backend.php是用于保存编辑的

在Text Editor中打开www.SEEDLabSQLInjection.com存储动态信息文件var中的/var/www/SQLInjection/unsafe_edit_backend.php,查看其源代码

根据update更新语句:\(sql = "UPDATE credential SET nickname=‘\)input nickname’ email=‘\(input email’ ,address=‘\)input address’,Password =‘\(hashed pwd’,PhoneNumber = ‘\)input phonenumber’,where ID = \(id;"可知正常情况下只能编辑用户昵称、邮箱、地址、密码、电话号码 ![](https://img2024.cnblogs.com/blog/3610369/202505/3610369-20250508124144419-295884770.png) 在alice的编辑页面NickName输入’, salary=‘2924’ ;#, 此时sql语句就把后面的注销掉了,变为了\)sql = "UPDATE credential SET nickname=‘’, salary=‘2000’ ;

薪水修改成功

2.1.4SQL对抗
修复上述SQL注入攻击漏洞
以上SQL注入攻击能成功的根本原因是这个Web应用程序无法区分输入字符和可执行代码
对SELECT语句的SQL注入攻击,将SELECT语句修改为$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);

再次测试攻击失败

对UPDATE语句的SQL注入攻击,将update更新语句修改为:
$sql = \(conn->prepare(“UPDATE credential SET nickname=?,email=?,address=?,PhoneNumber=? where ID=\)id;”);
\(sgl->bind_param(“ssss”,\)input_nickname, \(input_email ,\)input_address,$input_phonenumber);

再次测试发现攻击失败
2.2SEED XSS跨站脚本攻击实验(Elgg)
2.2.1发布恶意消息,显示警报窗口
我们访问http://www.xsslabelgg.com/,使用Alice的身份登录,用户名为Alice,密码为seedalice。
点击“Alice”——“Edit Profile”,然后在“Brief description”中写入以下内容:


点击“Save”保存后,之后每次访问http://www.xsslabelgg.com/profile/alice都会弹出xss的alert窗口

同样,我们使用Boby的身份登录该系统,点击“More”——“Members”,则也会看到xss的弹窗

2.2.2弹窗显示cookie信息
按照2.2.1的操作流程,把填入“Brief description”中的内容改为:

即可弹窗显示cookie信息

2.2.3窃取受害者的cookies
同样是在Alice主页中点击Edit profile,在Brief description中输入:。

然后在terminal终端中输入nc -l 5555 -v对5555端口进行监测。

2.2.4成为受害者的朋友
登录Alice账户后,访问http://www.xsslabelgg.com/profile/boby进入Boby的主页
ctrl+shift+E进入开发者模式,点击Network,准备捕获添加好友操作的数据,点击Add friend,添加Boby为好友

请求发往http://www.xsslabelgg.com/action/friends/add?friend=45&__elgg_ts=1652732463&__elgg_token=DA14ZydedxoMfoG1CbgYo,参数friend代表好友的id,参数__elgg_ts代表时间戳,参数__elgg_token代表token
构造以下JS代码,放在Alice的About me内,选择Edit HTML保存,用于自动成为受害者朋友:

登录Boby的账号,访问Alice的主页
再查看Latest activity,发现Alice成为受害者boby的朋友了

2.2.5修改受害者的信息
ctrl+shift+E进入开发者模式,点击Network,准备捕获修改About me操作的数据,点击save保存修改

在Alice的About me中写入如下代码:


登录Boby的账号,访问Alice主页,再返回Boby主页,发现自我介绍已经改变,攻击成功

2.2.6编写XSS蠕虫
在Alice的About me中写入如下代码:

登录Boby的账号,访问Alice的主页,发现这段代码已经被成功的复制,攻击成功

2.2.7对抗XSS攻击
Elgg本身提供对抗XSS攻击的插件
首先登录管理员账户(密码为seedelgg)
然后点击Account->administration->plugins->Security and Spam,找到插件HTMLawed,该插件的主要作用是对用户的输入输出进行校验并且去除特定标签

然后查看Alice的主页,发现此时XSS攻击已失效,Alice中的恶意代码被当作about me文本展示

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

  • 问题1:seedubuntu2010虚拟机中没有User数据库
  • 问题1解决方案:下载新版本的seedubuntu虚拟机
  • 问题2:修改主机名遇到困难
  • 问题2解决方案:从网上查找使用命令 sudo hostname "新主机名"

4.实践总结

通过本次实验,熟悉巩固了SQL语句,注入攻击时,在参数name或password中插入了特殊字符#,以篡改程序SQL的条件判断,从而骗过程序,达到注入攻击的目的。另外,攻击者利用XSS漏洞构建恶意脚本,对大量用户构成危害,可以通过留言本、论坛、博客等方式达到目的。

posted @ 2025-05-08 14:17  何毅帆  阅读(56)  评论(0)    收藏  举报