1. 总结反射型、存储型、DOM型XSS特点和区别
2. 上网搜索一份XSS 的fuzz字典或字典生成工具(可选)
3. 到XSS挑战靶场打靶,要求通过5关以上,通关越多,加分越多。(https://xss.tesla-space.com/)
4. 总结浏览器解析机制,若不能理解,解释《漏洞利用之XSS注入》中15条中,至少5条执行成功或不成功的原因。(可选)
目录
一、XSS介绍
1)反射型
反射型XSS(Reflected Cross-site Scripting),也称作非持久型、参数型跨站脚本,是跨站脚本攻击(XSS)的一种常见形式。其特点主要包括以下几个方面:
1. 非持久化
- 单次触发:反射型XSS的攻击效果只在用户点击了包含恶意脚本的链接时触发,且通常只执行一次。一旦页面加载完成,恶意脚本的执行也随之结束。
- 不存储于服务器:与持久型XSS不同,反射型XSS的恶意脚本不会存储在服务器或客户端的数据库中,因此不会长期存在。
2. 依赖用户交互
- 诱导点击:攻击者通常通过电子邮件、社交媒体或其他方式诱导用户点击包含恶意脚本的链接。只有当用户主动点击这些链接时,攻击才会发生。
- 即时性:由于恶意脚本不会长期存在,因此攻击者需要迅速行动,确保在用户点击链接时恶意脚本仍然有效。
3. 易于防御
- URL特征明显:反射型XSS的恶意脚本通常包含在URL中,这使得它们相对容易被识别和过滤。
- 浏览器防护:现代浏览器通常内置了XSS过滤器,可以自动检测和阻止大部分反射型XSS攻击。
4. 攻击方式多样
- 构造恶意URL:攻击者可以构造包含恶意脚本参数的URL,并通过各种方式诱导用户点击。
- 结合其他漏洞:反射型XSS还可以与其他类型的漏洞(如SQL注入)结合使用,以增强攻击效果。
5. 危害范围有限
- 影响范围小:由于反射型XSS需要用户主动点击恶意链接才能触发,因此其影响范围相对有限。然而,如果攻击者能够大规模地发送恶意链接,那么其潜在危害也不容忽视。
- 窃取信息:尽管反射型XSS的危害范围有限,但它仍然可以用于窃取用户的敏感信息(如Cookie),进而实施进一步的攻击(如会话劫持)。
2)存储型
存储型XSS(Stored Cross-Site Scripting),又称持久型XSS,是一种基于服务器端存储的跨站脚本攻击方式。其特点主要体现在以下几个方面:
1. 持久性
- 长期存储:攻击者通过某种方式将恶意脚本注入到目标网站的数据库或文件系统中,这些恶意脚本会长期存储在服务器上。
- 持续影响:由于恶意脚本存储在服务器端,因此每次有用户访问受影响的页面时,恶意脚本都会被执行,从而持续影响用户。
2. 隐蔽性
- 难以察觉:存储型XSS的恶意脚本通常隐藏在正常的网页内容中,用户很难直接察觉其存在。
- 高隐蔽性:攻击者可以通过精心设计的攻击手段,使得恶意脚本在不被注意的情况下被执行,增加了攻击的隐蔽性。
3. 危害面广
- 影响范围大:由于恶意脚本存储在服务器端,并且会在用户访问页面时自动执行,因此所有访问该页面的用户都可能受到攻击。
- 多种危害:存储型XSS攻击可以窃取用户的敏感信息(如Cookie、会话令牌等),篡改网页内容,传播恶意软件等,对网站和用户的安全构成严重威胁。
4. 攻击方式多样
- 多种注入方式:攻击者可以通过表单提交、留言板、评论区等多种方式将恶意脚本注入到网站的数据库或文件系统中。
- 结合其他漏洞:存储型XSS还可以与其他类型的漏洞(如SQL注入、文件上传漏洞等)结合使用,以增强攻击效果。
5. 难以清除
- 清除难度大:由于恶意脚本存储在服务器端,因此清除起来相对困难。网站管理员需要定期检查并更新网站的安全防护措施,以防止存储型XSS攻击的发生。
- 需要全面检查:在清除存储型XSS攻击时,网站管理员需要对整个网站进行全面检查,确保所有受影响的页面都被修复。
3)DOM型
DOM型XSS(Document Object Model Cross-Site Scripting),即基于文档对象模型的跨站脚本攻击,是一种特殊的跨站脚本攻击方式。其特点主要体现在以下几个方面:
1. 客户端执行
- 不经过服务器:DOM型XSS的攻击脚本完全在客户端执行,不经过服务器端的任何处理。这意味着服务器端的日志和数据库可能无法记录到攻击的痕迹,增加了检测和追踪的难度。
2. 隐蔽性强
- 难以察觉:由于攻击发生在客户端,且服务器端的日志可能不记录任何异常,这使得DOM型XSS攻击更加隐蔽,难以被及时发现。
3. 动态内容相关
- 与DOM操作紧密相关:DOM型XSS攻击通常与网页的动态生成内容有关,特别是那些通过JavaScript等客户端脚本动态修改DOM结构的页面。攻击者可以利用这些动态内容中的漏洞,注入并执行恶意脚本。
4. 攻击方式多样
- 多种触发方式:DOM型XSS攻击可以通过多种方式触发,如URL参数、表单提交、事件触发(如点击按钮)等。攻击者可以根据目标网站的具体情况和漏洞点,选择合适的攻击方式。
5. 危害严重
- 窃取信息:恶意脚本被执行后,可以窃取用户的敏感信息,如Cookie、会话令牌等,进而实施进一步的攻击,如会话劫持。
- 篡改页面:攻击者还可以利用DOM型XSS攻击篡改页面内容,误导用户或进行钓鱼攻击。
6. 可能是持久型或非持久型
- 持久型与非持久型并存:DOM型XSS既可能是持久型攻击(如通过修改存储在服务器上的数据来持续影响用户),也可能是非持久型攻击(如通过诱导用户点击恶意链接来触发攻击)。这取决于攻击者如何利用DOM操作中的漏洞。
7. 防御难度大
- 需要客户端防护:由于DOM型XSS攻击发生在客户端,因此需要在客户端代码层面采取相应的安全措施来防止此类攻击。这包括对用户输入进行严格的验证和过滤、使用安全的DOM操作方法、设置Content Security Policy(CSP)等。
4)三种XSS的区别
1. 攻击方式
- 反射型XSS:攻击者将恶意脚本附加到URL地址的参数中,并诱导用户点击这些包含恶意代码的URL。当受害者点击链接时,恶意脚本会在受害者的浏览器上执行。
- 存储型XSS:攻击者将恶意脚本上传到服务器的数据库或文件中,并存储在服务器上。每当有用户访问包含这些恶意脚本的页面时,脚本就会自动执行。
- DOM型XSS:攻击者通过修改页面的DOM结构来执行恶意脚本,这些脚本不是通过服务器响应直接传送的,而是利用客户端的DOM操作来触发执行。
2. 持久性
- 反射型XSS:非持久化,恶意脚本只会在用户点击特定链接时执行一次,之后不会持续影响。
- 存储型XSS:持久化,恶意脚本被存储在服务器上,只要有用户访问包含这些脚本的页面,就会持续受到影响。
- DOM型XSS:持久性取决于攻击的具体方式。如果攻击者通过修改存储在服务器上的数据来触发DOM型XSS,那么它也具有持久性;但如果只是通过动态生成的页面内容来触发,那么它可能只是单次执行。
3. 隐蔽性
- 反射型XSS:由于恶意脚本直接暴露在URL中,因此相对容易被用户察觉和识别。然而,通过编码转换等技术手段,攻击者可以迷惑用户,增加隐蔽性。
- 存储型XSS:隐蔽性较高,因为恶意脚本被存储在服务器上,用户难以直接察觉其存在。
- DOM型XSS:隐蔽性也很高,因为攻击发生在客户端,且可能不会留下明显的服务器日志记录。此外,DOM型XSS攻击往往与页面的动态内容生成相关,增加了识别和防御的难度。
4. 影响范围
- 反射型XSS:影响范围相对较小,通常只针对点击了恶意链接的用户。
- 存储型XSS:影响范围广泛,因为恶意脚本存储在服务器上,所有访问包含这些脚本的页面的用户都可能受到攻击。
- DOM型XSS:影响范围取决于攻击的具体方式和目标页面的访问量。如果攻击者能够成功地修改大量页面的DOM结构并触发XSS攻击,那么其影响范围将非常广泛。
5. 防御难度
- 反射型XSS:相对容易防御,因为恶意脚本直接暴露在URL中,可以通过对URL的严格过滤和验证来防止攻击。
- 存储型XSS:防御难度较大,因为恶意脚本被存储在服务器上,需要对服务器端的输入和输出进行严格的验证和过滤。
- DOM型XSS:防御难度也较大,因为攻击发生在客户端,且可能与页面的动态内容生成紧密相关。需要采用综合的安全措施来防御DOM型XSS攻击,包括使用安全的DOM操作方法、设置CSP策略等。
二、fuzz字典
1)定义与作用
- 定义:Fuzz字典是一种包含大量测试数据的集合,这些数据以特定格式或规则组织,用于在模糊测试过程中自动或手动地输入到目标系统中,以检测其稳定性和安全性。
- 作用:
- 漏洞发现:通过向目标系统输入大量异常或随机的数据,Fuzz字典有助于发现潜在的漏洞和不稳定性。
- 安全评估:在软件安全评估过程中,Fuzz字典提供了一种高效的方法来测试系统的防御能力和响应机制。
- 自动化测试:结合自动化测试工具,Fuzz字典可以实现大规模的模糊测试,提高测试效率和覆盖率。
2)类型与生成
- 类型:
- 静态字典:预先定义好的一组测试数据,通常基于已知的漏洞模式或常见的数据格式。
- 动态字典:能够根据测试过程中的反馈自动调整或生成新的测试数据,以提高测试的针对性和效率。
- 生成:
- 手动创建:根据经验或已知漏洞模式手动编写Fuzz字典。
- 自动生成:利用专门的Fuzz字典生成工具,通过定义输入规则和变异策略来自动生成测试数据。
3)Fuzz字典生成工具
目前市面上存在多种Fuzz字典生成工具,它们各具特色,能够满足不同场景下的测试需求。以下是一些常见的Fuzz字典生成工具:
- FuzzDicts:一个开源项目,旨在为模糊测试提供高质量的词典资源。它支持多种字符集和变异策略,能够生成多样化的测试用例。
- FuzzDict:另一个基于Python的开源项目,专注于生成针对模糊测试的自定义字典。它支持自定义规则、内置多种词汇和混淆算法,适用于多种测试场景。
- 特定领域的工具:如针对文件上传漏洞的fuzz字典生成脚本(如upload-fuzz-dic-builder),这些工具通常针对特定类型的漏洞或测试场景进行优化。
4)使用注意事项
- 选择合适的工具:根据测试目标和场景选择合适的Fuzz字典生成工具。
- 定义明确的测试规则:在使用自动生成工具时,需要定义明确的输入规则和变异策略,以确保生成的测试数据具有针对性和有效性。
- 关注测试结果:及时分析测试结果,识别潜在的漏洞和不稳定性,并采取相应的修复措施。
*GitHub上的Fuzzing字典*
GitHub地址:TheKingOfDuck/fuzzDicts: Web Pentesting Fuzz 字典,一个就够了。 (github.com)
内容包括:参数Fuzz字典 Xss Fuzz字典 用户名字典 密码字典 目录字典 sql-fuzz字典 ssrf-fuzz字典 XXE字典 ctf字典 Api字典 路由器后台字典 文件后缀Fuzz js文件字典 子域名字典。
三、XSS靶场
网址:https://xss.tesla-space.com/
1)level 1
首先我们尝试修改url中level1.php?name后面的字段,可以发现画面发生了变化,图片下方的playload显示了该字段的总字长
然后我们查看该网页的源代码
根据源代码可知当有个弹窗就会执行函数,最后得到我们想要的“完成的不错”
输入:<script>alert(111)</script>
2)level 2
根据第一关经验先进行尝试
输入<script>alert(111)</script>后无效果
再次查看源代码
为了让弹窗出现可以闭合掉<script>alert(111)</script>前面的语句,完整的代码是:
<input name=keyword value=""><script>alert(111)</script>//">
即在查询框中输入:"><script>alert(111)</script>//
3)level 3
输入上个关卡的代码发现将<>
转换为了html实体
可以采用onfocus
事件进行绕过操作
' οnfοcus='alert(123)'
输入完成后,再次点击文本框
4)level 4
首先对上一关代码进行尝试,发现直接成功了
5)level 5
再次尝试上一关的方法
然后我们发现on被替换成了o_n
我们再用script进行尝试,发现也是一样的情况
此处既然无法通过 <script> 标签和事件来执行js代码的话,那么可以换一个标签来执行js代码,使用新标签要先闭合<input>标签。
"><a href="javascript:alert(1)">点击</a>
使用上面代码后发现出现了一个新的链接
点击链接后,出现弹窗
6)level 6
我们继续使用上一关代码可以发现
href被替换成了hr_ef,通过代码审计可以看出这个网页并没有实现将大小写的限制,所以可以采用转大写绕过。
"><a HREF="javascript:alert(1)">点击</a>
出现链接,完成关卡
*未完待续,持续更新*