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文件,可以在虛擬機直接運行進入環境,非常的簡單
最終平臺的效果:
四、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
請求返回包的截圖如下:
從上圖【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 截獲的返回包截圖如下:
從上圖【AUTHENTICATED as hacker】可以看出,認證查詢查詢結果仍然是正確的
4.3 利用通配符*遍歷全部用戶
攻擊payload
(&(name=h*))%00(passwd=hacker))
* 為通配符,代表是以h為開頭的所有用戶,因此我們可以a -z 進行替換現在的【h】,根據返回的結果,查看認證成功返回的用戶名稱,進而獲得所有用戶的賬戶信息。
下面我們使用burpsuite進行批量提交請求,實現爆破遍歷。具體截圖如下:
step1: 發送到intruder
step2:增加變量,具體見截圖
step3,增加變量字典
step4 開始遍歷
一共跑出來兩個用戶,admin 和hacker 具體截圖如下:
五、修復建議
- 客戶端發送給服務器的參數中包含了特殊字符,服務器代碼端需要對變量進行檢查和淨化處理。
- 圓括號、星號、邏輯操作符、關係運操作符在應用層都必須過濾。
- 無論什麼時候,只要可能,構造LDAP搜索過濾器的值在發送給LDAP服務器查詢之前都要用應用層有效地值列表來核對
參考文章連接:
https://www.cnblogs.com/bendawang/p/5156562.html
http:// www.secevery.com:4321/drops/tips-967.html
閱讀更多 Web安全陪跑團 的文章