在测试反射型和存储型XSS时,一项关键任务就是识别XSS所在的环境:
●响应中出现攻击者可控数据的位置。
●应用程序对该数据执行的任何输入验证或其他处理。
根据这些详细信息,可以选择一个或多个候选XSS的Payload,并测试它们是否有效。
HTML标签之间的XSS
当XSS的上下文环境是HTML标签之间的文本时,我们需要引入一些旨在触发JavaScript执行的新HTML标签。
执行JavaScript的一些有用方法是:
场景试验-在大多数标签和属性被阻止的环境下将XSS反射到HTML环境中:
https://portswigger.net/web-security/cross-site-scripting/contexts/lab-html-context-with-most-tags-and-attributes-blocked
场景说明:
这个试验场景在搜索功能中包含反射型XSS漏洞,但使用了WAF来防止常见的XSS向量。
试验目的:
要完成这个试验,需要绕开WAF并调用print()函数来进行跨站脚本攻击。
攻击过程:
①在搜索区域输入一个注入Payload,比如下面这句话,可以发现被阻拦了:
<img src=1 onerror=print()>
②接下来利用Burp通过自动化的方式来侦测看哪些标签和事件可以绕过WAF,因为要利用字典,这里我们直接使用试验场景提供的“XSS备忘录”,链接如下:
https://portswigger.net/web-security/cross-site-scripting/cheat-sheet
③把搜索的这个请求发送给Intruder,在"Positions"选项卡中先清除所有变量,把serach参数后面的值换成<>,并在两个尖括号增加变量
④在“XSS备忘录”中点击"Copy tags to clipboard"把所有标签字典复制到Intruder的"Payloads"选项卡中,随后点击"Start attack"
⑤从结果可以看到,"body"标签返回了200 OK,说明这个标签可以绕过WAF的防护
⑥接下来继续判断在这个标签下可绕过的事件,修改下"Positions"选项卡search参数后面的值为<body%20=1>,并在等号前面增加变量,变为如下格式:
<body%20§§=1>
⑦在“XSS备忘录”中点击"Copy events to clipboard"把所有标签字典复制到Intruder的"Payloads"选项卡中,随后点击"Start attack"
⑧从结果可以看到,只有"onresize"事件返回了200 OK,说明这个事件可以绕过WAF的防护
⑨打开"exploit server",在内容中构造如下Payload,注意替换下试验域名,点击"Store"后发送给受害者即可完成试验
<iframe src="https://your-lab-id.web-security-academy.net/?search=%22%3E%3Cbody%20onresize=print()%3E" onload=this.style.width='100px'>
场景试验-除自定义标签外,所有标签均被阻止的情况下将XSS反射到HTML环境中:
https://portswigger.net/web-security/cross-site-scripting/contexts/lab-html-context-with-all-standard-tags-blocked
场景说明:
这个试验场景阻止除自定义标签之外的所有HTML标签。
试验目的:
要完成这个试验,需要执行自定义标签并进行dcoument.cookie的跨站脚本攻击。
攻击过程:
①这个试验的过程还是比较简单的,因为所有标签都被过滤了,因此我们在"exploit server"构建如下语句的Payload:
<script>
location = 'https://your-lab-id.web-security-academy.net/?search=%3Cxss+id%3Dx+onfocus%3Dalert%28document.cookie%29%20tabindex=1%3E#x';
</script>
②保存后发送给受害者即可完成试验。
试验小结:
上面这个注入会创建一个ID为x的自定义标签,其中包含一个触发警报功能的onfocus事件处理程序,而URL末尾的hash会在页面加载后立即跳转到此元素,从而调用报警Payload。
上面这个经过了URL编码,还原后关键语句其实是这样的:
<xss id=x onfocus=alert(document.cookie) tabindex=1>#x
场景试验-带有事件处理程序和href属性的反射型XSS被阻止:
https://portswigger.net/web-security/cross-site-scripting/contexts/lab-event-handlers-and-href-attributes-blocked
场景说明:
这个试验场景包含一个反射型XSS漏洞,其中包含一些列入白名单的标签,但所有事件和锚点href属性都被阻止。
试验目的:
要完成这个试验,需要执行跨站脚本攻击,该攻击会注入一个向量,单击该向量会调用alert()函数。注意,需要使用"Click"来标记向量,以诱导模拟试验室用户点击向量,比如下面这句:
攻击过程:
①因为无法使用事件,因此在这里尝试使用SVG来的方式来触发脚本,在URL中构造下面语句即可:
https://your-lab-id.web-security-academy.net/?search=%3Csvg%3E%3Ca%3E%3Canimate+attributeName%3Dhref+values%3Djavascript%3Aalert(1)+%2F%3E%3Ctext+x%3D20+y%3D20%3EClick%20me%3C%2Ftext%3E%3C%2Fa%3E
②上面这个URL在浏览器中访问即可完成试验
试验小结:
上面这段是URL编码,解码后的语句如下:
<svg><a><animate attributeName=href values=javascript:alert(1) /><text x=20 y=20>Click me</text></a>
利用svg可以执行脚本的特性,在其中插入JS脚本,并生成为一个可点击的链接,当受害者点击链接时,就会执行脚本。
场景试验-允许有一些SVG标记的反射型XSS:
https://portswigger.net/web-security/cross-site-scripting/contexts/lab-some-svg-markup-allowed
场景说明:
这个试验场景包含一个简单的反射型XSS漏洞,这个站点阻止了常用标签,但错过了一些SVG标签和事件。
试验目的:
要完成这个试验,需要执行调用alert()函数的跨站脚本攻击。
攻击过程:
①采用跟本篇第一个场景一样的方式,先来判断下哪些标签可以,从返回的结果是200可以判断能用的标签是4个
②继续判断可用的事件,修改下参数search后面的参数,变量放在等号前面,可以发现有一个事件可注入:
<svg><animatetransform%20§§=1>
③利用"onbegin"事件构造一条注入语句(注意替换下URL中试验地址),在浏览器中运行,出现弹框即可完成试验
https://your-lab-id.web-security-academy.net/?search="><svg><animatetransform onbegin=alert(1)>
SQL注入攻击-检索隐藏的数据
HTTP Host头漏洞攻击-概念梳理
原文始发于微信公众号(H君网安白话):跨站脚本攻击XSS-识别XSS环境(一)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论