【LDAP】LDAP注入漏洞與防御

0x01 前言

前兩天爆了一個(gè)LDAP漏洞,據(jù)說(shuō)存在了8年現(xiàn)在才被發(fā)現(xiàn)粱腻,感概一下庇配,不知這8年來(lái)有多少站被搞了。绍些。捞慌。
想著復(fù)現(xiàn)這個(gè)漏洞,就先復(fù)習(xí)一下LDAP注入的相關(guān)知識(shí)吧柬批,差了很多資料啸澡,記一下筆記袖订。

0x02 LDAP介紹

在學(xué)習(xí)LDAP注入之前,首先要了解LDAP的運(yùn)行機(jī)制嗅虏。
什么是LDAP洛姑?LDAP(Lightweight Directory Access Protocol):輕量級(jí)目錄訪問(wèn)協(xié)議,是一種在線目錄訪問(wèn)協(xié)議皮服。LDAP主要用于目錄中資源的搜索和查詢楞艾,是X.500的一種簡(jiǎn)便的實(shí)現(xiàn)。
簡(jiǎn)單來(lái)說(shuō)龄广,可以理解為L(zhǎng)DAP是某種搜索協(xié)議硫眯,就像我們熟知的數(shù)據(jù)庫(kù)一樣,我們利用SQL語(yǔ)句進(jìn)行查詢數(shù)據(jù)庫(kù)中的數(shù)據(jù)择同。而LDAP也有一套自己的查詢語(yǔ)句两入,來(lái)進(jìn)行查詢。

LDAP查詢語(yǔ)法

search語(yǔ)法:attribute operator value
search filter options:( "&" or "|" (filter1) (filter2) (filter3) ...) ("!" (filter))

LDAP的搜索語(yǔ)法其實(shí)很容易敲才,這里看不明白的話裹纳,往下看一下具體實(shí)例就會(huì)明白的。

0x03 LDAP注入攻擊

輕量級(jí)目錄訪問(wèn)協(xié)議是通過(guò)TCP/IP查詢和修改目錄服務(wù)的協(xié)議紧武,使用最廣泛的LDAP服務(wù)如微軟的ADAM(Active Directory Application Mode)和OpenLDAP痊夭。

(&(attribute=value)(injected_filter)) (second_filter)

需要注意的是,在OpenLDAP中脏里,第二個(gè)過(guò)濾器會(huì)被忽略,只有第一個(gè)會(huì)被執(zhí)行虹曙,那么類似上面的這種注入就可以成功的迫横。而在ADAM中,有兩個(gè)過(guò)濾器的查詢是不被允許的酝碳,那么這種注入是沒(méi)什么用的矾踱。

  • AND LDAP注入

當(dāng)后端的代碼如下

(&(parameter1=value1)(parameter2=value2))

這里value1和value2都會(huì)被查詢,其中value1和value2是用戶可控的疏哗,如果過(guò)濾不完善呛讲,就會(huì)存在LDAP注入的可能。
比如一個(gè)用戶登錄的場(chǎng)景返奉,用戶輸入username和password贝搁,應(yīng)用會(huì)構(gòu)造一個(gè)過(guò)濾器并發(fā)給LDAP服務(wù)器進(jìn)行查詢。

(&(username=uname)(password=pwd))

當(dāng)用戶輸入一個(gè)有效的用戶名芽偏,例如admin雷逆,那么就有可能在username字段后面進(jìn)行注入,從而在不知道密碼的情況下進(jìn)行登陸污尉。

payload: admin)(&))
result: (&(username=admin)(&))(password=123))

LDAP服務(wù)器只會(huì)處理第一個(gè)過(guò)濾器膀哲,而第一個(gè)過(guò)濾器永真往产,因此繞過(guò)了登錄框

  • OR LDAP注入

當(dāng)后端代碼如下:

(|(parameter1=value1)(parameter2=value2))

一個(gè)典型的OR LDAP注入的場(chǎng)景就是:
假設(shè)一個(gè)資源管理器允許用戶了解系統(tǒng)中可用的資源(打印機(jī)、掃描器某宪、存儲(chǔ)系統(tǒng)等)仿村。用于展示可用資源的查詢?yōu)椋?/p>

