1. 总结反射型、存储型、DOM型XSS特点和区别
XSS(跨站脚本攻击,Cross Site Scripting)是一种网络安全漏洞,攻击者通过向网页中注入恶意脚本来实现对用户浏览器的控制。XSS攻击主要可以分为反射型、存储型和DOM型三种,它们各自具有不同的特点和区别。
反射型XSS(Reflected XSS)
特点:
1. 非持久性:反射型XSS的攻击载荷(payload)不会存储在目标服务器上,而是通过URL参数、表单字段或HTTP头等方式传送到受害者的浏览器并执行。
2. 一次性:攻击只在用户点击或触发特定链接时发生,一旦页面被关闭或链接被移除,攻击即失效。
3. 前端执行:恶意脚本在受害者的浏览器上执行,不需要服务器端的解析或处理。
危害:反射型XSS可以窃取用户的敏感信息(如cookie、会话令牌等),或者伪装成用户在目标网站上执行操作,如发送虚假请求。
存储型XSS(Stored XSS)
特点:
1. 持久性:攻击脚本被永久地存放在目标服务器的数据库或文件中,因此可以长期对访问该页面的用户进行攻击。
2. 隐蔽性高:由于攻击脚本存储在服务器上,攻击者可以轻易地对多个用户发起攻击,且不易被发现。
3. 危害面广:存储型XSS可能导致用户机器成为DDoS攻击的肉鸡,或者泄露大量用户的敏感信息。
危害:存储型XSS的危害性远高于反射型XSS,因为它能够持续地对多个用户发起攻击,且攻击效果更加隐蔽和持久。
DOM型XSS(DOM-based XSS)
特点:
1. 客户端执行:DOM型XSS完全在客户端执行,不涉及服务器端的任何改变。因此,它的攻击效果取决于客户端浏览器的解析和执行能力。
2. 隐蔽性强:由于攻击发生在客户端,服务器端的日志可能不会记录任何异常,这使得检测和追踪变得更加困难。
3. 动态内容相关:攻击通常与网页的动态生成内容有关,如JavaScript生成的内容。
危害:DOM型XSS可以窃取用户的敏感信息、修改页面内容或进行其他恶意活动,但由于其隐蔽性强且难以检测,因此危害性也不容忽视。
区别总结
反射型、存储型和DOM型XSS之间的主要区别体现在攻击方式、持久性、存储位置以及它们对受害者和系统的影响上。以下是它们之间区别的详细概述:
a.攻击方式
-反射型XSS:攻击者通过构造包含恶意脚本的URL,诱骗受害者点击或访问该URL。当受害者点击链接时,恶意脚本会被发送到受害者的浏览器,并在浏览器中执行。这种攻击方式依赖于受害者的直接交互。
-存储型XSS:攻击者将恶意脚本注入到目标网站的数据库中,如用户评论、论坛帖子或博客文章等。一旦恶意脚本被存储,每当其他用户访问包含该脚本的页面时,恶意脚本就会自动执行,而无需受害者的直接交互。
-DOM型XSS:这种攻击发生在客户端,通过修改页面的DOM(文档对象模型)来执行恶意脚本。攻击者可以利用JavaScript等客户端脚本语言来动态地修改页面内容,从而插入恶意脚本。DOM型XSS通常与页面的动态内容生成有关,如通过JavaScript读取URL参数并插入到页面中。
b.持久性
-反射型XSS:非持久性。恶意脚本不会存储在服务器上,而是通过URL等方式即时传递给受害者。一旦页面关闭或链接失效,攻击即停止。
-存储型XSS:持久性。恶意脚本被永久存储在服务器上,可以长期对访问该页面的用户进行攻击。
-DOM型XSS:虽然DOM型XSS本身不涉及服务器端的存储,但如果攻击者能够控制服务器上的某些动态内容生成逻辑(例如,通过注入到服务器端的代码),那么它也可以间接地实现持久性攻击。然而,在大多数情况下,DOM型XSS是即时发生的,不依赖于服务器端的存储。
c.存储位置
-反射型XSS:不存储在服务器上。
-存储型XSS:存储在服务器上的数据库或文件中。
-DOM型XSS:不直接存储在服务器上,但可能通过修改服务器上的动态内容生成逻辑来间接影响。
d.影响和危害
-反射型XSS:虽然影响范围相对较小(通常只针对点击了恶意链接的受害者),但它仍然可以窃取受害者的敏感信息、进行钓鱼攻击或执行其他恶意操作。
-存储型XSS:由于恶意脚本存储在服务器上,因此可以长期对多个用户进行攻击。这种攻击方式的影响范围更广,危害也更大。
-DOM型XSS:DOM型XSS的影响取决于攻击的具体方式和目标。它可以用来窃取用户的敏感信息、修改页面内容、进行钓鱼攻击等。由于DOM型XSS发生在客户端,因此它可能更难被检测和防御。
2. 上网搜索一份XSS的fuzz字典或字典生成工具(可选)GitHub - oldboot/FuzzDicts: FuzzDicts 字典,一个就够了。FuzzDicts 字典,一个就够了。. Contribute to oldboot/FuzzDicts development by creating an account on GitHub.
https://github.com/oldboot/FuzzDicts
XSS的fuzz字典
https://github.com/TheKingOfDuck/easyXssPayload/blob/master/easyXssPayload.txt
参数Fuzz字典
https://github.com/TheKingOfDuck/fuzzDicts/blob/master/paramDict/parameter.txt
字典生成工具:探索(dictBuilder)
GitHub - he1m4n6a/dictBuilder: 渗透测试中字典生成工具
是一个开源项目字典生成和字典整理工具,生成基于姓名关联的字典、爆破字典等,后渗透阶段方便对数据进行筛选、整理。
技术分析
1. Python 编程语言
dictBuilder 基于 Python 开发,这是一种广泛使用的高级编程语言,以其简洁明了的语法和丰富的第三方库资源而闻名。这使得项目易于理解和扩展,即使对于初学者来说,也能快速上手。
2. JSON 输入配置
通过 JSON 格式定义词典结构,你可以轻松地指定词汇来源、分类及每个条目的详细信息。JSON 是一种通用的数据交换格式,易于人读和机器解析,提供了极大的灵活性。
3. 数据抓取与处理
dictBuilder 内置了网络请求功能,可以方便地从 Web API 或网页中获取数据。它还支持对文本数据进行预处理(如清洗、分词),为构建高质量的词典提供了便利。
4. 可扩展性
项目设计为模块化,允许添加新的数据源或处理函数,以适应不同的词汇生成任务。这意味着 dictBuilder 不仅仅是一个工具,也可以作为一个框架进行二次开发。
应用场景
语言学习:创建个性化的单词列表,根据你的进度和兴趣定制学习材料。
自然语言处理:构建语料库,用于训练 NLP 模型。
数据分析:提取特定领域的术语,为研究提供基础数据。
软件本地化:生成软件翻译字典,加速多语言版本的开发。
特点
易用性:只需简单配置 JSON 文件,即可启动词典生成流程。
自定义性强:支持多种数据源,自由定制词典结构和内容。
效率高:并行处理大量数据,减少了生成大词典的时间。
可扩展性:根据需要编写插件,增强功能。
开源:自由使用,贡献代码,共同改进项目。
3. 到XSS挑战靶场打靶,要求通过5关以上,通关越多,加分越多。(https://xss.tesla-space.com/)
第一关
注意到url中存在name参数,并且name参数的名字会显示在页面上。
我们自然可以想到我们可以通过控制name参数来改变页面的显示。因此,将name参数设置为可以出发xss漏洞的形式:url?name=<script>alert()</script>
成功通过
第二关
发现页面如下所示
在搜索框里的内容,显示到了页面上,但是如果使用第一关的payload,则结果如下所示:
从上图中可以发现,我们的payload尽管显示到了页面上,但是没有作为JavaScript代码被执行。可以查看源代码,结果如下所示:
入的左尖括号和右尖括号,被后台进行了过滤,因此无法被当成JavaScript代码来执行。但是,我们同样注意到,在页面中我们还有一个input输入框,这里同样会显示我们输入的内容,下面让我们尝试根据这个input输入框的结构,来构造payload,显然,我们只需要闭合前面的双引号,即可构造除合适的payload,构造出的payload如下所示:"> <script>alert()</script> <",成功通过
第三关
先按照第二关的payload进行尝试,发现不能成功
查看源码如下所示:
从上图中,可以发现在符号也被实体化了,因此无法显示。我们考虑换一个思路,还可以利用其他方法进行xss注入,这里可以利用onfocus事件绕过。
所以我们可以利用这个事件来绕过<>号的过滤已达到执行js的目的,构造payload:' οnfοcus=javascript:alert() '
点击搜索框,触发onfocus事件即可,成功通过
第四关
查看网站源码
这里是双引号闭合,<input>标签,所以还能继续利用onfocus事件,构建payload:
" οnfοcus=javascript:alert() "
成功通过
第五关
先查看一下源码
先按照上一关的payload进行尝试,发现不能成功
再看一下这关的源码,这里on被替换成了o_n,
用a href标签法
href属性的意思是 当标签<a>被点击的时候,就会触发执行转跳,上面是转跳到一个网站,我们还可以触发执行一段js代码。
添加一个标签得闭合前面的标签,构建payloa:"> <a href=javascript:alert()>xxx</a> <"
之后点击xxx,触发a标签href属性即可。成功通过
4. 总结浏览器解析机制,若不能理解,解释《漏洞利用之XSS注入》中15条中,至少5条执行成功或不成功的原因。(可选)
浏览器解析机制总结
浏览器的解析机制主要涉及到对接收到的HTML、CSS、JavaScript等资源的处理过程。当用户在浏览器中输入URL并发送请求时,浏览器会执行以下主要步骤:
1. URL解析与缓存检查:浏览器首先解析URL,识别协议、域名、端口和路径等信息。然后,浏览器会检查本地缓存(如浏览器缓存、系统缓存、ISP缓存等)中是否已有对应资源的副本。如果找到且资源未过期,则直接从缓存中加载资源,以节省时间和带宽。
2. DNS解析:如果本地缓存中没有找到所需资源,浏览器会进行DNS查询,以获取域名对应的IP地址。DNS查询可能涉及多个DNS服务器,最终找到目标服务器的IP地址。
3. 建立连接与发送请求:浏览器使用解析得到的IP地址建立与服务器的TCP连接,并发送HTTP请求。
4. 服务器响应:服务器处理请求后,向浏览器发送HTTP响应,包括状态码、响应头和响应体(HTML、CSS、JavaScript等资源)。
5. 内容解析与渲染:浏览器接收到响应后,开始解析HTML文档。在解析过程中,浏览器会按照HTML文档的结构构建DOM树,并根据CSS样式信息构建渲染树。同时,浏览器会解析并执行JavaScript代码,这些代码可以修改DOM树和渲染树,从而影响页面的最终呈现。
6. 页面渲染:最后,浏览器根据渲染树将页面渲染到屏幕上,用户可以看到最终的页面效果。
《漏洞利用之XSS注入》中部分条目执行成功或不成功的原因
1. <a href="javascript:alert(1)">Click me</a>:执行成功。因为`<a>`标签的`href`属性支持JavaScript伪协议,可以直接执行JavaScript代码。
2. <img src="x" οnerrοr="alert(1)">:执行成功。当图片资源无法加载时(如`src="x"`),`onerror`事件会被触发,并执行其中的JavaScript代码。
3. <script>alert(1)</script>:执行成功。`<script>`标签用于嵌入JavaScript代码,浏览器会直接解析并执行其中的代码。
4. <a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29">Click me</a>**:执行不成功。虽然URL中的JavaScript代码被URL编码了,但`<a>`标签的`href`属性不支持直接执行JavaScript伪协议(尤其是当协议部分也被编码时),且浏览器通常不会解码并执行这类URL。
5. <textarea><script>alert(1)</script></textarea>:执行不成功。`<textarea>`元素内的内容被视为纯文本,浏览器不会解析其中的HTML或JavaScript代码。因此,即使包含了`<script>`标签,其中的代码也不会被执行。