SQL注入中的INSERT注入的进一步理解

📅 2026/8/3 12:45:27
SQL注入中的INSERT注入的进一步理解
本人刚刚学完萧涩迪老师的PHPSQL注入系列在说到INSERT注入时我能想起的就是和“二次注入”挂钩因为小迪老师在讲“二次注入”的时候就是用INSERT语句演示的其中它提到的一个知识点让我记忆犹新就是在对方可以将某个数据保存到数据库中的地方提前插入注入语句这样就可以通过配合一些需要调用SELECT查询语句的功能将之前已经注入好的语句激活导致“二次注入”产生这样做的前提是对方的魔术开关是打开的也就是需要将你的 ’ 这个符号进行转义否则会提前闭合导致语法出错但是我上面所说记忆犹新的知识点如果你现在以为是“二次注入”那就错了它只是个索引下面才是正文为什么会用到“二次注入”因为在INSERT INTO这个SQL语句中你直接用常规的过滤手段如下图会直接影响它的语法结构导致出错(因为它原本是要接收两个值你过滤后现在就只能接收一个值了。因此就是在这里作者以为遇到INSERT INTO只能用“二次注入”去解决它直到作者做了pikachu靶场的“insert/update注入”才又有了新的认知在INSERT INTO语句中如果直接插入SQL语句会导致语句的逻辑不对从而出错当时小迪老师是这么教的但它可能是因为为了介绍二次注入才这么教的实际上我们通过分析语句不难看出是可以直接输入注入语句的我们之前的SQL注入语句让语句出问题是因为#讲后面的内容过滤导致它前后逻辑对应不上那我们就不过滤就拿pikachu靶场来讲通过自己的分析发现它存在‘’单引号闭合影响我们的SQL语句我们就可以通过盲注里的三巨头布尔延时报错来解决这道题目实际作者只用了报错和延时布尔应该也能成功因为它会提示你是否注册成功的有回显的具体其他就不说了直接将大致payload拼接后的语句给放下面了INSERT INTO admin(username, password) VALUES (admin or updatexml(1,concat(0x7e,database()),0) or, 919191)INSERT INTO admin(username, password) VALUES (admin and if(length(database())6,sleep(10),sleep(0)) or ,919191)