XSS漏洞练习

第四次作业

任务一:反射型、存储型、DOM型XSS特点和区别

概念:

  • 存储型 XSS:存储型XSS又被称为持久性XSS,存储型XSS是最危险的一种跨站脚本漏洞,当攻击者提交一段 XSS代码后,被服务端接收并存储,当攻击者或用户再次访问某个页面时,这段XSS代码被程序读出来响应给浏览器,造成XSS跨站攻击,这便是存储型XSS。

  • 反射型 XSS:反射型XSS也被称为非持久性XSS,当用户访问一个带有XSS代码的HTML请求时,服务器端接收数据后处理,然后把带有XSS的数据发送到浏览器,浏览器解析这段带有XSS代码的数据后,就造成XSS漏洞,这个过程就像一次反射,所以叫反射型XSS。

  • DOM 型 XSS:不经过后端,DOM-based XSS漏洞是基于文档对象模Document object Model,DOM)的一种漏洞,dom-xss是通过url传入参数去控制触发的。
    注意:大体上只分为存储型XSS和反射型XSS,反射型XSS包括D0M型XSS

联系和区别:

  • 反射型XSS(Reflected XSS):特点:当用户浏览受感染网站时,攻击者构造的恶意脚本被反射回用户。通常是通过链接发送,用户点击链接后恶意内容即被执行。例子:在搜索引擎结果中输入恶意脚本。区别:不要求攻击者有网络服务器的控制,仅利用现有系统漏洞执行脚本。

  • 存储型XSS(Persistent XSS):特点:攻击者的恶意脚本被存储在目标服务器上,如数据库、消息论坛、访客留言板等。例子:用户可以在留言板上发布包含恶意脚本的评论,其他访问者浏览时会被感染。区别:需要攻击者控制目标服务器,一旦上传就可能在多个用户间传播。

  • DOM型XSS(Document Object Model XSS):特点:攻击者利用网站代码中的DOM解析漏洞执行恶意脚本。例子:恶意脚本在没有服务器交互的情况下直接在客户端执行。区别:不需要服务器参与内容存储,只依赖客户端浏览器的操作。

任务二:上网搜索一份XSS 的fuzz字典或字典生成工具

XSS的fuzz字典

  1. TheKingOfDuck/fuzzDicts:easyXssPayload/easyXssPayload.txt at master · TheKingOfDuck/easyXssPayload · GitHub

工具:

  1. TheKingOfDuck/fuzzDictsGitHub - TheKingOfDuck/fuzzDicts: Web Pentesting Fuzz 字典,一个就够了。

  1. fuzzdb-project/fuzzdbGitHub - fuzzdb-project/fuzzdb: Dictionary of attack patterns and primitives for black-box application fault injection and resource discovery.

任务三:靶场通关

网址https://xss.tesla-space.com/

LEVEL1

get型XSS

直接在URL上修改payload <script>alert(1)</script>

LEVEL2

POST型XSS

利用 <script>alert(1)</script>查看页面源代码的解析结果,发现插入的script标签被当作input的输入字符串。

于是可以将input标签闭合再插入script标签作XSS攻击

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

LEVEL3

插入script标签测试,发现被被当作了input字符串了

尝试level2的语句,发现value后的"与插入的"不一样

尝试单引号闭合,发现被实体化 &lt;

尝试利用input能支持的html事件

input属性支持以下HTML事件:

  1. onchange - 当用户改变输入字段的内容时触发
  2. oninput - 当用户在输入字段中输入内容时触发
  3. onfocus - 当输入字段获得焦点时触发
  4. onblur - 当输入字段失去焦点时触发
  5. onkeypress - 当用户按下键盘按键时触发(在输入字段中)
  6. onkeydown - 当用户按下键盘按键并保持按下状态时触发(在输入字段中)
  7. onkeyup - 当用户释放键盘按键时触发(在输入字段中)

成功,这里我使用的oninput事件:' oninput = javascript:alert(1) '

LEVEL4

测试,查看源代码

尝试闭合input标签,插入script标签

