Copy Link
Add to Bookmark
Report

6x14 LDAP Web Injection Techniques

eZine's profile picture
Published in 
phearless
 · 11 months ago

	                              
...................
...::: phearless zine #7 :::...

..................>---[ LDAP Web Injection Techniques ]---<......................

......................>---[ by h44rP a.k.a. Laufer ]---<.........................
haarp[at]phearless[dot]org


[0x01] Intro
[0x02] LDAP introduction
[0x03] Search queries explained
[0x04] Attacking LDAP
[0x05] Data validation prevention
[0x06] Outro



///////////////////////////////////////////////////////////////////////////
-----> 0x01 Intro
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


josh pred par godina dok sam bio admin na jednom stroju sam se zainteresirao
za sam ldap i njegov rad i ranjivosti i sada nedavno pricajuci sa frendom
na icq-u kaze mi da pise fuzzer za ldap i ja se opet sjetim genijalnih starih
dana pa tako sam se evo odlucio prisjetiti i malo stogod napisati sto se tice
samog ldap-a tocnije u ovom slucaju ldap web injectiona koji nisu nikakva
velika nepoznanica u svijetu web security-a.. nadam se da cete shvatiti sve
o cemu se govori ovdje u txt-u i znati upotrijebiti ono procitano.. samo
predznanje nije neki utjecajni cimbenik na samo shvacanje teksta ali je
naravno puno bolje ako ste radili s ldap-om, administrirali te konfigurirali
isti ali ako niste valjda ce biti prilike.. nista zato. krenimo mi na posao.


///////////////////////////////////////////////////////////////////////////
-----> 0x02 LDAP introduction
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


ldap? pretpostavljam da svi znaju dosta o samom ldap-u ali red je da se kao
prvo upoznamo s protokolom odnosno tehnologijom o kojem ce se ovdje govoriti.
dakle sam ldap stoji za: Lightweight Directory Access Protocol a u biti je
protokol koji se koristi za pristupanje informacijskim direktorijima.. pa
sta bi to znacilo i kamo ga mozemo sresti u praksi.. pa recimo za primjer
carnet za svaki svoj posluzitelj koji vrti ldap ima mogucnost pristupa web
ldap sadrzaju putem /ldap dir-a. cemu sluzi? u ovom slucaju svaki korisnik
koji koristi cmu odnosno carnet modemske ulaze i obavlja autorizaciju preko
radiusa ovdje ima mogucnost koristeci svoj login i password da pristupi
svojim ldap podacima i po potrebi ih izmijeni. ldap je u biti imenicki servis
i svaki recimo u ovom slucaju pozluzitelj koji drzi svoj neki domen ima za
to odgovarajuci imenik korisnika.. ono sto se ovdje nudi korisniku jest
promjena lozinke te azuriranje podataka unutar ldap imenickog servisa..
primjer jednog korisnika:

**************************************

Ažuriranje podataka Promjena zaporke Odjava
------------------------------------------------------------
Prikaži samo obavezne atribute
------------------------------

Korisnicka oznaka (hrEduPersonUniqueID) pperic@fer.hr *

Identifikator korisnika u ustanovi (uid) pperic *

Ime i prezime (cn) Pero Peric *

Prezime (sn) Peric *

Ime (givenName) Pero *

Elektronicka adresa (mail) Pero.Peric@fer.hr *

Telefonski broj (telephoneNumber) -
Dodaj Obriši

Lokalni telefonski broj (hrEduPersonExtensionNumber) -

Broj mobilnog telefona (mobile) -
Dodaj Obriši

Fax broj (facsimileTelephoneNumber)
Dodaj Obriši

Brojcani identifikator osobe (hrEduPersonUniqueNumber)

LOCAL_NO: XXX-4624014725/03 *

Datum rodenja (hrEduPersonDateOfBirth) -

Spol (hrEduPersonGender) -

Slika (jpegPhoto) -

