首先拿到一个注入点,我们尝试获取一下数据库版本
可以看到当获取字符串长度的时候,可以成功获取到结果,反之获取字符串内容的时候,却得不到正确页面
我们比较一下两个sql语句
char_length(version())>0
ascii(mid(version(),1,1))>0
发现version()是可以执行,然后我们测试一下ascii()函数
这里可以发现mid函数可能被过滤掉了,既然mid被过滤掉了,那么我们测试一下与mid()函数相似的substr()
经过测试发现substr()也不能返回正确页面
到这里我们的主角就要登场了,就是他
TRIM([{LEADING} [removed_str]] FROM str)
通过trim函数我们可以删除指定的字符串
可以看到该函数可以得到正确页面,用爆破模块测试一下,成功得到结果
对比ascil码表我们得到第一位为8,然后我们修改语句,依次获取结果
解法二
我们知道like可以使用通配符,常用的通配符有:
“_”代表单个字符
“%”代表0到任意个字符,在本地测试发现
Like可以直接对函数的返回值使用并且产生对比值,通过这个猜想,用_可以确定个数,然后挨个爆破
类似于以下思路,database() like “_____” 在满足字符串长度之后会返回0和1,则可以用来布尔盲注下用做构造条件
但遗憾的是,目标禁用了下划线
但用%也能完成一样的操作,只不过爆破会稍微繁琐一些因为无法直接确定长度
可以看到%产生了正确回显
由上我们可以进入下一步了
我们知道,在ascii码中,可视字符串是有个数的
将这些可视字符做成字典,一个一个从第一个开始爆破
由于%的特性,我们不必在乎字符串的长度和后面的字符是啥,只要开头符合,就会产生正确的回显,直到所有字典都返回错误界面,就证明我们的爆破的内容已经全部获取到了
如下:
通过这种方式,我们可以获取到一些函数执行后的返回结果,可信息依旧有限,想要进一步利用还有一些困难。
因为目标禁用了不少东西,比如:select;而根据传送过去的参数来看,对方后台肯定使用select 所以要么是waf的原因,要么是对方使用了某种过滤函数,并且设定了敏感字的字典。
由于不知道目标到底禁用了啥,所以我想了一个办法,利用mysql对16进制编码的特性,可以去查看他到底禁用了什么。
检测禁用词的方法
在mysql中,会自动吧16进制编码转换为字符串进行识别,例如:”,”和0x2c是相等的,如下:
mysql对“,”=0x2c产生了正确的返回结果
由此可以推出,如果我们提交测试的字符串和它的16进制编码比较,没有产生正确的返回结果,那就说明这个词在后面的代码中被处理了,也就是被禁用了
如下:
由上得知,目标禁用了逗号
用这个方法去检测我们早就知道被禁用了的select
一致,所以用这个方法,可以获取黑名单的内容,方便我们想办法进行绕过。
Mysql 8.0.19 后的新特性,无select注入
在上面的信息收集过程中,我获得了目标mysql的具体版本
为mysql8.0.30,在这个版本中有一个新特性,就是可以使用table去展示表中的值
不过这个方法不可以用where之类的限制了,但是我们依旧有别的办法,它可以用limit去限制它的结果行数。
这样的话!我们就可以用元组比较去进行布尔盲注了!
在这里简单的说一下元组比较
Mysql中允许用()去构建类似于元组的内容,当这种内容进行比较的时候,会从前至后进行比较,也就是”zhangsan”会和”zhangsan”比,然后”123456”和”123456”比,符合则返回为真,而在”zhangsan”和”zhangsan”的比较中,也是第一个字符和第一个字符相比,然后再看第二个和第二个比,各字符从前往后以此类推,直到两个字符串比完。
在进行元组比较的时候,“123”和“123456”会挨个比较,只要其中一个字符串从头到尾全部符合就是相等的,甚至可以缺省,直到遇到不同的字符就会报错,例如”123″和“123456”会返回真,但”124″和“123456”就会返回假了,也就是因为这个所以可以遍历字符进行爆破
情况如下:
而一个表用limit处理之后的结果,可以作为元组参与比较。
如下:
可以看到,select * from users limit 1 的返回结果和(“zhangsan”,”123456″)产生了为1的结果
而如果元组内容不同,根据元组比较的规则,则会返回错误的结果。
这就可以让我们对整个表的每一个字符进行遍历,从而达到盲注的效果。
由于table也可以用limit进行限制,那么也就可以用table代替select进行盲注!
如下:
但,这个方法在这个目标中还是失败了,因为目标禁用了逗号,所以无法构造出(“zhangsan”,”123456″)这种格式,卡在了这一步,至今没有想出破解的办法,绕过逗号被禁用的情况。
检测逗号被禁用的方法在上面
没有回复内容