Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Cara menjalankan latihan jarak jauh dengan suntikan LDAP kotak lebah

Cara menjalankan latihan jarak jauh dengan suntikan LDAP kotak lebah

WBOY
WBOYke hadapan
2023-05-13 09:49:051627semak imbas

Jika intipati SQL injection adalah splicing strings, maka intipati segala yang boleh disuntik adalah splicing strings tidak terkecuali sebagai sejenis suntikan juga menggabungkan kurungan, tetapi lebih konvensional untuk mengatakan bahawa ia menggabungkan rentetan).

Dalam bab konfigurasi persekitaran, konfigurasi persekitaran ldap dalam kotak lebah telah dibincangkan secara terperinci Bab latihan jarak tembak adalah lebih lanjut mengenai proses sambungan antara php dan ldap, dan pengenalan fungsi khas yang digunakan dalam proses. Beberapa petua untuk menyambung kurungan.

Mari kita bincangkan tentang proses log masuk julat menembak ldap di bwapp:

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

Pertama sekali, ini ialah antara muka log masuk LDAP, URL ialah http://192.168.3.184/bWAPP/ldap_connect.php, lihat apa yang tertulis dalam fail php ini.

Penjelasan terperinci tentang fungsi LDAP sambungan php

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

Bermula dari kod 133 fail ldap_connect.php, lima pembolehubah ialah $message, $login, $ kata laluan, $server, $dn.

Untuk apakah yang pertama daripada lima pembolehubah ini Yang kedua ialah nama pengguna untuk log masuk ke pelayan ldap, yang ketiga ialah kata laluan, yang keempat ialah alamat pelayan, dan yang kelima ialah nama yang terkenal (terangkan satu laluan LDAP penuh).

Pernyataan if pertama adalah untuk mengosongkan borang LDAP log masuk, dan pernyataan if kedua adalah untuk menentukan sama ada lima pembolehubah ini adalah nilai nol Perkara utama ialah perkara berikut else Pada permulaannya, terdapat beberapa pernyataan if and else Mari kita pergi satu persatu.

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

Pertama lihat tiga fungsi ldap_connect, ldap_set_option, ldap_bind sebelum yang pertama if, dan terangkan fungsi ketiga-tiga fungsi ini secara bergilir.

ldap_connect: digunakan untuk menyambung ke pangkalan data ldap, formatnya seperti berikut

$server = “localhost”

$LDAPCONN=LDAP_Connect($server)

Jika $ Nilai pulangan LDAPCONN ialah jenis angka Apabila hasil pulangan ialah 0, sambungan gagal dan apabila hasil pulangan ialah nilai lain, sambungan berjaya.

ldap_set_option($link_identifier,$option, &$retval): Menerima tiga parameter

$link_identifier

Pengecam sambungan LDAP dikembalikan oleh fungsi ldap_connect() (menentukan LDAP Sama ada sambungan berjaya)

Nilai yang boleh diterima untuk $option adalah seperti berikut:

LDAP_OPT_DEREF(int): Cara mengendalikan alias semasa mencari, julat nilai adalah seperti berikut: LDAP_DEREF_NEVER (0, nilai lalai), LDAP_DEREF_SEARCHING (1), LDAP_DEREF_FINDING(2), LDAP_DEREF_ALWAYS(3)

LDAP_OPT_NETWORK_TIMEOUT(int): Tamat masa rangkaian saat, LDAP_NO_LIMIT(0, nilai lalai) bermaksud tidak pernah tamat masa.

LDAP_OPT_PROTOCOL_VERSION(int): Menentukan versi protokol LDAP yang digunakan, julat nilai adalah seperti berikut: LDAP_VERSION2 (2, nilai lalai), LDAP_VERSION3 (3).

LDAP_OPT_REFERRALS(bool): Sama ada pustaka LDAP secara automatik mengikut rujukan yang dikembalikan oleh pelayan LDAP Julat nilai adalah seperti berikut: TRUE (1, nilai lalai), FALSE (0).

&$retval Pembolehubah yang menerima nilai pilihan

Sebagai contoh, kod dalam bwapp:

ldap_set_option($ds,LDAP_OPT_PROTOCOL_VERSION, 3);

