Injeksi LDAP adalah bentuk serangan web di mana seorang penyerang memanfaatkan website yang membangun pernyataan LDAP dari input yang diberikan oleh pengguna.
Menurut Wikipedia Lightweight Directory Access Protocol (LDAP) adalah protokol aplikasi untuk mengakses dan memelihara layanan informasi direktori didistribusikan melalui Internet Protocol (IP) jaringan. LDAP pada awalnya ditujukan untuk menjadi protokol alternatif ringan untuk mengakses layanan direktori X.500 melalui sederhana (dan sekarang tersebar luas) TCP / IP stack protokol. Model akses direktori dipinjam dari protokol Layanan Bantuan DIXIE dan direktori.
Ketika sebuah aplikasi web tidak dapat benar membersihkan masukan yang diberikan oleh pengguna, adalah mungkin bagi penyerang untuk mengubah pernyataan LDAP, ini dapat menimbulkan masalah keamanan serius dan dapat membantu penyerang untuk menambah / memodifikasi pohon LDAP. Injeksi LDAP agak mirip dengan SQL Injection serangan.
LDAP Injection |
Menurut Wikipedia Lightweight Directory Access Protocol (LDAP) adalah protokol aplikasi untuk mengakses dan memelihara layanan informasi direktori didistribusikan melalui Internet Protocol (IP) jaringan. LDAP pada awalnya ditujukan untuk menjadi protokol alternatif ringan untuk mengakses layanan direktori X.500 melalui sederhana (dan sekarang tersebar luas) TCP / IP stack protokol. Model akses direktori dipinjam dari protokol Layanan Bantuan DIXIE dan direktori.
Ketika sebuah aplikasi web tidak dapat benar membersihkan masukan yang diberikan oleh pengguna, adalah mungkin bagi penyerang untuk mengubah pernyataan LDAP, ini dapat menimbulkan masalah keamanan serius dan dapat membantu penyerang untuk menambah / memodifikasi pohon LDAP. Injeksi LDAP agak mirip dengan SQL Injection serangan.
Contoh
Kode Rentan:
baris 1 using System;
baris 2 menggunakan System.Configuration;
baris 3 menggunakan System.Data;
line 4 menggunakan System.Web;
baris 5 menggunakan System.Web.Security;
line 6 menggunakan System.Web.UI;
baris 7 menggunakan System.Web.UI.HtmlControls;
baris 8 menggunakan System.Web.UI.WebControls;
line 9 menggunakan System.Web.UI.WebControls.WebParts;
baris 10
line 11 menggunakan System.DirectoryServices;
baris 12
baris 13 public partial class _Default: System.Web.UI.Page
baris 14 {
baris 15 protected void Page_Load (object sender, EventArgs e)
baris 16 {
baris 17 tali username;
baris 18 entri DirectoryEntry;
baris 19
baris 20 username = Request.QueryString ["user"];
line 21
baris 22 if (String.IsNullOrEmpty (username))
baris 23 {
line 24 Response.Write (". <b> permintaan tidak valid Silakan tentukan nama pengguna yang valid </ b> </ br>");
baris 25 Response.End ();
baris 26
baris 27 kembali;
baris 28}
baris 29
baris 30 DirectorySearcher pencari = DirectorySearcher baru ();
baris 31
baris 32 searcher.Filter = "(& (SAMAccountName =" + username + "))";
baris 33
baris 34 hasil SearchResultCollection = searcher.FindAll ();
baris 35
baris 36 foreach (hasil SearchResult di hasil)
baris 37 {
baris 38 entri = result.GetDirectoryEntry ();
baris 39
baris 40 Response.Write ("<p>");
baris 41 Response.Write ("<b> <u> Informasi pengguna untuk:" + entry.Name + "</ u> </ b> Situs");
baris 42
baris 43 foreach (string proName di entry.Properties.PropertyNames)
baris 44 {
baris 45 Response.Write ("Situs Properti:" + proName);
baris 46
baris 47 foreach (object val di entry.Properties [proName])
baris 48 {
baris 49 Response.Write ("Situs Nilai:" + val.ToString ());
baris 50}
baris 51}
baris 52
baris 53 Response.Write ("</ p>");
baris 54}
baris 55}
baris 56}
Kode di atas rentan terhadap LDAP Injection, Anda harus berpikir apa yang membuat kode di atas rentan terhadap injeksi LDAP? Jadi setelah melihat kode, Anda akan melihat bahwa di Jalur 20 bahwa username variabel initilaized dengan pengguna nilai dan diperiksa jika nilai kosong atau tidak. On line 32, username yang digunakan untuk menginisialisasi properti filter.Dalam contoh di atas, seorang penyerang akan memiliki kontrol penuh atas permintaan dan permintaan yang dilakukan ke server LDAP, dan ia akan mendapatkan hasil dari semua pertanyaan.
Mari kita ambil contoh lain untuk memahami injeksi LDAP benar.
Contoh:
<Input type = "text" size = 10 nama = "nama"> Masukkan nama yang ingin Anda cari </ input>
Ambil contoh halaman HTML sederhana yang mencari nama pengguna diinput. Kode di atas akan mencari nama, dan akan menghasilkan query LDAP berikut.
String ldapSearchQuery = "(cn =" + $ username + ")";
System.out.println (ldapSearchQuery);
. Jika variabel $ username tidak dibersihkan dengan benar, injeksi LDAP bisa mengambil tempat seperti jika pencarian penyerang * bukan nama, maka akan kembali setiap nama pengguna yang tersimpan dalam database LDAP saya f pengguna menempatkan dalam mike) (| ( . password = *) ini akan membuat permintaan pencarian ldap seperti (cn = mike) (| (password = *)) yang akan mengembalikan pengguna mike password dari database.
Memperbaiki LDAP Injection
Untuk memperbaiki LDAP Injection, input pengguna harus dibersihkan dengan benar dan disaring, input pengguna harus terlebih dahulu diverifikasi, dan masukan yang salah harus ditolak sehingga pengguna dapat memasukkan input yang benar. Pengguna harus dibatasi untuk menggunakan karakter seperti * () |