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

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

这里引入一个sys的一个表

48fb5de75fc2778b37c83ba7cf0b1d37.png

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

0f32d59856df34a982868062e32c1016.png

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

d3c62b04c19853646561bcd8c0a3f003.png

df13ee18b6113e7ce23176ee38c44629.png

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

这里还可以用

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

来获得表名。

fce992c58dd2bb2c6d410bd310d66570.png

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

a280f64ecb40908bbc7ee92b8b3acbd4.png

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

SELECT query FROM sys.x$statement_analysis

b26707fec31b84c219de1459937fdccd.png

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

这里有这么一个trick

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

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

00643c94dece5f95437ce9afb130bcc6.png

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

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

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

9f4cf5f21b7a880b8154b6fb8782818a.png

a6bcb35e99e79c6181bd1021044b0f28.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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值