(|(type=Rsc1)(type=Rsc2))

Rsc1和Rsc2表示系統(tǒng)中不同種類的資源,例如兴喂,Rsc1=printer蔼囊,Rsc2=scanner用于列出系統(tǒng)中所以可用的打印機(jī)和掃描器。

payload: Rsc1=printer)(uid=*)
result: (|(type=printer)(uid=*))(type=scanner))

LDAP服務(wù)器會(huì)響應(yīng)所有的打印機(jī)和用戶對(duì)象

  • LDAP盲注
    - LDAP AND盲注
    假設(shè)一個(gè)Web應(yīng)用想從一個(gè)LDAP目錄列出所有可用的Epson打印機(jī)瞻想,錯(cuò)誤信息不會(huì)返回压真,應(yīng)用發(fā)送如下的過(guò)濾器:
(&(objectclass=printer)(type=Epson*))

使用這個(gè)查詢,如果有可用的Epson打印機(jī)蘑险,其圖標(biāo)就會(huì)顯示給客戶端滴肿,否則沒(méi)有圖標(biāo)出現(xiàn)。如果攻擊者進(jìn)行LDAP盲注入攻擊”)(objectClass=))(&(objectClass=void”佃迄,Web應(yīng)用會(huì)構(gòu)造如下查詢:

(&(objectclass=*)(objectClass=*))(&(objectClass=void)(type=Epson*))

僅對(duì)第一個(gè)過(guò)濾器進(jìn)行處理:

(&(objectclass=*)(objectClass=*))

結(jié)果是泼差,打印機(jī)的圖標(biāo)會(huì)一定顯示出來(lái),因?yàn)樵摬樵冇肋h(yuǎn)會(huì)有結(jié)果呵俏,過(guò)濾器objectClass=*總是返回一個(gè)對(duì)象堆缘。當(dāng)圖標(biāo)被顯示時(shí)響應(yīng)為真,否則為假普碎。
例如構(gòu)造如下的注入:

(&(objectClass=*)(objectClass=users))(&(objectClass=foo)(type=Epson*))

(&(objectClass=*)(objectClass=resources))(&(objectClass=foo)(type=Epson*))

這種代碼注入的設(shè)置允許攻擊者推測(cè)可能存在于LDAP目錄服務(wù)中不同對(duì)象類的值吼肥。當(dāng)響應(yīng)Web頁(yè)面至少包含一個(gè)打印機(jī)圖標(biāo)時(shí),對(duì)象類的值就是存在的麻车,另一方面而言缀皱,如果對(duì)象類的值不存在或沒(méi)有對(duì)它的訪問(wèn),就不會(huì)有圖標(biāo)出現(xiàn)动猬。

    - LDAP OR盲注

這種情況下啤斗,用于推測(cè)想要的信息的邏輯是相反的,因?yàn)槭褂玫氖荗R邏輯操作符赁咙。接下來(lái)使用的是同一個(gè)例子钮莲,OR環(huán)境的注入為:

         (|(objectClass=void)(objectClass=void))(&(objectClass=void)(type=Epson*))

這個(gè)LDAP查詢沒(méi)有從LDAP目錄服務(wù)獲得任何對(duì)象,打印機(jī)的圖標(biāo)也不會(huì)顯示給客戶端(FALSE)彼水。如果在響應(yīng)的Web頁(yè)面中有任何圖標(biāo)崔拥,則響應(yīng)為T(mén)RUE。故攻擊者可以注入下列LDAP過(guò)濾器來(lái)收集信息:

         (|(objectClass=void)(objectClass=users))(&(objectClass=void)(type=Epson*))
         (|(objectClass=void)(objectClass=resources))(&(objectClass=void)(type=Epson*))

0x04 LDAP注入防御

LDAP注入的防御跟SQL注入的防御其實(shí)差不多凤覆,主要就是要把用戶輸入的東西過(guò)濾好握童,基本就可以防御了。
下圖包含了LDAP中用到的特殊字符和需要轉(zhuǎn)義處理的字符:

