day4 xss

1. 总结反射型、存储型、DOM型XSS特点和区别

1.反射型XSS的特点

1.触发方式:恶意的攻击脚本包含在 URL 中,只有当用户访问了包含恶意脚本的 URL,才会触发。

2.存储方式:反射型XSS的攻击脚本不会写入网站的数据库,是一次性的攻击。

2.存储型XSS的特点

1.触发方式:不需要用户主动点击链接,只要其他用户访问含有恶意脚本的页面,就会受到影响。

2.存储方式:存储型 XSS 会把攻击脚本提交到网站后台数据库(服务器端)。

3.DOM型XSS的特点

1.触发方式:攻击者通过操控网页中的DOM元素注入恶意脚本,攻击代码在用户的浏览器中执行,而不是通过服务器端处理。

2.存储方式:恶意脚本不会保存在数据库中和服务器中,而是注入在客户端的DOM元素中。

4.三种XSS的区别

反射型XSS存储型XSSDOM型XSS
触发方式访问包含恶意脚本的 URL访问含有恶意脚本的页面访问DOM元素注入恶意脚本的URL
存储方式不会写入网站的数据库,是一次性的攻击提交到网站后台数据库(服务器端)注入在客户端的DOM元素中
存储时间既有即用持久性既有即用
输入点搜索框留言DOM位置

2. 上网搜索一份XSS 的fuzz字典或字典生成工具(可选)

1.XSS的fuzz字典

fuzz字典下载地址(作者不定期更新中)

https://github.com/TheKingOfDuck/fuzzDicts

2.XSS的字典生成工具

XSStrike工具介绍

XSStrike是一款检测Cross Site Scripting的高级检测工具。它集成了payload生成器、爬虫和模糊引擎功能。XSStrike不是像其他工具那样注入有效负载并检查其工作,而是通过多个解析器分析响应,然后通过与模糊引擎集成的上下文分析来保证有效负载。除此之外,XSStrike还具有爬行,模糊测试,参数发现,WAF检测功能。它还会扫描DOM XSS漏洞。
项目地址:https://github.com/s0md3v/XSStrike

XSStrike工具安装

由于XSStrike只可以运行在python 3.6 以上版本,所以必须使用python3.6版本。

sudo apt-get install python3-pip
git clone https://github.com/s0md3v/XSStrike.git
pip3 install -r requirements.txt
chmod +x xsstrike.py

XSStrike帮助信息

在终端中输入 ./xsstrike.py -h 或 ./xsstrike.py --help

 

