溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何進(jìn)行bee-box LDAP注入的靶場練習(xí)

發(fā)布時間:2022-01-18 15:18:59 來源:億速云 閱讀:173 作者:柒染 欄目:網(wǎng)絡(luò)管理

如何進(jìn)行bee-box LDAP注入的靶場練習(xí),相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

如果說sql注入的本質(zhì)是拼接字符串的話,那么一切可以注入的本質(zhì)都是拼接字符串,LDAP注入作為注入的一種也不例外,更有趣一點的說它是在拼接圓括號(sql注入也拼接圓括號,但是更習(xí)慣性的是說它拼接字符串)。

在環(huán)境配置篇里面已經(jīng)很詳細(xì)的說了bee-box中l(wèi)dap環(huán)境的配置,靶場練習(xí)篇更多的是php與ldap的連接過程,中間使用的特殊函數(shù)介紹以及圓括號拼接的一些技巧。

下面先說一下bwapp中l(wèi)dap靶場的登錄過程:

如何進(jìn)行bee-box LDAP注入的靶場練習(xí)

首先這是一個LDAP的登錄界面,URL是http://192.168.3.184/bWAPP/ldap_connect.php,直接看下這個php的文件中都寫了什么。

php連接LDAP函數(shù)詳解

如何進(jìn)行bee-box LDAP注入的靶場練習(xí)

從ldap_connect.php 文件的133的代碼開始看,五個變量依次是$message,$login, $password,$server,$dn。

這五個變量中第一個是么有啥用的,第二個登錄ldap服務(wù)器的用戶名,第三個密碼,第四個服務(wù)器地址,第五個區(qū)分名(描述一條完整的LDAP路徑)。

第一個if語句是清空登錄LDAP的表單,第二個if語句是判斷這五個變量是不是空值,這都是小事,重點是后面的這個else,從這個else里面開始看,又有了多個if和else語句,一個個來吧。

如何進(jìn)行bee-box LDAP注入的靶場練習(xí)

首先看第一個if之前的三個函數(shù)ldap_connect,ldap_set_option,ldap_bind,依次說明一下這三個函數(shù)的作用。

ldap_connect:用來連接ldap數(shù)據(jù)庫,格式如下

$server = “l(fā)ocalhost”

$LDAPCONN=LDAP_Connect($server)

如果$LDAPCONN的返回值為數(shù)值型當(dāng)返回結(jié)果為0時連接失敗,其他值時連接成功。

ldap_set_option($link_identifier ,$option , &$retval):接收三個參數(shù)

$link_identifier

ldap_connect()函數(shù)返回的LDAP連接標(biāo)識符(判斷LDAP是否連接成功)

$option可接收的值如下:

LDAP_OPT_DEREF(int):搜索的時候如何處理別名,取值范圍如下:LDAP_DEREF_NEVER(0,默認(rèn)值),LDAP_DEREF_SEARCHING(1), LDAP_DEREF_FINDING(2), LDAP_DEREF_ALWAYS(3)

LDAP_OPT_NETWORK_TIMEOUT(int):網(wǎng)絡(luò)超時秒數(shù),LDAP_NO_LIMIT(0,默認(rèn)值)表示永不超時。

LDAP_OPT_PROTOCOL_VERSION(int):指定使用的LDAP協(xié)議版本,取值范圍如下:LDAP_VERSION2(2,默認(rèn)值), LDAP_VERSION3 (3)。

LDAP_OPT_REFERRALS(bool):LDAP庫是否自動追隨LDAP服務(wù)器返回的引用,取值范圍如下:TRUE(1,默認(rèn)值), FALSE(0)。

&$retval接受選項值的變量

比如bwapp中的代碼:

ldap_set_option($ds,LDAP_OPT_PROTOCOL_VERSION, 3);

這句代碼的意思就是說,如果ldap連接成功了,那么就指定LDAP使用的協(xié)議為版本3。(此處不必深究,都為套用格式)

ldap_bind($link_identifier,$bind_rdn,$bind_password)

$link_identifier:ldap_connect()函數(shù)返回的LDAP連接標(biāo)識符(判斷LDAP是否連接成功)

$bind_rdn:使用指定的rdn即登錄路徑比如cn=admin,dc=bwapp,dc=local

