安全实验室中的 SQL 注入 - 语法错误?

Posted

技术标签:

【中文标题】安全实验室中的 SQL 注入 - 语法错误?【英文标题】:SQL Injection in a security lab - wrong syntax? 【发布时间】:2018-07-19 02:32:57 【问题描述】:

我正在安全实验室练习 SQL 注入。任务是登录它,而我自己在数据库中的信息可能会被删除。在输入用户名和密码登录时,将进行以下查询:

   SELECT 
    name,
    password 
FROM login 
WHERE name='mar' and password='' or '1'='1' 

UNION 
INSERT INTO login (name, password) 
VALUES ('mar', 'hello') 

UNION 

SELECT 
    name,
    password 
FROM login 
WHERE name='mar' and password='hello'

但是,我总是收到以下错误消息,表明我的 sql 语法出现错误。但我不知道我做错了。任何人都可以帮忙吗?谢谢:)

您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以在 'INSERT INTO login (name, password) VALUES ('mar', 'hello') UNION SELECT name,pas' at line 1SELECT name,password FROM login 附近使用正确的语法WHERE name='mar' and password='' or '1'='1' UNION INSERT INTO login (name, password) VALUES ('mar', 'hello') UNION SELECT name,password FROM login WHERE name='mar ' 和密码='你好'

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'INSERT INTO login (name, password) VALUES ('mar', 'hello') UNION SELECT name,pas' 附近使用正确的语法

【问题讨论】:

你不能选择然后联合插入 你怎么能UNIONINSERT?另外,在这种情况下,为什么你甚至需要UNION INSERT?如果您只想登录,or '1'='1' 可能会这样做,具体取决于代码如何响应查询结果。 @dbajtr 谢谢,但是当只有一个“密码”字段时我怎么能做多个查询呢?我的想法是我首先将我的用户名插入表中,然后再次使用该用户名的选择查询 @David 我已经尝试过了,但它说解决方案是错误的。我猜用户名“mar”不在表中(已删除)。所以我需要先插入它,然后我可以使用 SELECT 来查询那个用户名。我不确定如何在一个输入中完成所有这些操作 【参考方案1】:

如果你只这样做:

 SELECT 
    name,
    password 
FROM login 
WHERE name='mar' and password='' or '1'='1' --+-

这使得表中每条记录的选择条件都为真。 这应该让您使用表中的第一条记录登录。

【讨论】:

以上是关于安全实验室中的 SQL 注入 - 语法错误?的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入中information_schema的作用

2018~2019-10 20165107 网络对抗技术 Exp9 Web安全基础

20145326蔡馨熤《网络对抗》—— Web安全基础实践

软件安全实验——lab8(SQL注入)(上)(旧虚拟机seedubuntu9版本实验)

计算机网络安全 实验三 SQL注入攻击

网络安全实验室4.注入关