LDAP注入該如何理解
1、LDAP 注入
LDAP (Light Directory Access Portocol) 是基於X.500標準的輕量級目錄存取協議,提供存取目錄資料庫方法的服務和協議,常用於與目錄資料庫組成目錄服務。其中目錄是一個為查詢、瀏覽和搜尋而優化的專業分散式資料庫,它呈現樹狀結構組織數據,類似於Linux/Unix系統中的檔案目錄。適合將公用憑證、安全金鑰以及公司實體設備資訊等不經常變更的資料儲存於目錄中。類似於SQL,LDAP是一種搜尋協議,具有查詢語法,並存在潛在的注入攻擊風險。 LDAP注入是指客戶端發送查詢請求時,輸入的字串中含有一些特殊字符,導致修改了LDAP本來的查詢結構,從而使得可以存取更多的未授權資料的一種攻擊方式。
本篇文章以 JAVA 語言原始碼為例,分析CWE ID 90:Improper Neutralization of Special Elementsused in an LDAP Query ('LDAP Injection')樣本中LDAP注入漏洞產生的原因以及修復方法。詳細請參閱:
CWE ID 90: Improper Neutralization of Special Elements used in an LDAP Query ('LDAP Injection')
#http://cwe .mitre.org/data/definitions/90.html
CWE ID 639:Authorization Bypass ThroughUser-Controlled Key
#http://cwe.mitre.org/ data/definitions/639.html
2. LDAP 注入的危害
LDAP 注入是利用使用者引入的參數產生惡意LDAP 查詢,透過建構LDAP 過濾器來繞過存取控制、使用者權限提升。透過針對正常過濾器的構造,實現 AND、OR 操作注入,以獲取敏感資訊。
從2018年1月至2019年1月,CVE中共有4個漏洞資訊與其相關。部分漏洞如下:
#CVE 編號 | |
---|---|
CVE-2018-12689 | phpLDAPadmin 1.2.2 允許通過cmd.php? cmd = loginform 請求中精心設計的 serverid 參數或登入面板中精心設計的使用者名稱和密碼進行 LDAP 注入。 |
CVE-2018-5730 | MIT krb5 1.6 或更高版本允許經過驗證的kadmin 將主體新增至LDAP Kerberos 資料庫,以透過提供「linkdn”和「containerdn」 資料庫參數來繞過DN容器檢查,或透過提供作為擴展的DN字串來繞過DN 容器檢查。 |
CVE-2016-8750 | 4.0.8 之前的 Apache Karaf 使用 LDAPLoginModule 透過 LDAP 對使用者進行驗證。但是沒有正確編碼使用者名,因此容易受到 LDAP 注入攻擊,導致拒絕服務。 |
CVE-2011-4069 | PacketFence 3.0.2 之前的html / admin / login.php 允許遠端攻擊者進行LDAP 注入攻擊,從而透過精心設計的使用者名稱繞過身份驗證。 |
3、範例程式碼
範例源自於Samate Juliet Test Suite for Java v1.3 (https://samate.nist.gov/SARD/testsuite.php),來源檔案名稱:CWE90_LDAP_Injection__connect_tcp_01.java。
3.1缺陷程式碼
#上述範例程式碼39-61 行,程式進行TCP 連接並讀取Socket的資料並賦值給變數data
,在118 行動態建構一個LDAP 查詢語句,119 行對其執行。 LDAP 為人員組織機構封裝了常見的物件類,例如人員(person)含有姓氏(sn)、名稱(cn)、電話(telephoneNumber)、密碼 (userPassword) 等屬性。該查詢為了驗證是否存在名為變數 data
的員工,但並未對變數 data
的內容做任何過濾。使用最簡單的注入方式,令傳入參數的值為“*”,則建構的動態查詢條件為 "(cn=*)”,這樣可以查詢到所有員工的信息,導致資訊外洩。
對上文中的範例程式碼進行360程式碼衛士偵測後,發現有「LDAP注入」漏洞,安全等級評定為高。資料污染源以及資料流向可以透過追蹤路徑分析得出並在程式碼的第120行報告缺陷,圖1亦如是
圖1:LDAP 注入的偵測範例
3.2 修正程式碼
在上述修復程式碼中,第119行使用javax. naming.ldap
套件下擴充類別BaseControl
接收需要被處理的參數,第120行control
物件呼叫getEncodedValue()
方法將接收的參數data
進行編碼,編碼後的值為字元對應的ASN.1BER
編碼值。編碼後的位元組數組不存在參與指令解析的特殊字符,可以建構結構、內容正常的 LDAP 查詢語句,這樣就避免了 LDAP 注入的發生。
使用360程式碼衛兵對修復後的程式碼進行偵測,可以看到已不存在「LDAP注入」缺陷。如圖2:
圖2:修正後偵測結果
4 、如何避免LDAP 注入
LDAP注入的根本原因是攻擊者利用LDAP元字元來修改LDAP查詢的意義。在建構LDAP篩選器時,程式設計師需明確哪些字元該被視為指令解析,哪些字元應被視為資料解析。為了防止攻擊者侵犯程式設計師的各種預設情況,應使用白名單的方法,確保LDAP查詢中由使用者控制的數值完全來自於預定的字元集合,應不包含任何LDAP元字元。如果由使用者控制的數值範圍要求必須包含 LDAP元字符,則應使用相應的編碼機制轉義這些元字符在LDAP查詢中的意義。
#
如&、! 、|、=、、,、 、-、」、'、;這些字元正常情況下不會用到,如果使用者的輸入中出現了,需要用反斜線轉義處理。
還有一些字元如(、)、\、*、/、NUL這些字元不僅需要用反斜線處理,還要將字元變成對應的ASCII碼值。
以上是LDAP注入該如何理解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

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

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

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

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

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

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

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

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