Php 显示什么&x27;在mysql\u real\u escape\u string()之后,s实际上被传递到服务器
我正在对一个站点进行代码审查,发现了一个可能的SQL注入漏洞。我应该指出,这是一个CTF练习,所以这可能是一个noob问题。下面的代码查询数据库中的用户名和密码,如果发现两者都匹配,则允许您登录Php 显示什么&x27;在mysql\u real\u escape\u string()之后,s实际上被传递到服务器,php,mysql,apache,sql-injection,Php,Mysql,Apache,Sql Injection,我正在对一个站点进行代码审查,发现了一个可能的SQL注入漏洞。我应该指出,这是一个CTF练习,所以这可能是一个noob问题。下面的代码查询数据库中的用户名和密码,如果发现两者都匹配,则允许您登录 $username = mysql_real_escape_string((string) $_POST["username"]); $password = md5($_POST["password"]); $query = @mysql_query("SELECT * FRO
$username = mysql_real_escape_string((string) $_POST["username"]);
$password = md5($_POST["password"]);
$query = @mysql_query("SELECT * FROM user WHERE username='$username' AND pwd='$password'");
if (@mysql_num_rows($query) !== 1) {
$html = "Your username or password is wrong<br>".ShowLoginForm();
return;
} else {
$html = "Logged in. <a href='index.php'><font color=\"#9CCFEC\">continue</font></a>";
}
这里的挑战是突破mysql_real_escape_string()语句,要做到这一点,我希望看到在该函数修改输入后,到底传递给服务器的是什么。有办法做到这一点吗?该站点正在Apache上运行。不知道您“发现”了什么,但您在此处发布的代码片段中没有漏洞
这里的挑战是突破mysql\u real\u escape\u string()语句
任务不可能完成
没有破绽,也没有破绽。继续下一个练习。不要使用错误抑制运算符(@),因为它会隐藏可能有助于调试代码的错误消息。您还应该始终编写代码,以便它不会生成任何PHP错误,包括通知。
md5()
对于哈希密码是过时的,不应使用。PHP提供和,请使用它们。这里有一些。如果您使用的是5.5之前的PHP版本。。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个最适合您。即使使用。没问题-这不是我的代码,就像我说的,这是CTF练习的一部分,它有一些故意插入的漏洞。这里使用的身份验证机制非常糟糕。。。感谢您的输入-快速手指!好的,我从这个反应中猜测mysql\u real\u escape\u string()函数是非常可靠的?在这个特定的例子中,当然是这样。我想知道你还不知道它,因为这似乎是php人唯一知道的事情。你是不是故意给出了一个错误的答案,只是为了取笑mysql\u real\u escape\u string()
对SQL注入免疫?@dorukayhan继续,给我看一个工作示例,它将破坏这段代码
SELECT * FROM user WHERE username='admin' OR 1=1 '' AND pwd='anyrandomtext'