左邊的字符在正常情況下是不會(huì)用到的叛赚,如果在用戶的輸入中出現(xiàn)了需要用反斜杠轉(zhuǎn)義處理澡绩。而右邊的圓括號(hào)這些如果不過(guò)濾的話就會(huì)導(dǎo)致過(guò)濾器閉合而生產(chǎn)攻擊者需要的filter稽揭,這里看到不僅是用反斜杠處理,還將字符變成了相應(yīng)的ASCII碼值肥卡,這些符號(hào)本不該出現(xiàn)溪掀。

這段php防御代碼可以記錄一下:

function ldapspecialchars($string) {
    $sanitized=array('\\' => '\5c',
                     '*' => '\2a',
                     '(' => '\28',
                     ')' => '\29',
                     "\x00" => '\00');

    return str_replace(array_keys($sanitized),array_values($sanitized),$string);
}

LDAP服務(wù)開(kāi)啟的端口是389,如果發(fā)現(xiàn)某個(gè)服務(wù)器上開(kāi)啟了該端口很可能就是開(kāi)啟了LDAP服務(wù)

0x05 參考文獻(xiàn)

http://www.cnblogs.com/r00tgrok/p/LDAP_INJECTION_AND_PREVENTION.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末步鉴,一起剝皮案震驚了整個(gè)濱河市揪胃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌氛琢,老刑警劉巖喊递,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異阳似,居然都是意外死亡骚勘,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)撮奏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)俏讹,“玉大人,你說(shuō)我怎么就攤上這事畜吊≡蠼” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵玲献,是天一觀的道長(zhǎng)殉疼。 經(jīng)常有香客問(wèn)我,道長(zhǎng)捌年,這世上最難降的妖魔是什么瓢娜? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮延窜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抹锄。我一直安慰自己逆瑞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布伙单。 她就那樣靜靜地躺著获高,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吻育。 梳的紋絲不亂的頭發(fā)上念秧,一...
    開(kāi)封第一講書(shū)人閱讀 51,488評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音布疼,去河邊找鬼摊趾。 笑死币狠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的砾层。 我是一名探鬼主播漩绵,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼肛炮!你這毒婦竟也來(lái)了止吐?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤侨糟,失蹤者是張志新(化名)和其女友劉穎碍扔,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體秕重,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡不同,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了悲幅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片套鹅。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖汰具,靈堂內(nèi)的尸體忽然破棺而出卓鹿,到底是詐尸還是另有隱情,我是刑警寧澤留荔,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布吟孙,位于F島的核電站,受9級(jí)特大地震影響聚蝶,放射性物質(zhì)發(fā)生泄漏杰妓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一碘勉、第九天 我趴在偏房一處隱蔽的房頂上張望巷挥。 院中可真熱鬧,春花似錦验靡、人聲如沸倍宾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)高职。三九已至,卻和暖如春辞州,著一層夾襖步出監(jiān)牢的瞬間浆洗,已是汗流浹背橡羞。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工标捺, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留迈螟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子妄痪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)楞件,斷路器衫生,智...
    卡卡羅2017閱讀 134,656評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,129評(píng)論 25 707
  • linux資料總章2.1 1.0寫(xiě)的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無(wú)法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,166評(píng)論 2 33
  • 陽(yáng)明心學(xué)莫名其妙的成了俗世的成功學(xué),若是王陽(yáng)明泉下有知大概會(huì)氣得活過(guò)來(lái)土浸。對(duì)于王陽(yáng)明來(lái)說(shuō)罪针,“君子喻于義,小人喻于利”...
    靈小貓閱讀 3,569評(píng)論 2 13
  • 最近頂著資金壓力黄伊,又做了研發(fā)泪酱,公司資金緊張,我又跟家里要錢(qián)繼續(xù)投入还最。這段時(shí)間包括我們的新的產(chǎn)品墓阀,還有研發(fā),都是需要...
    淡盡相思閱讀 122評(píng)論 0 0