【XSS跨站】---代碼及httponly繞過---day27
一、HttpOnly
1、什么是httponly
1、如果cookie中設置了HttpOnly屬性,那么通過js腳本將無法讀取到cookie信息,這樣能有效的防止XSS攻擊,竊取cookie內容,這樣就增加了cookie的安全性,即便是這樣,也不要將重要信息存入cookie。XSS全稱Cross SiteScript。
2、各個主流的腳本語言都支持httponly。
2、php中httponly的設置
在設置了httponly之后,就無法獲取cookie了
雖然httponly可以阻止獲取cookie的攻擊,但是XSS漏洞還是存在的,可以用alert(1)來測試。
3、攻擊思路
①我們的目標是進入后台
那么除了獲取cookie之外,還可以直接賬號密碼登錄,但是賬號密碼又分為兩種情況,保存讀取和沒保存讀取,也就是是否讓瀏覽器記住密碼了。
②保存讀取:
-
攻擊思路:讀取保存的數據
-
平台模塊:
這個type值,就在登錄界面查看源代碼,
③沒保存讀取:
- 攻擊思路:表單劫持
- 前提:XSS跨站漏洞要產生在登錄框那里
- 原理:管理員輸入賬號密碼之后,一份發給服務器,另一份發給攻擊者。
二、XSS-labs平台
x、下載地址
https://github.com/do0dl3/xss-labs
1、level-1
①界面
②測試
把url中的name的值更改,然后界面相應的顯示就會更改。
那么說明這個name的地方能寫js語句,存在跨站漏洞。
③攻擊
2、level-2
①界面
②測試
<script>alert(1)</script>
測試keyword
沒有彈窗
審查元素。
③源碼分析
htmlspecialchars:
所以在上面我們的符號改變了
- 繞過思路:
審查頁面元素可以看到:
此處還有一句有我們寫的測試語句:
這個地方沒有執行出來,是因為有雙引號,那么我們就可以在測試時候,先閉合雙引號,然后再閉合標簽
payload:
"><script>alert(1)</script>
④攻擊:
使用上面的payload,成功。
3、level-3
①界面:
②測試
還是,輸入111之后,顯示在前端頁面。
測試使用第二關的方法,閉合。行不通
看起來也是尖括號貝轉義了,被過濾。
③攻擊思路
使用表單中的onclick屬性,來執行js代碼。這樣就避免了尖括號的使用。
payload:
keyword=' onclick='alert(1)
4、level-4
①界面
②測試
使用3的方法
5、level-5
①界面:
②測試
使用4的方法,行不通。
源碼分析:
③繞過思路:
使用html中的鏈接標簽:
payload:
"> <a href=javascript:alert(1)>
相當於是添加了一個超鏈接標簽。
6、level-6
①界面:
②測試:
用level-5的方法:行不通,發現吧href給過濾了。
源碼分析:
沒有加正則表達式,可以大小寫繞過。
③繞過方法:
大小寫繞過payload:
"> <a Href=JavasCript:alert(1)>
7、level-7
①界面:
②源碼分析:
測試使用6的方法:
發現行不通:
截斷了
但是我們知道源碼中這個檢測,只檢測了一次,沒有循環的去替換檢測。所以我們可以多弄幾次。
③繞過:
payload:
"> <a HHREFref=JavasCscriptript:alert(1)>
8、level-8
①界面:
②測試:
發現有下划線截斷了。
源碼分析:
測試發現大小寫和重復寫都不管用。
③繞過:
思路:采用編碼繞過
選擇這個模式
payload:
javascript:alert(1)
9、level-9
①界面:
②測試:
測試使用level-8的方法:
行不通。
③源碼分析:
檢測的是有沒有http://
④繞過:
javascript:alert(1)//http://
采取上面的方式來繞過,第一個//用來注釋掉后面的http
繞過成功。
10、level-10
①界面:
②源碼分析:
③payload
keyword=well%20done!&t_sort="type="text" onclick="alert(1)"
其中type="text",是讓這個數據框顯示出來,這樣的話才能夠利用,否則hidden的話就隱藏起來了。
11、level-11
①界面:
② 源碼分析:
發現這個$str33的值是從Referer里來的,抓包添加Referer頭就行了。payload和10題中一樣。
三、迪哥生動講解---同源策略防止跨站攻擊
1、跨站攻擊
來源就是通過http請求頭中的,Referer頭來決定的。