如何使用 SQL 注入注入我的代码?

How can my code be injected with SQL injection?

提问人:L. Gahan 提问时间:2/3/2023 最后编辑:Your Common SenseL. Gahan 更新时间:2/5/2023 访问量:74

问:

我运行了以下代码进行登录。

M_INVALID_PASSWORD_OR_USERNAME_2 SELECT `s1_members`.* FROM `s1_members` 
WHERE (`password` LIKE '5bd7002ef05124e82000bb83d83455ec8c50a1e8') AND 
(email LIKE 'test@tefrfrfwfe.frrfr' OR phone LIKE '[email protected]')"

我知道我的电子邮件/电话似乎很脆弱,但我通过在每个单引号前添加两个反冲 (\) 来逃避单引号。双引号通过在头前添加三个反斜杠 (\) 进行转义。我还通过在 (\) 之后再添加三个反斜杠来逃避反斜杠。

我仍然在这个领域学习,所以想知道攻击者可以通过哪些方式/有效载荷注入SQL注入?如果这里有可执行的有效负载,那么我该如何保护自己?

我已经尝试了可以在 Internet 上找到的不同类型的 SQL 注入,似乎我的特殊字符转义工作正常。我知道这并不理想,所以想知道什么类型的SQL注入有效负载可以在我的代码中成功执行。

数据库 安全性 SQL 注入 有效负载

评论

3赞 rory.ap 2/3/2023
使用参数,而不是手动将值插入到 SQL 中
1赞 ᴓᴓᴓ 2/3/2023
你是在重新发明轮子,还是想了解轮子是如何发明的?正如 @rory.ap 所说,你应该让你使用的库或驱动程序来处理这个问题,而不是自己动手。如果您想了解它的作用,您应该查看库代码。
2赞 Jeroen Mostert 2/3/2023
“以何种方式”取决于您的数据库引擎 - 它们处理引用、转义和语句批处理的方式都略有不同。攻击者有充分的时间和动机去尝试不同的事情,直到某些事情奏效。使用参数化语句可以防止所有恶作剧,并且比试图在引用设置中查找漏洞更安全(当然,除非您攻击者)。
0赞 Your Common Sense 2/5/2023
如果不看你的代码,就不可能说你的“添加斜杠是什么样子的”,以及它是否安全。此外,目前尚不清楚,您为什么要费心添加所有这些斜杠而不是使用适当的解决方案。这使你的问题跑题了。

答:

0赞 Egret 2/5/2023 #1

应使用预准备语句(也称为参数化查询)。当使用预准备语句时,参数永远不会被解释为 SQL,它们只是由数据库作为数据进行处理。

你使用的逃生技术,即使有效,也是脆弱的。它取决于客户端语言、字符串在客户端上的组成方式以及您使用的数据库。

有几件事可能会出错:

  • 客户端上的字符串可以具有固定的长度 - 黑客可以操纵编码机制以超出该长度。这可用于截断查询的关键部分或创建缓冲区溢出。
  • 斜杠也可以由客户端语言解释,切换客户端上下文可能会更改所需的斜杠数。
  • 数据库可能会更改 - 因为代码与不同的数据库一起使用,或者升级时行为发生更改。正如 Jeroen 在评论中提到的,数据库都以不同的方式处理编码。

评论

0赞 Your Common Sense 2/5/2023
你从哪里得到这个“客户”的概念?