在测试反射型和存储型XSS时,一项关键任务就是识别XSS所在的环境:
●响应中出现攻击者可控数据的位置。
●应用程序对该数据执行的任何输入验证或其他处理。
根据这些详细信息,可以选择一个或多个候选XSS的Payload,并测试它们是否有效。
HTML标签属性中的XSS
当XSS的环境进入HTML标记属性值时,我们有时可能可以终止属性值、关闭原有标记并引入新标记,例如:
在这种情况下,更常见的是尖括号被阻止或编码,因此我们的输入无法脱离标签。如果可以终止属性值,则通常可以引入一个新属性来创建可编写脚本的环境,例如事件处理程序。例如:
上面的Payload创建了一个onfocus事件,当元素接收到焦点时将执行JavaScript,并且还添加了autofocus属性以尝试在没有任何用户交互的情况下自动触发onfocus事件。最后,添加x="用来修复一下标记。
场景试验-将反射型XSS到带有尖括号HTML编码的属性中:
https://portswigger.net/web-security/cross-site-scripting/contexts/lab-attribute-angle-brackets-html-encoded
场景说明:
这个试验场景在搜索博客功能中包含一个反射型跨站脚本漏洞,其中尖括号是HTML编码的。
试验目的:
要完成这个试验,需要执行注入属性并调用alert()的跨站脚本攻击。
攻击过程:
①在搜索框中输入随机字符串"123456",查看下响应包,可以发现随机字符串在带引号的属性内
②构造下Payload,先将前面的引号关闭,再另外构造个鼠标移动的事件,填入搜索栏
"onmouseover="alert(1)
③点击"Search",每次移动鼠标时会出现弹框,即可完成试验。
场景试验-将存储型XSS到带有尖括号HTML编码的锚点href属性中:
https://portswigger.net/web-security/cross-site-scripting/contexts/lab-href-attribute-double-quotes-html-encoded
场景说明:
这个试验场景在评论功能中包含一个存储型跨站脚本漏洞。
试验目的:
要完成这个试验,需要提交一个评论,当点击评论作者姓名时调用alert()功能。
攻击过程:
①在评论区的"Website"中提交个随机字符串
②再次访问这条微博,可以看到响应中在锚点href属性中存在前面那个随机字符串,也就是点进去后会进行页面跳转
③再提交一次评论,但在"Website"中填写下面的Payload,用来注入alert()
javascript:alert(1)
④当点击这条评论的头像时,即会出现弹框,完成试验。
试验小结:
有时XSS的所在环境是一种HTML标记属性,本身就可以创建可编写的脚本。所以在这个位置,可以直接执行JavaScript而无需终止属性值。试验场景中的锚标记href属性就可以使用JavaScript协议执行脚本。
场景试验-在规范链接标签中反射XSS
https://portswigger.net/web-security/cross-site-scripting/contexts/lab-canonical-link-tag
场景说明:
这个试验场景在规范链接标签中返回用户输入并转义尖括号。
试验目的:
要完成这个试验,需要在主页上执行跨站脚本攻击,通过该攻击注入一个alert()属性。同时假设模拟用户会按下以下组合键:
ALT+SHIFT+X
CTRL+ALT+X
ALT+X
攻击过程:
①打开页面后,在URL中直接输入下面的Payload链接,注意替换下试验地址
https://your-lab-id.web-security-academy.net/?'accesskey='x'onclick='alert(1)
②这个URL会将X键设置为整个页面的访问键,当用户按下访问键时,将调用alert功能,完成本试验。
试验小结:
这个场景的尖括号都被转义了,但利用标签也可以进行注入。Accesskey属性允许定义一个字母,当与其他键组合按下时就会触发事件。
将XSS转化为JavaScript-终止现有脚本
当XSS环境是响应中的一些现有JavaScript时,可能会出现各种各样的情况,需要使用不同的技术来对漏洞进行利用。
在最简单的情况下,可以简单地关闭包含现有JS的脚本标签,并引入一些触发JS执行的新HTML标签。
例如,如果XXS环境如下:
可以使用下面的Payload来实现突破JavaScript并执行自己的JS:
浏览器首先执行HTML解析以识别页面元素,包括脚本快,然后才执行JavaScript解析以执行嵌入的脚本。上面的Payload使原始脚本损坏,带有未终止的字符串文字,但这并不妨碍后续脚本以正常方式解析和执行。
场景试验-带有单引号和反斜杠的JS字符串中进行反射型XSS:
https://portswigger.net/web-security/cross-site-scripting/contexts/lab-javascript-string-single-quote-backslash-escaped
场景说明:
这个试验场景在搜索查询跟踪功能中包含一个反射型的跨站脚本漏洞。反射发生在带有引号和反斜杠的JS字符串中。
试验目的:
要完成这个试验,需要执行跨站脚本攻击,该攻击会破坏JS字符串并调用alert()函数。
攻击过程:
①在搜索栏中输入个随机字符串,并点击"Serach"
②调用开发人员模式,检索下上面这个字符串,可以看到在其中一个JS中可以找到
③在搜索框中再次输入下面的Payload,将<script>标签先关闭后再执行另一个脚本
</script><imgsrc=1 onerror=alert(1)>
④再次点击"Serach",会出现注入的弹框,完成本试验
试验小结:
再次调用开发人员模式,可以看到上面的脚本虽然有错误不能执行,但是已经被闭环了,JS会继续执行下面的弹窗脚本
SQL注入攻击-检索隐藏的数据
HTTP Host头漏洞攻击-概念梳理
原文始发于微信公众号(H君网安白话):跨站脚本攻击XSS-识别XSS环境(二)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论