这个sql拼图中的两个破折号是用来做什么的?

eivgtgni  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(522)

我对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语法(字符串的单引号等)。假设洛克哈特教授的用户名是“洛克哈特”(不带引号)。不要在任何地方使用反勾号(`)。
适当地替换破折号。不要在空白处输入空白字符。

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';"
gopyfrb3

gopyfrb31#

你就快到了-你所缺少的只是一个关键部分-终止 select 声明。
让我们把这个问题总结到最基本的部分:
要破解的sql语句:

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

要求:删除用户“lockhart”的记录。
工具:sql注入,标准sql语法。
要填充的模板: `"-- DELETE FROM ----- WHERE

nr9pn0ug

nr9pn0ug2#

---------;"您需要做的第一件事是结束select语句,因为您不能执行select和一个delete在单个语句中-这意味着您首先需要使用撇号关闭字符串文本('),然后使用标准sql语句终止符(分号)结束语句(;). 然后,您要完成delete` 声明,你在尝试中做得很正确-没问题。
所以你应该写的答案是:

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

相关问题