1. 总结反射型、存储型、DOM型XSS特点和区别
2. 上网搜索一份XSS 的fuzz字典或字典生成工具(可选)
3. 到XSS挑战靶场打靶,要求通过5关以上,通关越多,加分越多。(https://xss.tesla-space.com/)
4. 总结浏览器解析机制,若不能理解,解释《漏洞利用之XSS注入》中15条中,至少5条执行成功或不成功的原因。(可选)
XSS分类
存储型XSS
存储型XSS又被称为持久性XSS,存储型XSS是最危险的一种跨站脚本漏洞,当攻击者提交一段XSS代码后,被服务端接收并存储,当攻击者或用户再次访问某个页面时,这段XSS代码被程序读出来响应给浏览器,造成XXS跨站攻击,这便是存储型XSS。
反射型XSS
反射型XSS也被称为非持久性XSS,当用户访问一个带有XSS代码的HTML请求时,服务器端接收数据后处理,然后把带有XSS的数据发送到法别览器,浏览器解析这段带有XSS代码的数据后,就造成XSS漏洞,这个过程就像一次反射,所以叫反射型XSS。
DOM 型 XSS
不经过后端,DOM-based XSS漏洞是基于文档对象模型Document Object Model,DOM)的一种漏洞,dom-xss是通过url传入参数去控制触发的。
区别
1.被攻击对象的不同
反射型XSS的被攻击对象一般是攻击者去寻找的,就比如说:一个攻击者想盗取A的QQ号,那么攻击者就可以将一个含有反射型XSS的URL链接给A,此时我们可以看出,需要将特定的URL,注意是特定的URL给A,当A点击进入链接时,就受到XSS攻击,所以这种攻击范围不是特别的广。
而存储型XSS是广撒网的方式或者指定的方式,就是攻击者将存储型XSS放在一些有XSS漏洞的网站上,只要有用户访问这个链接就会中招,而攻击者也可以寻找被攻击对象,比如说上面的例子,所以我们可以看出,存储型XSS的危害性更大,范围更广,可以不需要寻找被攻击对象,只要存储型XSS在服务器上就能实施攻击。
DOM型XSS的被攻击对象其实和反射型XSS被攻击对象差不多,就是给攻击对象放送URL。
2.解析位置不同(个人感觉是反射型与存储型区别的本质)
反射型XSS的脚本被解析的地方是浏览器,而存储型XSS的脚本被解析的地方是服务器,DOM型XSS也是浏览器,所以DOM型又叫DOM反射型XSS。但是反射型XSS需要联网,而DOM型不需要!
3.存储时间不同
反射型XSS是既有即用,没有持久性,而存储型XSS是存储在服务器上,只要服务器不挂机或者是被干掉,就一直会有,DOM型XSS和反射型差不多,但是用人就扯淡了,那反射型只要不改变源代码不就是一直存在吗?不是的,反射型XSS是必须得特定的URL才能使得被攻击对象中招,如果是单单官方网页,就没有了咯,存储型就不同,只要服务器里面有存储型XSS,不论是不是官网,被攻击对象都会被攻击。
4.允许输入点的不同(这是DOM型与其他两种的区别)
一般情况下,反射型XSS在搜索框啊,或者是页面跳转啊这些地方,而存储型XSS一般是留言,或者用户存储的地方,而DOM呢?是在DOM位置上,不取决于输入环境上。
浏览器的解析机制主要涉及到以下几个关键步骤:
URL解析与缓存检查:
浏览器首先解析输入的URL,识别协议(如HTTP、HTTPS)、域名、端口号和路径等信息。
接着检查本地缓存(浏览器缓存、系统缓存、ISP缓存等)中是否已有对应资源的副本。如果找到且未过期,则直接从缓存中加载资源,以节省时间和带宽。
DNS域名解析:
如果本地缓存中没有找到所需资源,浏览器会进行DNS查询,以获取域名对应的IP地址。
DNS查询可能涉及多个DNS服务器,最终找到对应的IP地址。
建立连接与发送请求:
浏览器使用IP地址与服务器建立TCP连接(对于HTTPS,还会进行SSL/TLS握手以加密通信)。
发送HTTP请求到服务器,请求指定的资源。
服务器响应与资源接收:
服务器处理请求,并返回HTTP响应,包括状态码、响应头和响应体(即请求的资源)。
浏览器接收响应,并根据需要缓存响应内容。
页面渲染:
浏览器解析HTML文档,构建DOM树。
加载并解析CSS样式表和JavaScript文件,构建渲染树。
结合DOM树和渲染树进行页面渲染,包括回流(reflow)和重绘(repaint)。
《漏洞利用之XSS注入》中5条执行成功或不成功的原因
在《漏洞利用之XSS注入》中,XSS(跨站脚本攻击)的成功与否取决于多个因素。以下是5条执行成功或不成功的原因:
输入过滤不严:
成功原因:如果网站没有对用户输入进行严格的过滤和转义处理,攻击者可以注入恶意脚本代码。这些代码在受害者浏览页面时被执行,导致XSS攻击成功。
不成功原因:如果网站对用户输入进行了严格的过滤和转义处理,将恶意脚本代码中的特殊字符(如<、>、"等)转换为HTML实体或进行其他形式的编码,那么恶意脚本将不会被执行,XSS攻击失败。
存储型与反射型XSS的区别:
成功原因(存储型XSS):攻击者将恶意脚本注入到网站的数据库中,这些数据在后续页面加载时被读取并显示,导致恶意脚本被执行。由于恶意脚本被存储在服务器上,攻击可以持续进行。
不成功原因(反射型XSS):如果网站仅将用户输入作为单次请求的一部分返回给用户,而没有将其存储在服务器上,那么恶意脚本将只在单次请求中生效,攻击效果有限。
浏览器安全策略:
不成功原因:现代浏览器通常具有内置的安全策略,如内容安全策略(CSP),这些策略可以限制或阻止某些类型的脚本执行。如果网站启用了这些安全策略,并且配置得当,那么XSS攻击可能会失败。
用户行为:
成功原因:XSS攻击的成功还取决于用户的行为。如果用户点击了包含恶意链接或脚本的邮件、消息或网页,那么攻击可能会成功。
不成功原因:如果用户具有较高的安全意识,不随意点击不明链接或下载未知来源的文件,那么XSS攻击的成功率将大大降低。
服务器配置:
不成功原因:服务器的配置也会影响XSS攻击的成功率。例如,如果服务器配置了适当的HTTP头部(如X-Content-Type-Options: nosniff),可以防止浏览器尝试基于内容猜测响应的MIME类型,从而减少XSS攻击的风险。
XSS闯关
第一关-无过滤机制
插入一段js代码,get传参
url?name=<script>alert()</script>
第二关-闭合标签
继续尝试插入js;
<script>alert()</script>
发现特殊代码被实体转义,闭合双引号即可
"> <script>alert()</script> <"
第三关-单引号闭合+添加事件
发现前面的方法都不行,发现即使用引号也会被实体化。
利用onfocus事件绕过,然后再点击输入框触发onfocus事件即可
' οnfοcus=javascript:alert() '
第四关-双引号闭合+添加事件
" οnfοcus=javascript:alert() "
这里是双引号闭合,<input>标签,所以我们还能继续利用onfocus事件,构建payload
第五关-新建标签
尝试onfocus;" οnfοcus=javascript:alert() "发现on被替换成o_n,并且全变成了小写。
过滤了js的标签还有onfocus事件,虽然str_replace不区分大小写,但是有小写字母转化函数,所以就不能用大小写法来绕过过滤了,只能新找一个方法进行xss注入,这里我们用a href标签法. href属性的意思是 当标签<a>被点击的时候,就会触发执行转跳,上面是转跳到一个网站,我们还可以触发执行一段js代码。
点击xxx,触发a标签href属性即可
第六关-大小写绕过
查看源码,发现之前的放荡发都被过滤掉了
发现大小写没有被过滤掉,这题能利用大小写进行绕过,所以我们可以构造payload