網絡安全滲透技術進階 5步入門LDAP 注入(Injection)+如何防範

LDAP基本語法

  • =(等於)

查找“名“屬性為“John”的所有對象,可以使用:

(givenName=John)

這會返回“名”屬性為“John”的所有對象。圓括號是必需的,以便強調LDAP 語句的開始和結束。

  • &(邏輯與)

如果具有多個條件並且希望全部條件都得到滿足,則可使用此語法。例如,如果希望查找居住在Dallas 並且“名”為“John”的所有人員,可以使用:

(&(givenName=John)(l=Dallas))

請注意,每個參數都被屬於其自己的圓括號括起來。整個LDAP 語句必須包括在一對主圓括號中。操作符& 表明,只有每個參數都為真,才會將此篩選條件應用到要查詢的對象。

  • !(邏輯非)

此操作符用來排除具有特定屬性的對象。假定您需要查找“名”為“John”的對象以外的所有對象。則應使用如下語句:

!givenName=John)

此語句將查找“名”不為“John”的所有對象。請注意:! 操作符緊鄰參數的前面,並且位於參數的圓括號內。由於本語句只有一個參數,因此使用圓括號將其括起以示說明

  • *(通配符)

可使用通配符表示值可以等於任何值。使用它的情況可能是:您希望查找具有職務頭銜的所有對象。為此,可以使用:

(title=*)

這會返回“title”屬性包含內容的所有對象。另一個例子是:您知道某個對象的“名”屬性的開頭兩個字母是“Jo”。那麼,可以使用如下語法進行查找:

(givenName=Jo*)

這會返回“名”以“Jo”開頭的所有對象。

  • 高級用法eg:

您需要一個篩選條件,用來查找居住在Dallas 或Austin,並且名為“John”的所有對象。使用的語法應當是:

(&(givenName=John)(|(l=Dallas)(l=Austin)))

三、Ldap 的靶場環境

這裡環境測試靶場使用的是Pentester Lab ,文件類型為ios文件,可以在虛擬機直接運行進入環境,非常的簡單

最終平臺的效果:

網絡安全滲透技術進階 5步入門LDAP 注入(Injection)+如何防範

四、Ldap 注入實例

4.1 正常請求和返回包分析

我們先來看一下Ldap 下面的exampl2 學習實例,進入之後發現提示的信息為“AUTHENTICATED as hacker” 說著我們已經認證通過了。也可以認為已經登錄授權了

看一下我們提交的數據,使用burpsuit 進行查看,來看一下request的包,請求兩個變量為name=hacker, passowrd = hacker

GET /ldap/example2.php?name=hacker&password=hacker HTTP/1.1

Host: 192.168.3.146

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Connection: close

Upgrade-Insecure-Requests: 1

請求返回包的截圖如下:

網絡安全滲透技術進階 5步入門LDAP 注入(Injection)+如何防範

從上圖【AUTHENTICATED as hacker】可以看出,證明服務器已經認證此用戶

通過前面的ldap過濾器基礎,可以來推斷服務器端ldap 執行的查詢語句中用道的過濾器如下:

(&(name=hacker)(passwd=hacker))

其中& 為and 操作,我們可以控制的變量範圍為name=hacker&password=hacker

4.2 構造測試語句

構造攻擊語句

name=h*))%00(&password=hacker

web服務器提交給ldap的查詢語句就會變成如下

(&(name=hacker))%00(passwd=hacker))

其中%00是截斷符,這樣ldap服務器執行的時候,就會忽略掉%00後面的部分,就相當於服務器執行了

(&(name=hacker))

選擇器(&(name=hacker))永遠為真,使用burpsuite 截獲的返回包截圖如下:

網絡安全滲透技術進階 5步入門LDAP 注入(Injection)+如何防範

從上圖【AUTHENTICATED as hacker】可以看出,認證查詢查詢結果仍然是正確的

4.3 利用通配符*遍歷全部用戶

攻擊payload

(&(name=h*))%00(passwd=hacker))

* 為通配符,代表是以h為開頭的所有用戶,因此我們可以a -z 進行替換現在的【h】,根據返回的結果,查看認證成功返回的用戶名稱,進而獲得所有用戶的賬戶信息。

下面我們使用burpsuite進行批量提交請求,實現爆破遍歷。具體截圖如下:

step1: 發送到intruder

網絡安全滲透技術進階 5步入門LDAP 注入(Injection)+如何防範

step2:增加變量,具體見截圖

網絡安全滲透技術進階 5步入門LDAP 注入(Injection)+如何防範

step3,增加變量字典

網絡安全滲透技術進階 5步入門LDAP 注入(Injection)+如何防範

step4 開始遍歷

一共跑出來兩個用戶,admin 和hacker 具體截圖如下:

網絡安全滲透技術進階 5步入門LDAP 注入(Injection)+如何防範

五、修復建議

  1. 客戶端發送給服務器的參數中包含了特殊字符,服務器代碼端需要對變量進行檢查和淨化處理。
  2. 圓括號、星號、邏輯操作符、關係運操作符在應用層都必須過濾。
  3. 無論什麼時候,只要可能,構造LDAP搜索過濾器的值在發送給LDAP服務器查詢之前都要用應用層有效地值列表來核對

參考文章連接:

https://www.cnblogs.com/bendawang/p/5156562.html

http:// www.secevery.com:4321/drops/tips-967.html


分享到:


相關文章: