xss专题1-原理解析和简单利用

发布时间 2023-12-06 16:33:52作者: 恍恍

XSS原理解析

跨站脚本攻击(XSS)是一种常见的网络安全漏洞,其原理涉及恶意用户向网页注入客户端脚本代码,使其在用户的浏览器中执行。攻击者利用输入栏或其他用户可输入内容的地方,注入包含恶意脚本的数据。当其他用户访问包含恶意注入内容的页面时,这些脚本将在其浏览器中执行,导致攻击者能够窃取用户信息、篡改页面内容、跳转到恶意网站等。
XSS漏洞可以分为三个类型:
1.反射型
反射型的XSS通常是通过URL参数等方式传递到服务端,然后服务端再反射回页面,用户点击包含恶意脚本的链接时脚本再执行。这种类型的XSS通常需要诱导用户点击构造的链接才能利用。
2.存储型
顾名思义,就是能够存储在服务器上的XSS。恶意脚本通过存储在服务器上,达到持续化利用,每当用户访问时,这些脚本就会执行。例如,在论坛、留言板等地方,输入恶意代码,当其他用户访问脚本便会执行。
3.DOM型
DOM型的XSS利用了浏览器解析HTML页面时的漏洞,恶意脚本通过修改DOM文档对象模型来触发漏洞。这种漏洞不涉及服务器端的漏洞,而是利用了客户端脚本在浏览器中执行时的弱点。
以上三种类型的XSS,显然存储型的造成的危害是最大的。
当然枯燥的理论和讲述是必要又是让人感到烦恼的,下面我使用搭建的简易靶场来对这三种类型的XSS进行解析。

简单利用

存储型

现在我们提交一句简单的代码进行尝试 <script>alert(1)</script>

可以看到js语句已经存储到服务端了,那么每一次访问,都会触发这个弹窗。

前端渲染评论列表时,解析了 <script>alert(1)</script>为js代码并执行,所以并没有作为文本显示
我们也可以提交一个<h1>hhh</h1> 看看

看来他不仅会解析js代码,也会解析html代码
可以来看看代码:

反射型


还记得反射型的原理吗?就是通过URL参数将恶意代码传递到服务端,再由服务端反射回页面,和存储型的最大区别就是并没有进行一个存储的操作。
看看代码:

那么就可以构造一个这样的链接
http://localhost:8081/test/xss/1.php?search=<script>alert(1)</script>
试想一下此时搜索内容回显应该是<script>alert(1)</script>
而前端会解析这个js代码,那么只要访问这个链接就会触发脚本

DOM型

DOM型XSS,在原理中我们提到要利用document文档

直接分析代码可以看到
这里的document添加了一个监听器,来获取URL中的message参数值,看起来好像和反射型XSS有点像,但是他们有一个很大的区别:反射型XSS需要服务端,而DOM型XSS不需要服务端。这里是直接通过前端本身的js代码获取到URL中的message参数值,然后通过document将内容直接显示到页面上。

这里的回显内容是在p标签中的,所以我们也要使用html中的标签如img标签

那么其他用户访问了构造的链接,就会触发脚本执行。