XSS过滤绕过速查表(2)
时间:2019-09-05 16:39 来源:网络整理 作者:采集插件 点击:次
一些网站声称09到13(十进制)的HTML实体字符都可以实现这种攻击,这是不正确的。只有09(TAB),10(换行)和13(回车)有效。查看ASCII字符表获取更多细节。下面几个XSS示例介绍了这些向量。 2.24. 内嵌回车分隔XSS攻击代码 注意:上面使用了比实际需要长的字符串是因为0可以忽略。经常可以遇到过滤器解码十六进制和十进制编码时认为只有2到3位字符。实际规则是1至7位字符: 2.25. 使用空字符分隔Java指令 空字符同样可以作为XSS攻击向量,但和上面有所区别,你需要使用一些例如Burp工具或在URL字符串里使用%00,亦或你想使用VIM编写自己的注入工具(^V^@会生成空字符),还可以通过程序生成它到一个文本文件。老版本的Opera浏览器(例如Windows版的7.11)还会受另一个字符173(软连字符)的影响。但是空字符%00更加有用并且能帮助绕过真实世界里的过滤器,例如这个例子里的变形: 2.26. 利用IMG标签中Java指令前的空格和元字符 如果过滤器不计算”java:”前的空格,这是正确的,因为它们不会被解析,但这点非常有用。因为这会造成错误的假设,就是引号和”java:”字样间不能有任何字符。实际情况是你可以插入任何十进制的1至32号字符: 2.27. 利用非字母非数字字符 FireFox的HTML解析器认为HTML关键词后不能有非字母非数字字符,并且认为这是一个空白或在HTML标签后的无效符号。但问题是有的XSS过滤器认为它们要查找的标记会被空白字符分隔。例如” 基于上面的原理,可以使用模糊测试进行扩展。Gecko渲染引擎允许任何字符包括字母,数字或特殊字符(例如引号,尖括号等)存在于事件名称和等号之间,这会使得更加容易绕过跨站脚本过滤。注意这同样适用于下面看到的重音符: Yair Amit让我注意到了IE和Gecko渲染引擎有一点不同行为,在于是否在HTML标签和参数之间允许一个不含空格的斜杠。这会非常有用如果系统不允许空格的时候。 2.28. 额外的尖括号 由Franz Sedlmaier提交,这个XSS攻击向量可以绕过某些检测引擎,比如先查找第一个匹配的尖括号,然后比较里面的标签内容,而不是使用更有效的算法,例如Boyer-Moore算法就是查找整个字符串中的尖括号和相应标签(当然是通过模糊匹配)。双斜杠注释了额外的尖括号来防止出现Java错误: 2.29. 未闭合的标签 在Firefox和Netscape 8.1的Gecko渲染引擎下你不是必须构造类似“>”的跨站脚本攻击向量。Firefox假定闭合HTML标签是安全的并且会为你添加闭合标记。多么体贴!不像不影响Firefox的下一个问题,这不需要在后面有额外的HTML标签。如果需要可以添加引号,但通常是没有必要的,需要注意的是,我并不知道这样注入后HTML会什么样子结束: 2.30. 标签中的协议解析 这个特定的变体是由Łukasz Pilorz提交的并且基于Ozh提供的协议解析绕过。这个跨站脚本示例在IE和Netscape的IE渲染模式下有效,如果添加了标记在Opera中也可以。这在输入空间有限的情况下是非常有用的,你所使用的域名越短越好。”.j”是可用的,在标签中不需要考虑编码类型因为浏览器会自动识别。 2.31. 只含左尖括号的HTML/Java XSS向量 IE渲染引擎不像Firefox,不会向页面中添加额外数据。但它允许在IMG标签中直接使用java。这对构造攻击向量是很有用的,因为不需要闭合尖括号。这使得有任何HTML标签都可以进行跨站脚本攻击向量注入。甚至可以不使用”>”闭合标签。注意:这会让HTML页面变得混乱,具体程度取决于下面的HTML标签。这可以绕过以下NIDS正则:/((\%3D)|(=))[^\n]*((\%3C)|<)[^\n]+((\%3E)|>)/因为不需要”>”闭合。另外在实际对抗XSS过滤器的时候,使用一个半开放的 2.32. 多个左尖括号 使用一个左尖括号替代右尖括号作为标签结尾的攻击向量会在不同浏览器的Gecko渲染引擎下有不同表现。没有左尖括号时,在Firefox中生效,而在Netscape中无效。 2.33. Java双重转义 当应用将一些用户输入输出到例如:的Java中时,你想注入你的Java脚本,你可以通过转义转义字符来规避服务器端转义引号。注入后会得到,这时双引号不会被转义并且可以触发跨站脚本攻击向量。XSS定位器就用了这种方法: 另一种情况是,如果内嵌数据进行了正确的JSON或Java转义,但没有HTML编码,那可以结束原有脚本块并开始你自己的: 2.34. 闭合title标签 这是一个简单的闭合标签的XSS攻击向量,可以包含恶意的跨站脚本攻击:</p> </p> </p> 2.35. INPUT image 2.36. BODY image 2.37. IMG Dynsrc 2.38. IMG lowsrc 2.39. List-style-image 处理嵌入的图片列表是很麻烦的问题。由于Java指令的原因只能在IE渲染引擎下有效。不是一个特别有用的跨站脚本攻击向量: 2.40. 图片中引用VB 2.41. Live (仅限旧版本Netscape) 2.42. SVG对象标签 2.43. ECMA 6 2.44. BODY标签 这个方法不需要使用任何例如”java:”或” 2.45. 事件处理程序 在XSS攻击中可使用以下事件(在完稿的时候这是网上最全的列表了)。感谢ReneLedosquet的更新。 1. FSCommand() (攻击者当需要在嵌入的Flash对象中执行时可以使用此事件) 2. onAbort() (当用户中止加载图片时) 3. onActivate() (当对象激活时) 4. onAfterPrint() (用户打印或进行打印预览后触发) 5. onAfterUpdate() (从数据源对象更新数据后由数据对象触发) 6. onBeforeActivate() (在对象设置为激活元素前触发) 7. onBeforeCopy() (攻击者在选中部分拷贝到剪贴板前执行攻击代码-攻击者可以通过执行execCommand(“Copy”)函数触发) 8. onBeforeCut() (攻击者在选中部分剪切到剪贴板前执行攻击代码) 9. onBeforeDeactivate() (在当前对象的激活元素变化前触发) 10. onBeforeEditFocus() (在一个包含可编辑元素的对象进入激活状态时或一个可编辑的对象被选中时触发) 11. onBeforePaste() (在用户被诱导进行粘贴前或使用execCommand(“Paste”)函数触发) 12. onBeforePrint() (用户需要被诱导进行打印或攻击者可以使用print()或execCommand(“Print”)函数). 13. onBeforeUnload() (用户需要被诱导关闭浏览器-除非从父窗口执行,否则攻击者不能关闭当前窗口) 14. onBeforeUpdate() (从数据源对象更新数据前由数据对象触发) 15. onBegin() (当元素周期开始时由onbegin 事件立即触发) 16. onBlur() (另一个窗口弹出当前窗口失去焦点时触发) 17. onBounce() (当marquee对象的behavior属性设置为“alternate”且字幕的滚动内容到达窗口一边时触发) 18. onCellChange() (当数据提供者的数据变化时触发) 19. onChange() (select,text, 或TEXTAREA字段失去焦点并且值发生变化时触发) 20. onClick() (表单中点击触发) 21. onContextMenu() (用户需要在攻击区域点击右键) 22. onControlSelect() (当用户在一个对象上创建控件选中区时触发) 23. onCopy() (用户需要复制一些东西或使用execCommand(“Copy”)命令时触发) 24. onCut() (用户需要剪切一些东西或使用execCommand(“Cut”)命令时触发) 25. onDataAvailable() (用户需要修改元素中的数据,或者由攻击者提供的类似功能) 26. onDataSetChanged() (当数据源对象变更导致数据集发生变更时触发) 27. onDataSetComplete() (数据源对象中所有数据可用时触发) 28. onDblClick() (用户双击一个表单元素或链接) 29. onDeactivate() (在激活元素从当前对象转换到父文档中的另一个对象时触发) 30. onDrag() (在元素正在拖动时触发) 31. onDragEnd() (当用户完成元素的拖动时触发) 32. onDragLeave() (用户在拖动元素离开放置目标时触发) 33. onDragEnter() (用户将对象拖拽到合法拖曳目标) 34. onDragOver() (用户将对象拖拽划过合法拖曳目标) 35. onDragDrop() (用户将一个对象(例如文件)拖拽到浏览器窗口) 36. onDragStart() (当用户开始拖动元素时触发) 37. onDrop() (当拖动元素放置在目标区域时触发) 38. onEnded() (在视频/音频(audio/video)播放结束时触发) 39. () (在加载文档或图像时发生错误) 40. Update() (当从数据源对象更新相关数据遇到错误时在数据绑定对象上触发) 41. onFilterChange() (当滤镜完成状态变更时触发) 42. onFinish() (当marquee完成滚动时攻击者可以执行攻击) 43. onFocus() (当窗口获得焦点时攻击者可以执行攻击代码) 44. onFocusIn() (当元素将要被设置为焦点之前触发) 45. onFocusOut() (攻击者可以在窗口失去焦点时触发攻击代码) 46. onHashChange() (当锚部分发生变化时触发攻击代码) 47. onHelp() (攻击者可以在用户在当前窗体激活时按下F1触发攻击代码) 48. onInput() (在 或 元素的值发生改变时触发)</p> </p> 49. onKeyDown() (用户按下一个键的时候触发) 50. onKeyPress() (在键盘按键被按下并释放一个键时触发) 51. onKeyUp() (用户释放一个键时触发) 52. onLayoutComplete() (用户进行完打印或打印预览时触发) 53. () (攻击者在窗口加载后触发攻击代码) 54. onLoseCapture() (可以由releaseCapture()方法触发) 55. onMediaComplete() (当一个流媒体文件使用时,这个事件可以在文件播放前触发) 56. onMediaError() (当用户在浏览器中打开一个包含媒体文件的页面,出现问题时触发事件) 57. onMessage() (当页面收到一个信息时触发事件) 58. onMouseDown() (攻击者需要让用户点击一个图片触发事件) 59. onMouseEnter() (光标移动到一个对象或区域时触发) 60. onMouseLeave() (攻击者需要让用户光标移动到一个图像或表格然后移开来触发事件) 61. onMouseMove() (攻击者需要让用户将光标移到一个图片或表格) 62. onMouseOut() (攻击者需要让用户光标移动到一个图像或表格然后移开来触发事件) 63. onMouseOver() (光标移动到一个对象或区域) 64. onMouseUp() (攻击者需要让用户点击一个图片) 65. onMouseWheel() (攻击者需要让用户使用他们的鼠标滚轮) 66. onMove() (用户或攻击者移动页面时触发) 67. onMoveEnd() (用户或攻击者移动页面结束时触发) 68. onMoveStart() (用户或攻击者开始移动页面时触发) 69. onOffline() (当浏览器从在线模式切换到离线模式时触发) 70. onOnline() (当浏览器从离线模式切换到在线模式时触发) 71. onOutOfSync() (当元素与当前时间线失去同步时触发) 72. onPaste() (用户进行粘贴时或攻击者可以使用execCommand(“Paste”)函数时触发) 73. onPause() (在视频或音频暂停时触发) 74. onPopState() (在窗口的浏览历史(history 对象)发生改变时触发) 75. onProgress() (攻击者可以在一个FLASH加载时触发事件) 76. onPropertyChange() (用户或攻击者需要改变元素属性时触发) 77. onReadyStateChange() (每次 readyState 属性变化时被自动调用) 78. onRedo() (用户返回上一页面时触发) 79. onRepeat() (事件在播放完重复播放时触发) 80. onReset() (用户或攻击者重置表单时触发) 81. onResize() (用户改变窗口大小时,攻击者可以自动以这种方法触发:) 82. onResizeEnd() (用户完成改变窗体大小时触发) 83. onResizeStart() (用户开始改变窗体大小时触发) 84. onResume() (当元素继续播放时触发) 85. onReverse() (当元素回放时触发) 86. onRowsEnter() (用户或攻击者需要改变数据源中的一行) 87. onRowExit() (用户或攻击者改变数据源中的一行后退出时触发) 88. onRowDelete() (用户或攻击者需要删除数据源中的一行) 89. onRowInserted() (user or attacker would needto insert a row in a data source) 90. onScroll() (用户需要滚动或攻击者使用scrollBy()函数) 91. onSeek() (当用户在元素上执行查找操作时触发) 92. onSelect() (用户需要选择一些文本-攻击者可以以此方式触发: window.document.execCommand(“SelectAll”);) 93. onSelectionChange() (当用户选择文本变化时触发-攻击者可以以此方式触发: window.document.execCommand(“SelectAll”);) 94. onSelectStart() (当用户开始选择文本时触发-攻击者可以以此方式触发: window.document.execCommand(“SelectAll”);) 95. onStart() (在marquee 对象开始循环时触发) 96. onStop() (当用户按下停止按钮或离开页面时触发) 97. onStorage() (当Web Storage更新时触发) 98. onSyncRestored() (当元素与它的时间线恢复同步时触发) 99. onSubmit() (需要用户或攻击者提交表单) 100.onTimeError() (用户或攻击者设置时间属性出现错误时触发) 101.onTrackChange() (用户或攻击者改变播放列表内歌曲时触发) 102.onUndo() (用户返回上一浏览记录页面时触发) 103.onUnload() (用户点击任意链接或按下后退按钮或攻击者强制进行点击时触发) (责任编辑:admin) |