过滤in,or字符的sql注入学习

在sql注入中,有时候会遇见一些过滤,将in或者or之类的匹配出来,这样传统的通过information_schema是得不出来列名的。

这里引入一个sys的一个表

可以看到这里有很多表名。

这里有很多$符号的表名,这些表单里面就存在很多信息。

这里就出现了我创建的一个表。

这里还可以用

select table_name from sys.x$schema_table_statistics where table_schema=database();

来获得表名。

接下来"sys.x$statement_analysis"这个表记录了一些操作日志

在sql注入中,或者在ctf中,可以通过这个看看别人是怎么操作的。

SELECT query FROM sys.x$statement_analysis

当我们不知道列名那该怎么办呢?

这里有这么一个trick

select (select 1,'da13')=(select * from for_test);

这里对大小写不敏感,如果等式左右那边的列数相等,并且结果想同就会返回1.当然这里的等号也可以换成 <,>符号

但是当我们要数据的时候得大小写分明,那么怎么办呢?

原本是binary函数即可,但是里面有"in"所以得换个方法。

在mysql中json是binary类,利用cast方法可以转换过来


这里的concat函数因为后面的0是二进制的类,所以整个拼接后就是二进制的,所以就能进行大小写辨别了。

TetCTF中一个ctf题目就是用这个方法做的,这里就只拿payload说说。

((SELECT 1,CONCAT({flag}, CAST("0" as JSON))) <= (SELECT * FROM `Th1z_Fack1n_Fl4444g_Tabl3`))+1

这里我们对flag进行一个一个尝试,后面接上0,让整个爆破的字符串可以和后面的(真实的flag)进行大小写比较。

以上就是个人所做的一个小总结,有不足的地方还望各位大佬斧正!

本文作者:星盟安全团队

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/123956.html

Tags:
评论  (0)
快来写下你的想法吧!

星盟安全团队

文章数:31 积分: 75

星盟安全团队---"VENI VIDI VICI"(我来,我见,我征服),我们的征途是星辰大海。从事各类安全研究,专注于知识分享。

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号