3. 到XSS挑战靶场打靶,要求通过5关以上,通关越多,加分越多。(https://xss.tesla-space.com/)

第一关

发现是反射型XSS(get),直接尝试输入一个payload<script>alert(1)</script>。

第二关

发现有一个表单提交框,再次尝试输入<script>alert(1)</script>,发现无法通过。

右键点击检查,查看前端代码。

针对搜索框检查代码,发现传输的恶意代码被当作字符串了,可以尝试闭合input标签,输入

"><script>alert(1)</script>。

成功通过

第三关

先输入123456,然后查看网站源码,这里是单引号闭合,试一下'> <script>alert()</script> <'。

继续检查前端代码,发现符号被html实体化了,我们还可以利用其他方法进行xss注入,这里我们可以利用onfocus事件绕过。

所以我们可以利用这个事件来绕过<>号的过滤已达到执行js的目的,构造payload

' οnfοcus=javascript:alert() '。

成功通过

第四关

查看一下网站源码,

这里是双引号闭合,<input>标签,所以我们还能继续利用onfocus事件,构建payload

" οnfοcus=javascript:alert() "

成功通过

第五关

查看一下网站源码

没发现什么异常,先试试" οnfοcus=javascript:alert() "。这里on被替换成了o_n。

过滤了js的标签还有onfocus事件,只能新找一个方法进行xss注入,这里我们用a href标签法

添加一个标签得闭合前面的标签,构建payload"> <a href=javascript:alert()>xxx</a> <"。

之后点击xxx,触发a标签href属性即可。

4. 总结浏览器解析机制,若不能理解,解释《漏洞利用之XSS注入》中15条中,至少5条执行成功或不成功的原因。(可选)

1.HTML解析

  • ⼀个HTML解析器作为⼀个状态机,它从输⼊流中获取字符并按照转换规则转换到另⼀种状态。在 解析过程中,任何时候它只要遇到⼀个'<'符号(后⾯没有跟'/'符号)就会进⼊“标签开始状态 (Tag open state)”。然后转变到“标签名状态(Tag name state)”,“前属性名状态(before attribute name state)”......最后进⼊“数据状态(Data state)”并释放当前标签的token。
  • 这⾥有三种情况可以容纳字符实体,“数据状态中的字符引⽤”,“RCDATA状态中的字符引 ⽤”和“属性值状态中的字符引⽤”。
  • 字符实体(character entities) 字符实体是⼀个转义序列,它定义了⼀般⽆法在⽂本内容中输⼊的单个字符或符号。⼀个字符实体 以⼀个&符号开始,后⾯跟着⼀个预定义的实体的名称,或是⼀个#符号以及字符的⼗进制数字。
  • HTML字符实体(HTML character entities)需要注意的是,某些字符没有实体名称,但可以有实体编号。⼀个HTML字符实体描述如下:
字符显示描述实体名称实体编号
<小于号&lt;&#60
  • 字符引⽤(character references)字符引⽤包括“字符值引⽤”和“字符实体引⽤”。'<'对应的字符值引⽤为'&#60',对应的字符实体引⽤为‘&lt’。字符实体引⽤也被叫做“实体引⽤”或“实体”。
  • 如果我们回头看HTML解析器的规则,其中有⼀种可以容纳字符引⽤的情况是“RCDATA状态中的 字符引⽤”。这意味着在“<textarea>”“<title>”标签中的字符引⽤会被HTML解析器解码。这⾥要再 提醒⼀次,在解析这些字符引⽤的过程中不会进⼊“标签开始状态”。所以在“<textarea>”和“<title>”的内容中不会创建标签,就不会有脚本能够执行。

2.URL解析

⾸先,URL资源类型必须是ASCII字⺟(U+0041-U+005A || U+0061-U+007A),不然就会进
⼊“⽆类型”状态。例如,你不能对协议类型进⾏任何的编码操作,不然URL解析器会认为它⽆类
型。

3.JavaScript 解析

所有的“script”块都属于“原始⽂本”元素。“script”块有 个有趣的属性:在块中的字符引⽤并不会被解析和解码。如果你去看“脚本数据状态”的状态转换 规则,就会发现没有任何规则能转移到字符引⽤状态。
  • 字符串中:当Unicode转义序列存在于字符串中时,它只会被解释为正规字符,⽽不是单引号,双 引号或者换⾏符这些能够打破字符串上下⽂的字符。这项内容清楚地写在ECMAScript中。因此, Unicode转义序列将永远不会破环字符串上下⽂,因为它们只能被解释成字符串常量。
  • 标识符名称中:当Unicode转义序列出现在标识符名称中时,它会被解码并解释为标识符名称的⼀ 部分,例如函数名,属性名等等。
  • 控制字符中:当⽤Unicode转义序列来表示⼀个控制字符时,例如单引号、双引号、圆括号等等,它 们将不会被解释成控制字符,⽽仅仅被解码并解析为标识符名称或者字符串常量。如果你去看 ECMAScript的语法,就会发现没有⼀处会⽤Unicode转义序列来当作控制字符。例如,如果解析 器正在解析⼀个函数调⽤语句,圆括号部分必须为“(”和“)”,⽽不能是\u0028和\u0029。
总的来说,Unicode转义序列只有在标识符名称⾥不被当作字符串,也只有在标识符名称⾥的编码
字符能够被正常的解析。unicode不可以对特殊符号进行编码,例如:' " \n。

4.解析流

当浏览器从⽹络堆栈中获得⼀段内容后,触发HTML解析器来对这篇⽂档进⾏词法解析。在这⼀步
中字符引⽤被解码。在词法解析完成后,DOM树就被创建好了,JavaScript解析器会介⼊来对内
联脚本进⾏解析。在这⼀步中Unicode转义序列和Hex转义序列被解码。同时,如果浏览器遇到需
要URL的上下⽂,URL解析器也会介⼊来解码URL内容。在这⼀步中URL解码操作被完成。由于
URL位置不同,URL解析器可能会在JavaScript解析器之前或之后进⾏解析。HTML解析器总是第一位,后面两者顺序依情况而定
  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值