前言
本文是对xss漏洞的一些非waf的代码绕过思路的的总结,主要是总结思路。
仅供学习使用。
Xss漏洞判断过滤:
1.前端源码没有被隐藏的情况下
输入跨站语句,发现跨站语句没执行。
选中回显位置审查元素看源码。
2.前端源码被隐藏
标志:相应部分的源码有<… type=hidden>
这个很难靠猜进行渗透,大部分依靠源码进行判断。
可以尝试看页面代码,把参数都改下type,看看页面码中哪个变了
防御方法以及反防:
1.语句在双引号里面
加双引号和>让语句在引号外面。
此方法是用于那种语句在<>这里<>的时候使用
2.有的过滤会把我们的<>变成&it:
看情况,有点击框可以尝试使用onlick=’语句’。实现不使用<>完成代码执行
完整payload:<button οnclick=执行的 PHP 代码>按钮文本</button>
在括号里有单独的<>或者“”并不影响payload的构造
<a href= “javascript:alert(1)”>部分的过滤
3.有的过滤关键字,有时会过滤on等,这时可以尝试一下javascript:协议
构造<a href= “javascript:alert(1)”>
上一个>跟下一个<之间不能有空格。
4.前端JavaScript也是对大小写敏感的,所以有时候他过滤一些关键词,可以用大小写。
5.有的过滤并不是循环过滤,他只会过滤一次,把关键词替换为空白,所以用嵌套,让他过滤一层,然后剩下的字符再凑齐一个关键词。
6.很多时候,他过滤的很苛刻,无法绕过,则可以考虑用编码绕过,把关键字编码成html的形式输入,最后html解码成相应的关键字实现绕过。
7.这种页面跳转的,一般是跳转其他网站,所以他有时候可能要求执行的代码必须含有http://,如果没有就不给你执行,但是我们输入又会产生干扰,所以可以用双//给他注释掉,或者放到alert中。
Type=hidden的情况
8.当他有type=”hidden”,我们是可以改type的,
当有两个type在同一个<>中时,我测试他会按照第一个算,所以我们可以输入改他的type再结合一个onclick属性,实现捏造一个会话框。
判断方法:虽然设置为了hidden,但是看源码还是可以看出来有个输入的参数,把源码中的参数挨个改一下type,然后再看源码中哪个input改变了,再进行payload构造
9.有的网站他会接收上一个页面的网址,判断数据包的referer
需要抓包,然后在referer那里写跨站语句。
与这个相似的,有时候网站会获取你的IP,浏览器信息等在数据包中的信息,这个时候你也可以把语句写到相应的位置进行攻击。
总结,xss跨站语句,可以通过看得见的,看不见的,get,post,数据包等多种形式进行跨站。