Wednesday 8 July 2015

Cara Eksploitasi LDAP Injection?

Injeksi LDAP adalah bentuk serangan web di mana seorang penyerang memanfaatkan website yang membangun pernyataan LDAP dari input yang diberikan oleh pengguna.


Exploiting LDAP Injection
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 * () | 

No comments:

Post a Comment