同LEVEL4思路一样,需要触发事件才能XSS攻击,这里我使用a标签的html事件

  • onclick:当鼠标点击链接时触发
  • onmouseover:当鼠标移到链接上时触发
  • onmouseout:当鼠标离开链接时触发
  • onfocus:当链接获得焦点时触发
  • onblur:当链接失去焦点时触发

"><a href="" onclick="alert('xss')">

LEVEL5

测试,查看源代码

看着好像和前两关一样,尝试使用input的事件

" oninput = javascript:alert(1) "

在源码中发现on被替换为了o_n

尝试大小写绕过,发现on和ON应该容易识别为小写

前面的事件中都是on事件触发的,而超链接标签本身是可被点击的,则直接构造超链接

"> <a href=javascript:alert()>1</a>

成功!

LEVEL6

测试

与前面的思路一样,尝试input的html事件

" oninput = javascript:alert(1) "

发现on被识别为o_n

尝试大小写绕过

" ONinput = javascript:alert(1) "

成功!

任务四:浏览器解析机制

  • HTML解析:浏览器在下载HTML文档后,开始解析文档。解析器将HTML文档转换为一个文档对象模型(DOM)树,该树结构表示了HTML文档的内容和结构。解析过程中会处理标签、属性和文本节点,确保生成正确的DOM结构。同时,解析器会根据遇到的元素(如<script><link>)来决定是否需要阻塞渲染,是否需要并行下载外部资源。
  • URL解析:浏览器在处理HTTP请求时,会解析URL以获取相应的资源URL包含多个部分,如协议(http/https)、主机、路径、查询参数(如%61%6c%65%72%74%28%32%29)等。解析过程中,浏览器会将其分解为这些成分,以构建请求。此外,URL解析还确保了在相对路径和绝对路径之间进行正确的处理。
  • JavaScript解析:JavaScript文件被下载后,浏览器会将其解析为抽象语法树(AST)。它会对标识符和字符串中的 Unicode 转义序列(如 \u0061\u006c\u0065\u0072\u0074(10);)进行解码。
  • 解析流: 当浏览器从⽹络堆栈中获得⼀段内容后,触发HTML解析器来对这篇⽂档进⾏词法解析。在这⼀步中字符引⽤被解码。在词法解析完成后,DOM树就被创建好了,JavaScript解析器会介⼊来对内联脚本进⾏解析。在这⼀步中Unicode转义序列和Hex转义序列被解码。同时,如果浏览器遇到需要URL的上下⽂,URL解析器也会介⼊来解码URL内容。在这⼀步中URL解码操作被完成。由于URL位置不同,URL解析器可能会在JavaScript解析器之前或之后进⾏解析。

解释《漏洞利用之XSS注入》中15条中,至少5条执行成功或不成功的原因

  1. 例2<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:%61%6c%65%72%74%28%32%29">
  • 执行
  • herf中含有html编码,先经过html解码得到:<a href="javascript:%61%6c%65%72%74%28%32%29">
  • href中为URL,URL模块可识别为 javascript 协议,进⾏URL解码,得到 :<a href="javascript:alert(2)">

  1. 例4<div>&#60;img src=x onerror=alert(4)&#62;</div>
  • 不执行
  • 里面包含了HTML编码,html编码就是在页面中显示这些内容,而不会创建一个img元素,即<div>中的内容被当作字符串显示在页面中。

  1. 例7<button onclick="confirm('7&#39;);">Button</button>
  • 执行
  • onclick内为标签的属性值,会被html解码

  1. 例11<script>\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)</script>
  • 不执行
  • 括号内额: \u0031\u0032会被解析为字符串,但是没有引号,会导致JS执行失败

  1. 例15<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x31;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x36;&#x33;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x35;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x32;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x34;&#x28;&#x31;&#x35;&#x29;"></a>
  • 执行
  • 根据解析流顺序,href中先通过HTML解码得到结果:<a href="javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(15)"></a>
  • 在href中由URL模块处理,解码得到 javascript:\u0061\u006c\u0065\u0072\u0074(15)
  • 识别JS协议,然后由JS模块处理,解码得到 javascript:alert(15)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值