payload :1 regexp (case when (user() like 'roo%') then 0x00 else 1e0end
某天朋友发来这个语句,说让我分析一下,我一看我擦这是什么东西,regexp不是一个正则吗,这玩意也能出现在注入里面么。。那我们简单来了解一下这个payload,逐个分析吧
一、分析
1、首先分析一下这个regexp到底是什么东西,他其实就是一个sql查询中的正则,可以理解为正则函数,普及一下简单用法,大家可以自己操作一下。
比如可以这样:select 'xxxyyy' regexp '^xx' ; select 'xxxyyy' regexp 'x*****';写不出来了,就是跟正则一样的用法。
需要的自己去学习一下正则,这里就简单分析一下。
2、那我们继续去分析 case when
case其实就是一个sql函数,他有两种格式一种是case函数、另一种是case搜索函数,简单的举个例子把:
--简单Case函数
CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END
--Case搜索函数
CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END
这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。
还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。
3、了解了分块部分,那我们继续去了解一下整体
总的来说这个payload其实就是一个盲注,regexp盲注,先了解一下原理,正则表达式注入原理就是直接查询自己所需要的数据,然后通过正则表达式进行匹配。
payload :1 regexp (case when (user() like 'roo%') then 0x00 else 1e0end
大概就是进行正则搜索,查询用户然后模糊查询存在roo的字段,然后结束并且输出出来。
本来想写一大篇的,就这样把篇幅太长都不乐意看直接给结果好了。