$bind_password:指定登錄的密碼。

ldap_search($link_identifier, $dn,$filter):LDAP目錄搜索函數(shù),成功返回一個結(jié)果集的資源描述符,通常被其他函數(shù)以$result_identifier引用,失敗返回FALSE。

$link_identifier:ldap_connect()函數(shù)返回的LDAP連接標(biāo)識符(判斷是否連接成功)

$dn:將要被搜索的目錄的DN

$filter:搜索過濾器。比如"(objectClass=*)"表示搜索所有條目(對于read函數(shù)則表示所有屬性)。

bwapp中的源碼:ldap_search($ds, $dn,$filter),其中$ds=ldap_connect(),

$dn=”DC=bwapp,DC=local”,$filter=(cn=*)(即所有范圍的cn),這三個參數(shù)說明ldap_search函數(shù)說明查詢的是當(dāng)前服務(wù)器的所有目錄(相對于bwapp來說)。

ldap_count_entries($link_identifier,$search):返回查詢的結(jié)果的數(shù)量

$link_identifier:dap_connect()函數(shù)返回的LDAP連接標(biāo)識符(判斷是否連接成功)

$search:= ldap_search($link_identifier, $dn, $filter)返回查詢的結(jié)果集。

此時函數(shù)已經(jīng)分析的差不多了,讓我們捋一下這個連接文件的大概思路。

如何進(jìn)行bee-box LDAP注入的靶場練習(xí)

從149行至163行,代碼都是判斷得到的各種值是不是為空,如果為空,拋出提示信息。

如何進(jìn)行bee-box LDAP注入的靶場練習(xí)

從第165行到198行是判斷登錄是否成功的,其中165行到184行是判斷存不存在ldap服務(wù),187行到198行是判斷是否存在區(qū)分名(相當(dāng)于數(shù)據(jù)庫名)。

如何進(jìn)行bee-box LDAP注入的靶場練習(xí)

從200行到236行是判斷是否存在相應(yīng)的dn,即是否存在相應(yīng)的ldap路徑,如果不存在,拋出相應(yīng)的提示信息,如果存在調(diào)用ldapi.php,即ldap查詢。在ldapi中得到查詢結(jié)果后輸出為表格。

LDAP查詢結(jié)果的php文件介紹

輸出表格的地方在ldapi.php文件中,接下來看ldapi.php中的代碼。

直接從第231行開始看,從第231行到第240行都是上文中說過的,綁定LDAP目錄,代碼如下,不懂的可以看看上文中的LDAP綁定的部分

如何進(jìn)行bee-box LDAP注入的靶場練習(xí)

如果綁定成功LDAP目錄的話,開始進(jìn)行查詢,查詢的代碼從242行開始

如何進(jìn)行bee-box LDAP注入的靶場練習(xí)

從接收POST參數(shù)user的值到,建立別名($search_field_1, $search_field_2,$search_field_3),規(guī)定過濾器($filter)(過濾器就是一個查詢語句,類似于sql語句),語法規(guī)則如下:

運算符  字符  用途  
等號  =  創(chuàng)建一個要求某一字段必須擁有給定值的過濾器。  
任何  *  代表可以等于除 NULL 以外任何值的字段。  
括號  ( )  分離過濾器,以讓其他邏輯運算符發(fā)揮作用。  
與  &  結(jié)合過濾器。相應(yīng)系列的所有條件都必須為真。  
或  |  結(jié)合過濾器。相應(yīng)系列中必須至少有一個條件為真。  
非  !  排除符合過濾條件的所有對象。  

返回可能會造成加載問題的所有對象:

objectClass=*

返回被指定為“person”的所有用戶對象:

(&(objectClass=user)(objectCategory=person))

僅返回郵寄名單:

(objectCategory=group)

僅返回公開的文件夾:

(objectCategory=publicfolder)

返回所有用戶對象,但排除主電子郵件地址已“test”開頭的用戶對象:

(&(&(objectClass=user)(objectCategory=person))(!(mail=test*)))

返回所有用戶對象,但排除主電子郵件地址以“test”結(jié)尾的用戶對象:

