文章目录
前记
- 今天是学习小迪安全的第五十二天,本节课的内容主要是经典的三类
xss
原理及实战案例 - 这节课主要是以理解为主,然后要学会和其他漏洞一起打组合拳,单独拿出来其实没什么危害
- 所用到的资源在下面链接,话不多说,让我们开始今天的学习吧!
WEB攻防——第五十二天
XSS跨站&反射型&存储型&DOM型&标签闭合&输入输出&JS代码解析
XSS跨站 - 输入输出-原理&分类&闭合
- 漏洞原理:接收输入数据,输出显示数据到前端页面后解析执行
- 分类:反射型(非持续、经过服务器)、存储型(持续、经过服务器)、DOM-BASE(非持续、不经过服务器)
- 扩展类型:
jquery
、mxss
、uxss
、pdfxss
、flashxss
、上传xss
等 - 常用标签:xss 常用标签及绕过姿势总结 - FreeBuf网络安全行业门户
<a href="">: 定义超链接
<img src="">: 嵌入图片
<iframe src="">: 嵌入一个HTML文档
<audio>: 定义音频内容
<video>: 定义视频内容
<svg>: 定义可缩放矢量图形
<button onclick="">: 定义按钮
<script>: 定义js脚本语句
...
- 攻击利用:盲打、
COOKIE
盗取、凭证窃取、页面劫持、网络钓鱼、权限维持等 - 安全修复:字符过滤、实例化编码、
http_only
、CSP
防护、WAF
拦截等 - 测试流程:
- 看输入输出在哪里
- 更改输入代码看执行(标签、过滤决定)
- 如果不能执行
F12
看过滤情况,尝试绕过
XSS跨站 - 分类测试-反射&存储&DOM
测试点
- 数据交互的地方:
get
、post
、headers
:get
就是看一些URL参数;post
就是一些登录点、留言板;headers
就是像UA
头、cookie
- 反馈与浏览
- 富文本编辑器
- 各类标签插入和自定义
- 数据输出的地方:
- 用户资料
- 数据输出
- 评论、留言等
- 关键词、标签、说明
- 文件上传
- 总结一句话,任何可以自定义输入数据的地方都可以尝试
XSS
- 看不懂?看不懂没关系,下面结合三种类型的演示案例来理解一下就可以了
反射型XSS
-
常见的情况是攻击者通过构造一个恶意链接的形式,诱导用户传播和打开
-
由于链接内所携带的参数会回显于页面中或作为页面的处理数据,最终造成
XSS
攻击 -
这个漏洞怎么说呢,属于低危漏洞,基本不收,因为想要造成危害比较困难。首先你得构造一个恶意链接,然后让别人点击,先不说别人会不会点,就算会点,可能浏览器的一些策略也会进行拦截,所以利用也是比较难的。
-
这里以一个真实网站为例: https://useragent.openadmintools.com/
-
这里它会自动获取你的UA头信息,而且这个UA头的输入我们是可控的,那么我们尝试输入
xss
语句看他会不会执行:
-
可以看到,弹出对话框,通过分析我们知道:
-
这里它是因为它输出的地方没有做任何过滤,所以导致后面的
xss
语句正常插入并且执行了
存储型XSS
-
存储型
XSS
是持久化的XSS
攻击方式,它将恶意代码存储于服务器端,比如数据库、留言页面、日志文件等,当其他用户访问该页面时就会触发代码,造成xss
攻击 -
这个漏洞的危害就比较大了,因为它是插入到一个正常页面的,你只需要浏览就能够触发
-
这里还是以一个实际的案例来演示,这里我们搭建一个小皮控制面板:
-
然后先利用管理员账号密码登录:
-
这里可以看到右下角有一个操作日志,这里会记录用户登录情况,比如刚刚使用
admin
登录它就会记录 -
这里我们可能不确定它是不是显示的就是用户名,我们可以再尝试输入其他的用户名登录一下,这里我就不试了,它确实是记录的登录时的用户名,并且登录失败也会记录:
-
好,现在
xss
利用的两要素已经齐活了:有输入且可控,有输出前端回显 -
那我们就可以测试了,登录框写入
xss
语句:
-
这里可能
<script>
语句被禁止了,试了几次都没成功,那可以换成其他的xss
语句,比如<img src=x onerror="alert(1)">
,这里刷新后台就成功弹出xss
信息:
-
然后你每次刷新都会弹,只有当清除日志后才会失效,这就是存储型
xss
DOM型XSS
-
DOM
型XSS
是通过将恶意代码插入到客户端的DOM树中,实现XSS
攻击,无需经过服务器,因此相对来说比较难以检测 -
那什么是
DOM
树呢,之前安全开发也讲过,DOM
是文档访问对象模型,其实就是将html
标签元素都看成对象,然后通过对象去访问其方法和属性 -
而DOM树就是这个东西分层之后看起来像树一样的树形结构图
-
然后
DOM-XSS
的利用方式有很多种,详细看这篇文章:DOM-XSS攻击原理与防御 - Mysticbinary - 博客园 -
我们就讲解比较常见的一种——跳转类
DOM-XSS
,首先以代码的视角去讲解:
<html>
<head>
<title> DOM-XSS TEST </title>
</head>
<body>
<script>
var hash = location.hash;
if(hash){
var url = hash.substring(1);
location.href = url;
}
</script>
</body>
</html>
-
假设有这样一个代码,正常访问是用
#
去实现页面跳转,但是因为跳转部分参数可控,可能导致Dom xss。 -
通过 location.hash 的方式,将参数写在 # 号后,既能让JS读取到该参数,又不让该参数传入到服务器,从而避免了WAF的检测。
-
变量hash作为可控部分,并带入url中,变量hash控制的是#之后的部分,可以使用伪协议
#javascript:alert(1)
:
-
可以看到通过改变客户端的传入参数即可造成
xss
,服务器的检测是没有用的,这就是简单的DOM-XSS
演示 -
那么在实战中呢,也是存在的,我们可以通过
edu.cn inurl:url=http
语法去google
上搜索一下,找到某某大学的一个网站(gay
迪上演示的站点),没错,两年了,这个洞还在,哈哈哈,说明这玩意单独利用是真的没什么危害 -
发现这样的传参:
http://www.xxx.net/URL.html?url=http://xxx
,然后自动跳转对应的URL -
我们抓包,将URL改为
https://www.baidu.com
看会不会跳转:
-
成功跳转,那就可能存在漏洞,尝试使用
javascript:alert(1)
弹窗:
-
成功弹出
xss
框,说明存在DOM-XSS
漏洞