这个 SQL 谜题中的两个破折号是做什么用的?
What are the two dashes in this SQL puzzle for?
我是 SQL 的新手,想解决这个问题。尝试阅读有关 w3schools 的信息,它们在开头没有显示任何带有 -- 的语法。 请尝试理解我目前是一个完全的菜鸟,需要一些见解。
如果有任何提示可以帮助我,我只需要更多信息来再次尝试,我将再次更新此线程并继续这样做,直到我到达回答。
问题
洛克哈特教授声称他的房间有最好的安全措施,并不断向弗立维教授吹嘘。对此感到恼火的弗立维决定运用他的智慧来测试密室的防御系统。他开始在他的房间里寻找安全漏洞。很快,他发现密室的筛选机制存在缺陷,它没有正确筛选所有试图进入的人(即,它没有过滤 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'(不带引号)。不要在任何地方使用反引号 (`)。
适当地替换破折号。不要在空格中的任何地方输入空格作为字符。
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
语句。
让我们将问题总结为重要部分:
- 破解的SQL语句:
user_details = "SELECT * FROM users WHERE username='" + uname + "' AND password='" + passwd + "'"
需求:为用户'Lockhart'删除一条记录。
工具:SQL 注入,标准 SQL 语法。
要填写的模板:"-- DELETE FROM ----- WHERE -------------------;"
您需要做的第一件事是结束 select 语句,因为您不能在一个语句中执行 select
和 delete
- 这意味着您首先需要使用撇号 ('
) 关闭字符串文字,然后使用分号 (;
).
的标准 SQL 语句终止符结束语句
然后,您想完成 delete
语句,您在尝试中已正确完成 - 没问题。
所以你应该输入的答案是:
-- DELETE FROM ----- WHERE -------------------;
'; DELETE FROM users WHERE username='Lockhart';
我是 SQL 的新手,想解决这个问题。尝试阅读有关 w3schools 的信息,它们在开头没有显示任何带有 -- 的语法。 请尝试理解我目前是一个完全的菜鸟,需要一些见解。
如果有任何提示可以帮助我,我只需要更多信息来再次尝试,我将再次更新此线程并继续这样做,直到我到达回答。
问题
洛克哈特教授声称他的房间有最好的安全措施,并不断向弗立维教授吹嘘。对此感到恼火的弗立维决定运用他的智慧来测试密室的防御系统。他开始在他的房间里寻找安全漏洞。很快,他发现密室的筛选机制存在缺陷,它没有正确筛选所有试图进入的人(即,它没有过滤 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'(不带引号)。不要在任何地方使用反引号 (`)。
适当地替换破折号。不要在空格中的任何地方输入空格作为字符。
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
语句。
让我们将问题总结为重要部分:
- 破解的SQL语句:
user_details = "SELECT * FROM users WHERE username='" + uname + "' AND password='" + passwd + "'"
需求:为用户'Lockhart'删除一条记录。
工具:SQL 注入,标准 SQL 语法。
要填写的模板:
"-- DELETE FROM ----- WHERE -------------------;"
您需要做的第一件事是结束 select 语句,因为您不能在一个语句中执行 select
和 delete
- 这意味着您首先需要使用撇号 ('
) 关闭字符串文字,然后使用分号 (;
).
然后,您想完成 delete
语句,您在尝试中已正确完成 - 没问题。
所以你应该输入的答案是:
-- DELETE FROM ----- WHERE -------------------;
'; DELETE FROM users WHERE username='Lockhart';