(&(&(objectClass=user)(objectCategory=person))(!(mail=*test)))

返回所有用戶對象,但排除主電子郵件地址中包含字詞“test”的用戶對象:

(&(&(objectClass=user)(objectCategory=person))(!(mail=*test*)))

返回所有被指定為“person”,且屬于某個群組或分配列表的所有用戶對象和別名對象:

(|(&(objectClass=user)(objectCategory=person))(objectCategory=group))

返回所有被指定為“person”的用戶對象、所有群組對象,以及所有聯(lián)系人,但排除任意值被定義為“extensionAttribute9”的對象:

(&(|(|(&(objectClass=user)(objectCategory=person))(objectCategory=group))(objectClass=contact))(!(extensionAttribute9=*)))

返回所有 DN (CN=GRoup,OU=Users,DC=Domain,DC) 識別為群組成員的用戶:

(&(objectClass=user)(objectCategory=person)(memberof=CN=Group,CN=Users,DC=Domain,DC=com))

返回所有用戶:

Microsoft?Active Directory? LDAP 服務(wù)器:(&(objectCategory=person)(objectClass=user))

OpenLDAP? 服務(wù)器:(objectClass=inetOrgPerson)

IBM? Notes?Domino LDAP 服務(wù)器:(objectClass=dominoPerson)

在 IBM Notes Domino LDAP 中搜索郵件地址被定義為“person”或“group”的所有對象:

(&(|(objectClass=dominoPerson)(objectClass=dominoGroup)(objectClass=dominoServerMailInDatabase))(mail=*))

ActiveDirectory:返回所有擁有電子郵件地址的有效(未停用)用戶:

(&(objectCategory=person)(objectClass=user)(mail=*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

返回所有群組 DN 識別為 Group_1 或Group_2 成員的用戶。

(&(objectClass=user)(objectCategory=person)(|(memberof=CN=Group_1,cn=Users,DC=Domain,DC=com)(memberof=CN=Group_2,cn=Users,DC=Domain,DC=com)))

返回 extensionAttribute1 值為“Engineering”或“Sales”的所有用戶

(&(objectCategory=user)(|(extensionAttribute1=Engineering)(extensionAttribute1=Sales)))

語法規(guī)則介紹完畢,接著分析從267開始的代碼

如何進(jìn)行bee-box LDAP注入的靶場練習(xí)

$ldap_fields_to_find定義一個數(shù)組,便于打印輸出表格,和接收ldap查詢到的結(jié)果,將$ldap_fields_to_find作為ldap_search函數(shù)的第四個參數(shù),表示用這個別名保存接收到的結(jié)果,即鍵值對形式,接著將結(jié)果返回到$info這個數(shù)組中,最后將各個鍵對應(yīng)到從287行到291行的各個變量,最后循環(huán)輸出,打印表格,至此,查詢完畢。

LDAP注入拼接語法的簡單介紹

既然LDAP過濾器類似于sql查詢語句,那么直接看bwapp中的過濾器如何寫就行了。直接看ldapi.php文件中的$filter變量:

$filter="(|($search_field_1=$search_for)($search_field_2=$search_for)($search_field_3=$search_for))";

sql語句的精髓在于拼接單引號,ldap語句的精髓在于拼接括號。

現(xiàn)在我想要查詢所有的用戶,直接在user處輸入*就行,那么$filter就會變成$filter="(|($search_field_1=*)($search_field_2=*)($search_field_3=*))";

看一下bwapp中的結(jié)果

如何進(jìn)行bee-box LDAP注入的靶場練習(xí)

返回了很多用戶但是不夠,因為我想看到我的管理員,那么我就要構(gòu)造這樣的LDAP過濾器。

$filter="(|($search_field_1=*)(objectclass=*)($search_field_2=*)($search_field_3=*))";

這樣我就能查詢所有的用戶,包括管理員,objectclass=*的意思就是只要存在就搜索,即全局。

那么在user處輸入*)(objectclass=*就行

看下結(jié)果,出現(xiàn)了管理員,注入成功。

 如何進(jìn)行bee-box LDAP注入的靶場練習(xí)

看完上述內(nèi)容,你們掌握如何進(jìn)行bee-box LDAP注入的靶場練習(xí)的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI