Instrutor: Ok, agora eu gostaria
de mostrar uma injeção de SQL e
em um
arquivo e página diferentes. Mostrarei algumas coisas
diferentes que você pode fazer para explorar a vulnerabilidade.
Então, a primeira coisa que vou para a página
de login que está aqui.
Informação de usuário.
Então, na primeira vez em que acessamos a página de login, desta
vez, acessamos a página Informações do usuário.
Portanto, esta página mostrará as informações sobre o usuário, desde que
você forneça o nome de usuário e a senha.
Então, eu vou
fazer zaid e vou colocar minha senha, 123456.
E mostrará meus detalhes, nome de usuário e senha e
minha assinatura como aa.
Portanto, a instrução que está sendo executada
aqui é semelhante à que estava sendo executada quando
você faz login.
Portanto, selecionar estrela nas contas em
que nome de usuário é o que você coloca no campo de
usuário e senha é o que você coloca no campo de senha.
Então, o que vamos fazer agora
é ver uma maneira diferente de explorar
esse tipo de vulnerabilidade.
No vídeo
anterior, estávamos fazendo isso usando uma caixa de texto POST.
Portanto, o que você colocou
na caixa de texto estava sendo postado usando um método POST no aplicativo Web.
Agora, essas vulnerabilidades podem existir no GET.
E o que quero
dizer com Get é que quando você faz um Get quando algo é enviado
como GET, você o vê aqui no URL.
Portanto, se você olhar
o URL aqui, verá que ele está sendo enviado como o
nome de usuário zaid e a senha 123456.
Então deixe-me copiar esse URL aqui.
E começaremos a jogar com
ele a partir do URL, em vez de fazê-lo na página da web.
Eu só quero mostrar um
exemplo diferente, porque em muitos lugares,
pode até não haver caixas
de texto, por exemplo, pode ser algo como
notícias e notícias. php, para que possamos ver aqui, por exemplo,
neste exemplo, é o índice. php.
E no teste da caneta, você pode
ver algo como notícias. php e,
por exemplo, id é igual a dois e
então você pode tentar injetar coisas lá.
Então, nós estamos tendo
um exemplo aqui em que
injetaremos coisas no campo de nome de usuário,
que é esse campo, e injetaremos coisas aqui.
Portanto, sempre que você estiver fazendo seu
teste com caneta, sempre que vir parâmetros como
este, tente injetá-los.
Sempre que você vê alguma coisa. php e
então você tem um parâmetro igual a algo,
então sempre tente injetar coisas lá e veja
se funciona para você.
Então, também vimos uma maneira de descobrir a
injeção, que estava usando as aspas e
usando e.
Então, fazemos um falso e um verdadeiro e e
um é igual
a um e então e
um é igual a dois e se o servidor estiver
executando o que queremos, saberemos que há uma injeção de SQL.
Vou mostrar
outra maneira de descobrir
essas explorações e usar a ordem por.
Como o nome
sugere, a ordem por instrução é
usada para ordenar os resultados que obtemos na tela
com base em uma coluna específica.
Então, nossa injeção será assim.
Então eu vou fazer um pedido por um.
Portanto, se a injeção existir, isso funcionará porque
em
cada instrução de seleção, deve
haver pelo menos uma coluna sendo selecionada.
Portanto, quando dizemos ordem por
um, estamos dizendo que quero ordenar os resultados
com base na
primeira coluna; portanto, isso sempre deve ser aceitável
pelo banco de dados.
E devolver um verdadeiro ou algo que esperamos.
Também precisamos adicionar o comentário aqui
e executar este código.
Então é exatamente como antes.
Então, quando estamos
fazendo isso, basicamente essa é a nossa URL e o que vai
acontecer no banco de dados, então
esse é o código que
está sendo executado no banco de dados, ficará assim.
Portanto, será selecionada uma estrela nas
contas em que o nome
de usuário é igual a zaid e observe
como isso está fechando a cotação. Vamos fazer um pedido por um
e não deve haver esse código
para e, e esse comentário dirá ao Intérprete SQL para ignorar qualquer coisa
que vem depois dele, então
tudo isso será ignorado.
Então, eu estou copiando isso.
Então você pode colar essa injeção por
ordem zaid por uma
no nome aqui e isso vai funcionar, mas,
novamente, eu só quero mostrar uma
maneira diferente de fazer isso, injetando-a no navegador.
Outra coisa que quero que
você note é
que quando você injeta coisas no navegador, o navegador, o código deve ser codificado.
Por exemplo, esse sinal geralmente, quando você
o coloca no
URL, deve ser escrito como% 23.
Os espaços, por exemplo, são convertidos
em% 20 e% 23 é o comentário que estamos usando.
Então eu vou copiar isso e substituir meu sinal de comentário por ele.
Agora, você pode pesquisar no Google HTTP
Encoder e ver on-line, existem
ferramentas on-line que convertem isso para você.
Para mim, agora eu sei que a hashtag
pode ser convertida para% 20.
É por isso que estou usando lá.
E eu vou pressionar Enter.
E como você
pode ver agora, estamos vendo algo aceitável.
Nada de errado e, em seguida, está me mostrando
as informações sobre o zaid 123456 e me mostrando a assinatura.
Portanto, está ignorando a senha, portanto
a injeção funcionou e
está sendo solicitada por uma, para
que não esteja me mostrando nada de errado.
Vamos tentar fazer deste número um um número
muito grande, então vou colocar 10.000 ou 100.000 agora.
Então, o que
estamos dizendo agora é que você
solicita os resultados que serão retornados pela instrução de
seleção atual com base na coluna 100.000.
Agora, é provável que não haja 100.000 colunas usadas
nessa instrução select
e, portanto, isso deve retornar um erro.
Então, quando eu executar
isso, você verá que há um erro.
E o erro está na ordem de fechamento.
E ainda existe uma coluna Desconhecida para 100.000, e isso é ótimo, porque
agora sabemos que o
banco de dados está executando o que queremos.
Então, quando pedimos para ordenar os resultados
com base na primeira coluna, ele nos mostrou resultados.
Por isso, seguimos o que dissemos
e, em
seguida, quando solicitamos os resultados com base em uma
coluna que não existe, isso nos deu um erro.
Portanto, é obviamente vulnerável a injeções de SQL.