檔案上傳在資料包中可修改的地方

  1. Content-Disposition:一般可更改

  2. name:表單引數值,不能更改

  3. filename:檔名,可以更改

  4. Content-Type:檔案 MIME,視情況更改

常見繞過WAF的方法

  1. 資料溢位-防止WAF匹配(xxx...)'
  2. 符號變異-防止WAF匹配(' " ;)
  3. 資料截斷-防止WAF匹配(%00 ; 換行)
  4. 重複資料-防止WAF匹配(引數多次)

WAF繞過簡單演示

我以靶場upload-labs第二關進行演示。

我們開啟安全狗的上傳防護:



第2關上傳一個php檔案,被安全狗檢測到且被攔截:



php加上空格"ph p",可上傳,但無法解析。

1. 垃圾資料溢位法

  • filename的內容進行溢位。



    filename的內容進行溢位雖然可以繞過WAF但是我無法將php檔案上傳至伺服器。

  • name與filename之間進行溢位

    也可繞過WAF但是無法上傳php檔案。



  • 大量垃圾資料後加“;”

    Content-Disposition與name之間的垃圾資料加上分號可繞過安全狗。



    可成功上傳php檔案



    經測試,name與filename之間的垃圾資料也可繞過。

2. 符號變異繞過

可用payload:

filename=" xx.php
filename="x x.php
filename=' xx.php
filename='x x.php
  • filename的內容用單引號括起來(被攔截)



    顯然被攔截
  • filename去掉最後一個雙引號(被攔截)



    被攔截
  • filename去掉最後一個雙引號,再加上分號(字尾不能被解析)



    可繞過,可上傳,但是無法被解析
  • filename去掉最後一個雙引號,在檔名字尾前任意位置加空格(可行)



    可繞過WAF,可上傳。
  • 單引號與雙引號一致。
  • 只在末尾加雙引號(被攔截)

  • 檔名前加雙引號或單引號(無法解析)

    檔名前加雙引號或單引號可繞過waf,也可上傳,但是無法解析。

  • 檔名中加入圖片字尾提前用分號截斷

3. 資料截斷繞過

可用payload:

filename="x.jpg;shell.php"
filename="x.jpg;shell.php
filename='x.jpg;shell.php
filename="shell.php%00xx.jpg" 注意%00要編碼
  • 檔名中加入圖片字尾提前用分號截斷(可行)

    原因是防護軟體只檢測前面的部分,一旦正確就放行,不再檢測後面的



    同理結合符號變形可有:
filename="x.jpg;shell.php
filename='x.jpg;shell.php
·····
  • 檔名中用%00url編碼截斷(可行)

4. 資料換行截斷

可用payload:

x.ph
p x.p
h
p x.
p
h
p x
.
p
h
p
  • 直接在資料包中進行換行操作(可行)





5. 重複資料繞狗(引數多次)

  • 重複filename

    前面的filename為可接受的檔案格式,最後一個為php檔案格式,前面的重複多次,可繞過。

  • filename中配合其他引數

    配合Content-Type: image/jpeg:

6. "/"與";"配合繞過

payload:

filename="/jpeg;x.php"
filename="/jpeg;/x.php"



7. FUZZ字典配合

字典地址:

https://github.com/TheKingOfDuck/fuzzDicts
https://github.com/fuzzdb-project/fuzzdb

手工測試的話有點麻煩,我們可以藉助寫好的字典配合BP進行批量測試,先在本地測試好了,再在真實環境進行測試,以防會封IP。

我藉助fuzzDicts的php字典進行測試。

首先將攔截的資料包傳送至Intruder



清除所有變數



將filename的值設定為變數



payload載入字典:



開始攻擊:



能否成功取決於字典的好壞。

安全及修復建議

  1. 後端驗證:採用服務端驗證模式
  2. 字尾檢測:基於黑名單,白名單過濾
  3. MIME 檢測:基於上傳自帶型別檢測
  4. 內容檢測:檔案頭,完整性檢測
  5. 自帶函式過濾:參考 uploadlabs關卡的函式
  6. 自定義函式過濾:function check_file(){}等
  7. WAF 防護產品:寶塔,雲盾,安全公司產品等