URI adresa (labeledURI) -
Obriši

Strucni status (hrEduPersonProfessionalStatus) -

Zvanje (hrEduPersonAcademicStatus) -

Podruc(je znanosti (hrEduPersonScienceArea) -

Povezanost s ustanovom (hrEduPersonAffiliation) student *

Temeljna povezanost s ustanovom (hrEduPersonPrimaryAffiliation)
student *
Vrsta studenta (hrEduPersonStudentCategory)

Datum isteka temeljne povezanosti (hrEduPersonExpireDate) NONE *

Položaj u ustanovi (hrEduPersonTitle) -

Uloga u ustanovi (hrEduPersonRole) -

Vrsta posla u ustanovi (hrEduPersonStaffCategory)

Pripadnost grupi (hrEduPersonGroupMember)

Naziv maticne ustanove (o) Sveuciliste u Zagrebu *

Oznaka maticne ustanove (hrEduPersonHomeOrg) fer.hr *

Organizacijska jedinica (ou) (none)

Broj sobe (roomNumber) -
Obriši

Poštanska adresa (postalAddress) ************, HR-10000 Zagreb *

Mjesto (lokalitet) (l) Zagreb *

Poštanski broj (postalCode) -

Ulica i kucni broj (street) -

Kucna poštanska adresa (homePostalAddress) -

Kucni telefonski broj (homeTelephoneNumber) -

Desktop uredjaj (hrEduPersonCommURI) -

**************************************

ovo sam samo iznio kao primjer sto sve moze biti sadrzaj odredjenog ldap
imenickog servisa.. ovdje je sve izmijenjeno.. nikakve informacije nisu korisne
tako da je ovo jednostavno samo kao predlozak sto sve sadrzavaju korisnicki
unosi u ldap-u. napomenuo sam da bi bilo pozeljno da ste radili sa ldap-om,
slapd-om te da ste upuceni u njegove mogucnosti i upotrebu. neda mi se sad
ovdje pretjerano pricati o samom ldap-u kao takvom.. bacite oko na rfc pa
proucite malo.. oni koje zanima vec jesu pa stoga mozemo dalje..

btw necu niti pricati o ldapsearch i ostalim ldap alatima komandnog sucelja jer
ima previse toga.. parametara na bacanje itd. instlirajte si pa malo proucite
ako vas zanima lokalno koristenje samog ldap servisa.. jbg. nemam vremena.. :(


///////////////////////////////////////////////////////////////////////////
-----> 0x03 Search queries explained
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


dakle dosli smo do dijela kada cu napokon reci o cemu se zapravo radi ovdje
i kakve ldap koristi querie za dobavaljanje odredjenih informacija.. ldap
injection podrazumijeva naravno ubacivanje dodatnih QUERY ldap komandi u
web app input kako bismo dobili podatke koje nebismo smjeli ili cak zaobisli
autorizaciju.. naravno stvar je jako slicna sql injectionu i zapravo opasnost
po sam ldap je ista kao i za sql. sto je ranjivo? pa svi php, java... kodovi
koji pristupaju ldap-u odnosno rade s query-ima bez data validationa etc.

osnovni query agument je "user" i zapravo pretrazuje ldap direktorij u
potrazi za korisnickim cn (common name)-om, mailom .. ... znaci recimo primjer

*****************
http://...ldap-search.asp?user=pperic

cn Pero Peric
mail: pero.peric@fer.hr
*****************

znaci query radi slijedece.. uzima nas input.. koji je u ovo slucaju pperic
te s njime pretrazuje znaci parametre koje sadrzava sam ldap.. u ovom slucaju
mail i cn.. s time da pretrazuje odredjenu domenu ou,dc itd. pretrage.. prema
tome se pretrazuje stablo ou,dc,dc u potrazi za trazenima parametrima..


///////////////////////////////////////////////////////////////////////////
-----> 0x04 Attacking LDAP
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


dakle.. ovi query koji se salju ldap-u naravno uzimaju se od strane web app-a
te proslijedjuju dalje.. problem je kada nije filtriran sadrzaj (kao i uvijek)
koji se daje na danju obradu odnosno na proslijedjivanje.. string koji se unosi
znaci moze nemati limitrane charove te omoguciti unos odredjenih query-a preko
kojih lako mozemo dobiti informacije koje nebismo smjeli i sl. unos svakavog
smeca u input box naravno gotovo nikad nece biti moguc no umetanje nekih spec
charova poput "()|&%" moze biti i te kako zanimljivo.. nacin na koji mozete
provjeriti dali je moguce da propusta odredjene stvari sam app jest da dodate
symbole odredjene u sam input box.. primjer:

*****************
http://...ldap-search.asp?user=pperic|
*****************

*****************
http://...ldap-search.asp?user=pperic)
*****************

etc. znaci http://...ldap-search.asp?user=pperic| bi bio query koji kada nebi
bio vracen error bi znacio da nema limitiranja "|".. znaci kod unosa bio bi
kao (parametar=unos&ili|) etc.. dakle ono sto je zanimljivo jest to da mozemo
kombinacijom dobiti odredjene informacije.. kako? primjer:
(parametar=unos)(|(cn=*)) bi vracao bilo koji common name unos. dakle moramo
injectati kod koji izgleda kao pperic)(|(cn=*)) i output ako prodje i vrati
cm Pero Peric znaci da smo na dobro putu odnosno da je moguce nesto uraditi.

ono sto nam treba jeste objectclass lista tj. moramo znati koje parametre
mozemo zatraziti tj. dobiti. primjer:

*****************
http://...ldap-search.asp?user=pperic)(|(objectclass=*))
*****************

kada dobijemo listu objeclass mozemo testirati i vidjeti za svaki dali imamo
pravo pristupa podacima.. gore na pocetku kada sam vam dao primjer jednog
usera vidite da postoje polja poput uid-a, cn-a itd. po pravilu mi mozemo
na ovaj nacin vidjeti svaki ovaj atribut.. primjer:

*****************
http://...ldap-search.asp?user=pperic)(|(hrEduPersonUniqueID=*))
*****************

trebao bi dobiti output kao:

(hrEduPersonUniqueID) pperic@fer.hr

isto tako cak je moguce uraditi pregled usera te sveg njihova info-a tako
sto za user value stavimo *... znaci ...?user=*


///////////////////////////////////////////////////////////////////////////
-----> 0x05 Data validation prevention
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


kako sprijeciti ovakve vrste info leak-a i auth bypass-a.. naravno, odgovor
je filtriranjem sadrzaja stringa koji se peuzima iz web app-a.. znaci da se
radi validation na incoming i outgoing podatke.. znaci kodgod je moguce
koristite samo brojeve, takodjer konvertirajte sve simbole u html..
npr.
uvijek treba odraditi validaciju tipa, uzorka te naravno vrijednosti domene:

int userinput = Convert.ToInt32(Request.Querystring(“userinput”)
string email = Regex.IsMatch(Request.Querystring(“email”),” ^.+@[^\.]
.*\.[a-z]{2,}$” )
string country = Request.Querystring(“country”) in {“USA”, “UK”}


///////////////////////////////////////////////////////////////////////////
-----> 0x06 Outro
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


to je to.. kratko i nadam se jasno.. kome treba kakva pomoc ili ako netko
ima bilo kakva pitanja ili sugestije neka pise na haarp[at]phearless[dot]org.
sorry na svim greskama i sranjima jer je sve natipkano u kratkoj pauzi od
kodiranja neceg sto bi trebalo da izadje za #7 ako bog da :) do citanja...

veliki poz: shatter, h4z4rd, aca, exoduks, ap0x, argv, n00ne, bl00d, SiKe,
furia, leech i onima koje sam nenamjerno zaboravio.. sorry :)


\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT