为什么我不能使用mysql和php进行sql注入测试

时间:2011-06-15 09:14:15

标签: php mysql sql-injection

我试图检查一个网站上的sql注入攻击,并惊讶地看到它不是很简单,因为下面是简单的代码。

$sql="select * from user_acount where login_id='".$username."' and password='".$password."' and status='1' ";

我不能做任何sql注入来测试它。我写了以下

第一次尝试检查sql注入

Login:  admin'--
Password:'i typed nothing here '

结果您无法登录的密码错误。

第二名:

Login:  admin or 1=1 --' 
Password:''

结果您无法登录的密码错误。

第3名:

Login:  admin' or 1=1 
Password:''

第四:     登录:admin或1 = 1' -     密码: ''

结果您无法登录的密码错误。

任何人都可以解释阻止我的是什么吗?我没有使用预处理语句,我也没有使用任何过滤器类,我没有real_escape_string?

5 个答案:

答案 0 :(得分:5)

  • Magic Quotes可能已打开(因此用户输入会自动处理,以便更适合撰写数据库查询)。
  • Register Globals可能已被关闭(因此您必须使用$_REQUEST['username']或相关而不是$username)。
  • 您的程序中可能存在错误,导致输入admin'--无法存储在$username中(例如,表单元素名称与变量名称不匹配)。

答案 1 :(得分:4)

两种可能性:

  1. login_id没有admin,因此查询如下:

    select * from user_acount where login_id='admin'
    
  2. magic_quotes已启用,会产生以下查询:

    select * from user_acount where login_id='admin\'--' and password='' and status='1'
    select * from user_acount where login_id='admin or 1=1 --\'' and password='' and status='1'
    

    即使关闭了魔术引号,最后一个查询也会失败:

    select * from user_acount where login_id='admin or 1=1 --'' and password='' and status='1'
    

    由于字符串中的--条评论不起作用,因此查询解释为:

    select * from user_acount where login_id='STRING'' and password='' and status='1'
    

    如您所见,这会导致'STRING'

  3. 后出现语法错误

答案 2 :(得分:1)

您输入的密码包含报价。这会破坏您的SQL查询,并且可能是代码无法区分错误和合法的“无此类用户”结果,因此您收到错误的密码消息。

尝试将密码留空。

答案 3 :(得分:1)

您实际上并未调用real_escape_string()方法,但我认为magic_quotes_gpc设置为true。

  

当magic_quotes开启时,所有'   (单引号),“(双引号),\   (反斜杠)和NUL的逃脱   自动反斜杠。

Runtime Configuration - magic_quotes_gpc

答案 4 :(得分:1)

您是否尝试过:

Login:  admin' or '1=1  
Password: admin' or '1=1

同时检查魔法引号是否已打开