目錄
php連接LDAP函數詳解
LDAP查詢結果的php檔案介紹
首頁 運維 安全 如何進行bee-box LDAP注入的靶場練習

如何進行bee-box LDAP注入的靶場練習

May 13, 2023 am 09:49 AM
ldap bee-box

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

在環境配置篇裡面已經很詳細的說了bee-box中ldap環境的配置,靶場練習篇更多的是php與ldap的連接過程,中間使用的特殊函數介紹以及圓括號拼接的一些技巧。

下面先說一下bwapp中ldap靶場的登入過程:

如何进行bee-box LDAP注入的靶场练习

#首先這是一個LDAP的登入介面,URL是http:/ /192.168.3.184/bWAPP/ldap_connect.php,直接看下這個php的檔案都寫了什麼。

php連接LDAP函數詳解

如何进行bee-box LDAP注入的靶场练习

從ldap_connect.php 檔案的133的程式碼開始看,五個變數依序是$message,$login, $ password,$server,$dn。

這五個變數中第一個是麼有啥用的,第二個登入ldap伺服器的用戶名,第三個密碼,第四個伺服器位址,第五個區分名(描述一條完整的LDAP路徑)。

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

如何进行bee-box LDAP注入的靶场练习

首先看第一個if之前的三個函數ldap_connect,ldap_set_option,ldap_bind,依序說明這三個函數的作用。

ldap_connect:用來連接ldap資料庫,格式如下

$server = “localhost”

$LDAPCONN=LDAP_Connect($server)

如果$ LDAPCONN的回傳值為數值型當傳回結果為0時連線失敗,其他值時連線成功。

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

$link_identifier

ldap_connect()函數傳回的LDAP連線標識符(判斷LDAP是否連線成功)

$option可接收的值如下:

LDAP_OPT_DEREF(int):搜尋的時候如何處理別名,取值範圍如下:LDAP_DEREF_NEVER(0,預設值),LDAP_DEREF_SEARCHING (1), LDAP_DEREF_FINDING(2), LDAP_DEREF_ALWAYS(3)

LDAP_OPT_NETWORK_TIMEOUT(int):網路逾時秒數,LDAP_NO_LIMIT(0,預設值)表示永不逾時。

LDAP_OPT_PROTOCOL_VERSION(int):指定使用的LDAP協定版本,取值範圍如下:LDAP_VERSION2(2,預設值), LDAP_VERSION3 (3)。

LDAP_OPT_REFERRALS(bool):LDAP庫是否會自動追隨LDAP伺服器傳回的引用,取值範圍如下:TRUE(1,預設值), FALSE(0)。

&$retval接受選項值的變數

例如bwapp中的程式碼:

ldap_set_option($ds,LDAP_OPT_PROTOCOL_VERSION, 3);

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

ldap_bind($link_identifier,$bind_rdn,$bind_password)

$link_identifier:ldap_connect()函數傳回的LDAP連線標識符(判斷LDAPAP是否連線成功)

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

$bind_password:指定登入的密碼。

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

$link_identifier:ldap_connect()函數傳回的LDAP連線標識符(判斷是否連接成功)

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

#$filter:搜尋過濾器。例如"(objectClass=*)"表示搜尋所有條目(對於read函數則表示所有屬性)。

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

$dn=”DC=bwapp,DC=local”, $filter=(cn=*)(即所有範圍的cn),這三個參數說明ldap_search函數說明查詢的是目前伺服器的所有目錄(相對於bwapp)。

ldap_count_entries($link_identifier,$search):傳回查詢的結果的數量

$link_identifier:dap_connect()函數傳回的LDAP連線識別碼(判斷是否連線成功)

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

此時函數已經分析的差不多了,讓我們捋一下這個連接檔的大概思路。

如何进行bee-box LDAP注入的靶场练习

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

如何进行bee-box LDAP注入的靶场练习

從第165行到198行是判斷登入是否成功的,其中165行到184行是判斷存不存在ldap服務,187行到198行是判斷是否存在區分名(相當於資料庫名稱)。

如何进行bee-box LDAP注入的靶场练习

從200行到236行是判斷是否存在對應的dn,即是否存在對應的ldap路徑,如果不存在,拋出對應的提示訊息,如果存在呼叫ldapi.php,即ldap查詢。在ldapi中得到查詢結果後輸出為表格。

LDAP查詢結果的php檔案介紹

輸出表格的地方在ldapi.php檔案中,接下來看ldapi.php中的程式碼。

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

如何进行bee-box LDAP注入的靶场练习

如果綁定成功LDAP目錄的話,開始進行查詢,查詢的程式碼從242行開始

如何进行bee-box LDAP注入的靶场练习

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

#等號 =  建立一個要求某一欄位必須擁有給定值的過濾器。 任何  *  代表可以等於 NULL 以外任何值的欄位。 括號  ( )  分離篩選器,以便其他邏輯運算子發揮作用。 與  &  結合濾鏡。對應系列的所有條件都必須為真。 或  |  結合濾鏡。對應系列中必須至少有一個條件為真。 非  !  排除所有符合篩選條件的物件。 #

傳回可能會造成載入問題的所有物件:

objectClass=*

返回所有被指定為「person」的使用者物件:

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

只回傳郵寄名單:

(objectCategory=group)

僅傳回公開的資料夾:

(objectCategory=publicfolder)

傳回所有使用者對象,但排除主電子郵件地址已「test」開頭的使用者對象:

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

傳回所有使用者對象,但排除主電子郵件地址以「test」結尾的使用者對象:

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

#傳回所有使用者對象,但排除主電子郵件地址中包含字詞「test」的使用者對象:

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

傳回所有被指定為“person”,並且屬於某個群組或所有指派清單的使用者物件和別名物件:

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

傳回所有被指定為“ person」的使用者對象、所有群組對象,以及所有聯絡人,但排除任意值被定義為「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 伺服器:(&(objectCategory=person)(objectClass=user))

OpenLDAP™ 伺服器:(objectClass=inetOrgPerson)

IBM® Notes®Domino LDAP 伺服器:(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)))

語法規則介紹完畢,接著分析從267開始的程式碼

如何进行bee-box LDAP注入的靶场练习

##$ldap_fields_to_find定義一個陣列,以便於列印輸出表格,和接收ldap查詢到的結果,將$ldap_fields_to_find作為ldap_search函數的第四個參數,表示用這個別名保存接收到的結果,即鍵值對形式,接著將結果返回到$info這個數組中,最後將各個鍵對應到從287行到291行的各個變量,最後循環輸出,列印表格,至此,查詢完畢。

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語句的精髓在於拼接括號。

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

看看bwapp中的結果

如何进行bee-box LDAP注入的靶场练习

#返回了很多用戶但是不夠,因為我想看到我的管理員,那我就要建構這樣的LDAP過濾器。

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

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

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

看下結果,出現了管理員,注入成功。

 

如何进行bee-box LDAP注入的靶场练习

##   ##字元   用途  

以上是如何進行bee-box LDAP注入的靶場練習的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1657
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1230
24
LDAP注入該如何理解 LDAP注入該如何理解 May 22, 2023 pm 09:47 PM

1.LDAP注入LDAP(LightDirectoryAccessPortocol)是基於X.500標準的輕量級目錄存取協議,提供存取目錄資料庫方法的服務和協議,常用於與目錄資料庫組成目錄服務。其中目錄是一個為查詢、瀏覽和搜尋而優化的專業分散式資料庫,它呈現樹狀結構組織數據,類似於Linux/Unix系統中的檔案目錄。公用憑證、安全金鑰、公司的實體設備資訊等修改並不頻繁的資料適合儲存在目錄中。可以將LDAP理解為一種搜尋協議,它類似於SQL,擁有查詢語法,也存在被注入攻擊的風險。 LDAP注入是指客

如何進行bee-box LDAP注入的靶場練習 如何進行bee-box LDAP注入的靶場練習 May 13, 2023 am 09:49 AM

如果說sql注入的本質是拼接字串的話,那麼一切可以注入的本質都是拼接字串,LDAP注入作為注入的一種也不例外,更有趣一點的說它是在拼接圓括號(sql注入也拼接圓括號,但是更習慣的是說它拼接字串)。在環境配置篇裡面已經很詳細的說了bee-box中ldap環境的配置,靶場練習篇更多的是php與ldap的連接過程,中間使用的特殊函數介紹以及圓括號拼接的一些技巧。以下先說一下bwapp中ldap靶場的登入流程:首先這是一個LDAP的登入介面,URL是http://192.168.3.184/bW

