24:WEB漏洞-檔案上傳之WAF繞過及安全修復

zhengna發表於2021-12-02

本課重點

  • 案例1:上傳資料包引數對應修改測試
  • 案例2:safedog+雲伺服器+uploadlabs測試
  • 案例3:safedog+雲伺服器+uploadlabs_fuzz測試
  • 案例4:檔案上傳安全修復方案-函式自定義及WAF

案例1:上傳資料包引數對應修改測試

上傳引數名解析:明確哪些東西能修改?

  • Content-Dispostion:一般可更改
  • name:表單引數值,不能更改
  • filename:檔名,可以更改
  • Content-Type:檔案MIME,視情況而定

案例2:safedog+雲伺服器+uploadlabs測試

常見繞過方法:

  • 資料溢位-防匹配(xxx...)
  • 符號變異-防匹配(' " ;)
  • 資料截斷-防匹配(%00 ; 換行)
  • 重複資料-防匹配(引數多次)
過safedog之Payload:

大量垃圾資料緩衝溢位(Content-Disposition,filename等)
filename=xx.php
filename="xx.php
filename='xx.php
filename="x".php
filename="x"x.php filename="a.jpg;.php" filename="Content-Disposition:form-data;name="upload_file";x.php" filename="x.jpg";filename="x.jpg";....filename="x.php"; filename="/xxx/x.php" filename= " x . p h p " 主要是學習思路,其他waf繞過可參考思路進行嘗試

案例演示
<1>上傳一個PHP檔案,被safedog攔截,原因是安全狗中配置了相關防護,該防護是通過檢測關鍵字實現的,

<2>方法1:在資料包filename之前,手動加入大量垃圾資料(以分號結尾),造成資料溢位,防止waf匹配關鍵字,從而繞過waf防護。

<3>方法2:使用符號變異的方法,防止waf匹配關鍵字,從而繞過waf防護。比如原來是filename="xx.php",我們可以手動改為filename='xx.php'、filename="xx.php、filename='xx.php、filename=xx.php"、filename=xx.php'、filename=xx.php等形式,嘗試上傳。經過測試,以下三種方式可以繞過safedog檔案防護。

  • filename="xx.php
  • filename='xx.php
  • filename=xx.php

通過以上測試,猜測安全狗防護機制是取filename後面最後一個引號之前的資料與黑名單匹配。此時我們就有了更多思路,比如改為filename="x".php,安全狗會取引號中的x與字尾黑名單進行匹配,成功繞過,上傳到伺服器上的檔名為.php。或者改為filename="x"x.php,此時上傳到伺服器上的檔名為x.php。

<4>方法3:資料截斷-防匹配(%00 ; 換行)

改為filename="x.jpg;.php",成功繞過,此時上傳到伺服器上的檔名為x.jpg;.php。

改為filename="x.php%00.jpg",成功繞過,此時上傳到伺服器上的檔名為x.php%00.jpg,圖片格式,沒啥用。

改為換行繞過,此時上傳到伺服器上的檔名為x.php。

<5>方法4:重複資料-防匹配(引數多次)

改為filename="x.jpg";filename="x.jpg";....filename="x.php";,成功繞過,此時上傳到伺服器上的檔名為x.php。

改為filename="Content-Disposition:form-data;name="upload_file";x.php",成功繞過,此時上傳到伺服器上的檔名為;x.php。

改為filename="Content-Disposition:form-data;name="upload_file"x.php"(去掉了分號),成功繞過,此時上傳到伺服器上的檔名為x.php。

改為filename="Content-Type: image/jpeg;x.php"(去掉了分號),成功繞過,此時上傳到伺服器上的檔名為jpeg;x.php。此處發現/之後的內容可以繞過安全狗檢測。

改為filename="/jpeg;/x.php",成功繞過,此時上傳到伺服器上的檔名為x.php。

案例3:safedog+雲伺服器+uploadlabs_fuzz測試

可以使用模糊字典+Intruder模組,批量測試。

fuzz字典:

  • https://github.com/fuzzdb-project/fuzzdb
  • https://github.com/TheKingOfDuck/fuzzDicts
  • https://github.com/jas502n/fuzz-wooyun-org
  • https://github.com/TuuuNya/fuzz_dict

案例4:檔案上傳安全修復方案-函式自定義及WAF

檔案上傳安全修復方案:

  • 後端驗證:採用服務端驗證模式
  • 字尾檢測:基於黑名單、白名單過濾
  • MIME檢測:基於上傳自帶型別檢測
  • 內容檢測:檔案頭,完整性校驗

檔案上傳安全修改工具:

  • 自帶函式過濾:參考uploadlabs函式
  • 自定義函式過濾:function check_file(){}
  • WAF防護產品:寶塔、雲盾、安全公司產品等

相關文章