提问人:L. Gahan 提问时间:2/3/2023 最后编辑:Your Common SenseL. Gahan 更新时间:2/5/2023 访问量:74
如何使用 SQL 注入注入我的代码?
How can my code be injected with SQL injection?
问:
我运行了以下代码进行登录。
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注入有效负载可以在我的代码中成功执行。
答:
0赞
Egret
2/5/2023
#1
应使用预准备语句(也称为参数化查询)。当使用预准备语句时,参数永远不会被解释为 SQL,它们只是由数据库作为数据进行处理。
你使用的逃生技术,即使有效,也是脆弱的。它取决于客户端语言、字符串在客户端上的组成方式以及您使用的数据库。
有几件事可能会出错:
- 客户端上的字符串可以具有固定的长度 - 黑客可以操纵编码机制以超出该长度。这可用于截断查询的关键部分或创建缓冲区溢出。
- 斜杠也可以由客户端语言解释,切换客户端上下文可能会更改所需的斜杠数。
- 数据库可能会更改 - 因为代码与不同的数据库一起使用,或者升级时行为发生更改。正如 Jeroen 在评论中提到的,数据库都以不同的方式处理编码。
评论
0赞
Your Common Sense
2/5/2023
你从哪里得到这个“客户”的概念?
评论