Ayat ini Maksud kod ialah jika sambungan ldap berjaya, maka nyatakan protokol yang digunakan oleh LDAP sebagai versi 3. (Tidak perlu terperinci di sini, semuanya adalah format yang berkenaan)

ldap_bind($link_identifier,$bind_rdn,$bind_password)

$link_identifier: LDAP sambungan pengecam dikembalikan oleh fungsi ldap_connect() (tentukan LDAP sama ada sambungan berjaya)

$bind_rdn: Gunakan rdn yang ditentukan, iaitu laluan log masuk, seperti cn=admin,dc=bwapp,dc=local

$ bind_password: Tentukan kata laluan log masuk.

ldap_search($link_identifier, $dn,$filter): Fungsi carian direktori LDAP, berjaya mengembalikan deskriptor sumber set hasil, yang biasanya dirujuk oleh fungsi lain sebagai $result_identifier dan mengembalikan FALSE apabila gagal.

$link_identifier: pengecam sambungan LDAP dikembalikan oleh fungsi ldap_connect() (untuk menentukan sama ada sambungan berjaya)

$dn: DN direktori yang hendak dicari

$filter: Cari penapis. Contohnya, "(objectClass=*)" bermaksud mencari semua entri (untuk fungsi baca, ia bermaksud semua atribut).

Kod sumber dalam bwapp: ldap_search($ds, $dn,$filter), di mana $ds=ldap_connect(),

$dn="DC=bwapp,DC=local", $filter=(cn=*) (iaitu, semua julat cn). Ketiga-tiga parameter ini menunjukkan bahawa fungsi ldap_search menunjukkan bahawa semua direktori pelayan semasa ditanya (berbanding dengan bwapp).

ldap_count_entries($link_identifier,$search): Mengembalikan bilangan hasil pertanyaan

$link_identifier: Pengecam sambungan LDAP dikembalikan oleh fungsi dap_connect() (untuk menentukan sama ada sambungan berjaya)

$search:= ldap_search($link_identifier, $dn, $filter) mengembalikan set hasil pertanyaan.

Pada ketika ini fungsi telah hampir dianalisis, mari kita lihat idea umum fail sambungan ini.

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

Dari baris 149 hingga 163, kod menentukan sama ada pelbagai nilai yang diperolehi adalah kosong Jika ia kosong, mesej segera dilemparkan.

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

Baris 165 hingga 198 digunakan untuk menentukan sama ada talian 165 hingga 184 digunakan untuk menentukan sama ada perkhidmatan ldap wujud ialah nama pembezaan (bersamaan dengan nama pangkalan data).

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

Dari baris 200 hingga baris 236 adalah untuk menentukan sama ada dn yang sepadan wujud, iaitu sama ada laluan ldap yang sepadan wujud Jika ia tidak wujud, mesej gesaan yang sepadan akan dilemparkan Jika wujud Panggil ldapi.php, iaitu pertanyaan ldap. Selepas mendapat keputusan pertanyaan dalam ldapi, hasilnya adalah output sebagai jadual.

Pengenalan kepada fail php hasil pertanyaan LDAP

Tempat di mana jadual dikeluarkan adalah dalam fail ldapi.php Seterusnya, lihat kod dalam ldapi.php.

Mulakan terus dari baris 231. Dari baris 231 hingga baris 240 semuanya disebutkan di atas di atas. Bahagian

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

Jika direktori LDAP berjaya diikat, pertanyaan akan bermula dari baris 242

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

Daripada menerima nilai pengguna parameter POST kepada mewujudkan alias ($search_field_1, $search_field_2, $search_field_3) dan menentukan penapis ($filter) (penapis ialah pernyataan pertanyaan, serupa dengan pernyataan sql) , peraturan sintaks adalah seperti berikut:

运算符   字符   用途  
等号   =   创建一个要求某一字段必须拥有给定值的过滤器。  
任何   *   代表可以等于除 NULL 以外任何值的字段。  
括号   ( )   分离过滤器,以让其他逻辑运算符发挥作用。  
与   &   结合过滤器。相应系列的所有条件都必须为真。  
或   |   结合过滤器。相应系列中必须至少有一个条件为真。  
非   !   排除符合过滤条件的所有对象。  

Kembalikan semua objek yang mungkin menyebabkan masalah pemuatan:

