SEG Lab 1 - Web SQL Injection
Conteúdos
- Modelo Relatório
- SEG Lab 1 - Web SQL Injection
- SEG Lab 2 - Cross-Site Scripting (XSS) Attack Lab
- SEG Lab 3 - Cross-Site Request Forgery Attack Lab
- SEG Lab 4 - Packet Sniffing and Spoofing Lab
- SEG Lab 5 - ARP Cache Poisoning Attack Lab
- SEG Lab 6 - ICMP Redirect Attack Lab
- SEG Lab 7 - TCP Attacks
Nome da Atividade: Web SQL Injection
Nome e Matrícula: Lucas Lima do Nascimento - 12111ECP024
1. Task 1: Get Familiar with SQL Statements.



2.1. SQL Injection Attack from webpage.


Digitar a string admin’;# faz com que a query não necessite mais de senha, já que sabemos que a cláusula WHERE corresponde à:
WHERE name= ’$input_uname’ and Password=’$hashed_pwd’";
Ao usar input_uname com esse valor, obtemos a seguinte query nova:
WHERE name= ’admin’; #’ and Password=’$hashed_pwd’";
Que comenta o resto da linha do WHERE e elimina a necessidade da senha.
2.2. SQL Injection Attack from command line.

URL completa:
http://www.seed-server.com/unsafe_home.php?username=admin'%3B%23&Password=
Retorno: 200 - Página HTML

2.3. Append a new SQL statement.
Ao inserir um novo SQL statement, ocorreu um erro na query:


Pelo erro obtido, imagino que a medida para impedir a execução seja algo relativo à quebra de linha de multiple statements ou algo relativo à character escaping.
3. SQL Injection Attack on UPDATE Statement
3.1 Modify your own salary.
Primeiro, para acessar, podemos utilizar a mesma técnica de exploit inicial:


Ao utilizarmos a ideia de fechar o valor do campo anteriormente com ‘, podemos colocar um outro campo à ser editado (nesse caso salary) e seu valor correspondente. Alice ganhou o dobro de salário!


3.2 Modify other people’ salary.
Podemos agora, acessar a conta do Boby usando o exploit inicial de acesso sem senha e replicar os passos feitos para Alice, alterando seu salário.




3.3 Modify other people’ password.
Podemos agora, acessar a conta do Boby usando o exploit inicial de acesso sem senha e alterar sua senha. Podemos fazer isso de duas formas:
- Alterando (no painel de edição) a senha desejada
- Inserindo um novo campo (como feito no exercício anterior) no
UPDATEcom o valor da senha criptografado por um SHA1.
Para efeito de demonstração, alterei manualmente no painel de edição, mas mostrei o valor da senha SHA1 que retornaria o resultado desejado utilizando um site que faz esse tipo de algoritmo.




3.4. Prepared statement.
Inicialmente, começamos com o site inseguro, vulnerável aos mesmos ataques descobertos no início da atividade.


Fiz as modificações necessárias no arquivo unsafe.php, transformando a query em uma query segura:

Ao rebuildar o container, ainda conseguimos acessar a rota interna, porém, nenhum valor é retornado do banco de dados:


Códigos importantes descobertos:
-
<desired_user>’;#- acesso sem senha, funciona ao quebrar a string forçadamente e comentar o resto da query -
', salary='40000';#- mesmo princípio do anterior, porém, injetado em um script de UPDATE. Consegue inserir campos que não deveriam ser disponíveis para a modificação. -
Código de statements - Reduz o dano do ataque fazendo o banco não retornar informações inseridas no input.
