php - 显示 mysql_real_escape_string() 之后实际传递到服务器的内容

标签 php mysql apache sql-injection

我正在对网站进行代码审查,发现可能存在 SQL 注入(inject)漏洞。我应该指出,这是一个 CTF 练习,所以这可能是一个菜鸟问题。下面的代码在数据库中查询用户名和密码,如果发现两者匹配,则允许您登录。<​​/p>

    $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>";
    }

我发现如果将以下代码直接注入(inject)数据库,则可以以任何用户身份登录:

SELECT * FROM user WHERE username='admin' OR 1=1 '' AND pwd='anyrandomtext'

这里的挑战是突破 mysql_real_escape_string() 语句,为此,我想确切地了解一旦此函数修改了输入,到底传递给服务器的内容是什么。有没有办法做到这一点?该网站在 Apache 上运行。

最佳答案

不知道您“发现”了什么,但在您在此发布的代码片段中没有漏洞。

The challenge here is breaking out of the mysql_real_escape_string() statement

不可能完成的任务。

没有任何突破,也没有什么可以破坏的。继续下一个练习。

关于php - 显示 mysql_real_escape_string() 之后实际传递到服务器的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42809537/

相关文章:

php - 用于从 gmail、hotmail、yahoo mail 等导入联系人的任何框架/第三方工具

mysql.service 失败,因为控制进程退出并出现错误代码

python - Apache mod_wsgi Django 设置 - 禁止您无权访问此服务器上的/mysite

PHP+AJAX发送数据(链接)麻烦

php - Google App Engine 和 PHP 写入文件

php - MYSQL-在列的第一个空行中插入值并读取同一行中的其他值

mysql - NOT IN 不工作的 SQL

php - 在 .htaccess 中使用 AddType .css 时浏览器不解释 .css 文件

php - 强制 PHP CLI 将文件写入 www-data

php - 向 Timber/Twig 添加自定义随机播放过滤器