objectClass=*

Kembalikan semua objek pengguna yang dinyatakan sebagai "orang":

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

Kembalikan senarai mel sahaja:

(objectCategory=group)

Kembalikan folder awam sahaja:

(objectCategory=publicfolder)

Mengembalikan semua objek pengguna, tetapi tidak termasuk objek pengguna yang alamat e-mel utamanya bermula dengan "ujian":

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

Mengembalikan semua objek pengguna kecuali objek yang alamat e-mel utamanya berakhir dengan "test":

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

Mengembalikan semua objek pengguna, tetapi tidak termasuk objek yang alamat e-mel utamanya mengandungi perkataan "test":

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

Mengembalikan semua fail yang dinyatakan sebagai "orang" dan tergolong dalam kumpulan tertentu Atau tetapkan senarai semua objek pengguna dan objek alias:

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

Mengembalikan semua objek yang dinyatakan sebagai objek pengguna "orang", semua objek kumpulan dan semua kenalan, tetapi kecualikan sebarang objek yang nilainya ditakrifkan sebagai "extensionAttribute9":

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

Kembalikan semua pengenalan DN (CN=GRoup,OU=Users,DC=Domain,DC) Pengguna yang merupakan ahli kumpulan:

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

Mengembalikan semua pengguna:

Microsoft® Active Directory® LDAP Server: (&(objectCategory=person)(objectClass=user))

OpenLDAP™ Server: (objectClass=inetOrgPerson)

IBM® Notes®Domino LDAP Server: (objectClass= dominoPerson)

Cari IBM Notes Domino LDAP untuk semua objek yang alamat e-melnya ditakrifkan sebagai "orang" atau "kumpulan":

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

Direktori Aktif: Mengembalikan semua pengguna yang sah (tidak dinyahaktifkan) dengan alamat e-mel:

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

Kembali ke semua kumpulan DN Kumpulan mengenal pasti pengguna yang menjadi ahli Kumpulan_1 atau Kumpulan_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)))

Mengembalikan semua pengguna yang nilai extensionAttribute1 ialah "Kejuruteraan" atau "Jualan"

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

Peraturan sintaks diperkenalkan, dan kemudian kod bermula dari 267 dianalisis

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

$ldap_fields_to_find mentakrifkan tatasusunan untuk memudahkan Cetak borang output dan terima hasil pertanyaan ldap Gunakan $ldap_fields_to_find sebagai parameter keempat fungsi ldap_search, yang bermaksud menggunakan alias ini untuk menyimpan hasil yang diterima, iaitu, dalam bentuk pasangan nilai kunci. , dan kemudian kembalikan hasil kepada tatasusunan $info , dan akhirnya memetakan setiap kunci kepada setiap pembolehubah dari baris 287 ke baris 291, dan akhirnya menggelungkan output dan mencetak jadual Pada ketika ini, pertanyaan selesai.

Pengenalan ringkas kepada sintaks penyambungan suntikan LDAP

Memandangkan penapis LDAP adalah serupa dengan pernyataan pertanyaan sql, lihat sahaja cara menulis penapis dalam bwapp. Lihat terus pada pembolehubah $filter dalam fail ldapi.php:

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

Intipati pernyataan sql terletak pada penyambungan petikan tunggal, dan intipati pernyataan ldap terletak pada penyambungan kurungan.

Sekarang saya ingin menanyakan semua pengguna, hanya masukkan * terus dalam pengguna, kemudian $filter akan menjadi $filter="(|($search_field_1=*)($search_field_2=*)($ search_field_3=*) )";

Tengok keputusan dalam bwapp

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

Banyak pengguna dipulangkan tetapi tidak cukup kerana saya ingin melihat pentadbir saya, maka saya akan bina penapis LDAP sedemikian.

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

Dengan cara ini saya boleh menanyakan semua Bagi pengguna, termasuk pentadbir, objectclass=* bermaksud mencari selagi ia wujud, iaitu secara global.

Kemudian masukkan *)(objectclass=* pada pengguna.

Lihat hasilnya. Pentadbir muncul dan suntikan berjaya.

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

Atas ialah kandungan terperinci Cara menjalankan latihan jarak jauh dengan suntikan LDAP kotak lebah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam