这个SQL谜题中的两个破折号是用来做什么的



我对SQL完全陌生,想解决这个问题。尝试阅读w3schools上的信息,但它们一开始没有显示任何带有--的语法请试着理解,我在这一点上完全是个傻瓜,需要一些见解

如果有任何提示可以帮助我,我只需要一些更多的信息来再次尝试,我将再次更新此线程,并将继续这样做,直到找到答案

问题

洛克哈特教授声称他的房间有最好的安全措施,并不断向弗利特维克教授吹嘘这一点。Flitwick对此感到恼火,决定运用自己的智慧,对商会的防御进行测试。他开始在自己的房间里寻找安全漏洞。很快,他发现会议室的筛选机制存在缺陷,并且它没有正确地筛选所有试图进入的人(即,它没有对SQL输入进行消毒,这意味着它容易受到SQL注入攻击(。

商会入口的工作原理与包含登录表单的网站非常相似。输入用户名+密码详细信息后,用户即可访问商会。根据登录表单中输入的信息,商会用于获取用户详细信息(用于验证(的代码如下:

user_details = "SELECT * FROM users WHERE username='" + uname + "' AND password='" + passwd + "'"

其中uname是在登录表单中输入的用户名,passwd是相应的密码。

上面的内容容易受到SQL注入攻击,因为我们可以将passwd字段设置为以下内容:

password' OR 1=1

因此,数据库服务器运行以下SQL查询:

SELECT * FROM users WHERE username='username' AND password='password' OR 1=1'

导致AND子句的第二部分始终计算为True,即使密码是错误的,因为1=1始终是。这使得任何人都可以在不知道正确密码的情况下通过筛选机制。

使用上述登录表格,将如何输入密码字段表格,以便Flitwick教授可以从数据库中删除Lockhart教授自己的记录,从而禁止他进入自己的房间?

注意:下面代码片段中的每个-表示一个空白的1个字符。填空。使用标准的SQL语法(字符串用单引号等(。假设Lockhart教授的用户名是"Lockhart"(没有引号(。不要在任何地方使用backticks(`(。

适当更换短划线。不要在空格中的任何位置输入空格作为字符。

echo "-- DELETE FROM ----- WHERE -------------------;"

我试着这样尝试:

echo " DELETE FROM users WHERE username='Lockhart';"
echo "'' DELETE FROM users WHERE username=Lockhart'';"
echo "DELETE FROM users WHERE username='Lockhart';"

您差不多到了-只缺少一个关键部分-终止select语句。

让我们把这个问题概括为几个重要部分:

  1. 要破解的SQL语句:
user_details = "SELECT * FROM users WHERE username='" + uname + "' AND password='" + passwd + "'"
  1. 要求:删除用户"Lockhart"的记录。

  2. 工具:SQL注入,标准SQL语法。

  3. 要填写的模板:"-- DELETE FROM ----- WHERE -------------------;"

您需要做的第一件事是结束select语句,因为您不能在单个语句中执行selectdelete-这意味着您首先需要使用撇号('(结束字符串文字,然后使用标准SQL语句终止符(即分号(;((结束语句。

然后,您想要完成delete语句,您在尝试中已经正确地完成了这一操作——没有问题。

所以你应该输入的答案是:

-- DELETE FROM ----- WHERE -------------------;
'; DELETE FROM users WHERE username='Lockhart';

最新更新