如何進行bee-box LDAP注入的環境配置 如何進行bee-box LDAP注入的環境配置 May 12, 2023 pm 08:37 PM

一、綜述依照我的學習過程來說,我必須知道我進行web攻擊的這個模型和漏洞的原理是什麼,現在我就碰到個冷門,最初見到LDAP時是某次在某國企的滲透測試中發現一個冷門(經過授權的),激起了我對它的興趣。 LDAP的概念:全名:輕量級目錄存取協定(LightweightDirectoryAccessProtocolt),特點:協定什麼的就不說了,太深奧,可以把它理解為一種儲存資料的資料庫,它的特殊之處在於它是一種樹狀的資料庫,首先這個資料庫的名字相當於樹根(即DB=dc),然後從樹根到某個葉子節點過程所經過

PHP Fatal error: Call to undefined function ldap_bind()的解決方法 PHP Fatal error: Call to undefined function ldap_bind()的解決方法 Jun 22, 2023 pm 11:37 PM

在使用PHP開發Web應用程式時,我們經常需要使用LDAP身份驗證來保護應用程式的存取。然而,在某些情況下,當我們嘗試使用PHP的LDAP功能來實現身份驗證時,可能會遇到以下錯誤訊息:"PHPFatalerror:Calltoundefinedfunctionldap_bind()"。這種錯誤訊息通常會在應用程式呼叫ldap_bind()函數

在PHP中使用LDAP進行使用者身份驗證 在PHP中使用LDAP進行使用者身份驗證 Jun 20, 2023 pm 10:25 PM

LDAP(LightweightDirectoryAccessProtocol)是一種用於存取分散式目錄服務的協定。它可以用於進行使用者身份驗證、授權、帳戶維護和資料儲存等任務。在PHP應用程式中,LDAP可以作為一種強大的認證機制,可以為應用程式提供強大的認證和授權功能。本文將介紹在PHP中使用LDAP進行使用者驗證的方法,具體內容包括:安裝與設定L

如何使用Nginx防範LDAP注入攻擊 如何使用Nginx防範LDAP注入攻擊 Jun 10, 2023 pm 08:19 PM

隨著網路安全漏洞增多,LDAP注入攻擊已經成為了許多網站面臨的安全隱患。為了保護網站安全,防範LDAP注入攻擊,需要使用一些安全措施。其中,Nginx作為一個高效能的Web伺服器和反向代理伺服器,可以為我們提供很多便利和保護。這篇文章將介紹如何使用Nginx防範LDAP注入攻擊。 LDAP注入攻擊LDAP注入攻擊是一種針對LDAP資料庫的攻擊方式,攻擊者透過在

如何使用PHP防範LDAP注入漏洞 如何使用PHP防範LDAP注入漏洞 Jun 24, 2023 am 10:40 AM

隨著網路安全問題越來越受到重視,越來越多的程式設計師開始關注並學習如何防止程式碼被攻擊。其中,常見的攻擊方式包括SQL注入、XSS、CSRF等。但是,還有一種常見的攻擊方式被低估了:LDAP注入漏洞。本文將會介紹此攻擊方式的原理與如何使用PHP防範LDAP注入漏洞。 LDAP介紹LDAP(LightweightDirectoryAccessProtocol)

如何使用PHP和LDAP實現使用者群組管理和授權 如何使用PHP和LDAP實現使用者群組管理和授權 Jun 25, 2023 am 08:22 AM

隨著企業規模和業務需求的不斷擴大,使用者群組管理和授權成為了一個必不可少的部分。 LDAP(輕型目錄存取協議)作為一種廣泛應用於企業網路中的目錄服務協議,為實現使用者群組管理和授權提供了一種高效方式。本文將介紹如何使用PHP和LDAP實現使用者群組管理和授權。一、什麼是LDAPLDAP是一種輕型目錄存取協議,廣泛應用於企業網路中的目錄服務協議。 LDAP是基於客戶端/伺服器

See all articles