sql-lib闯关之5-6

首先我们来补充一下冲关前的小知识

1. left()函数: left(database(),1)=‘s’       left(a,b)从左侧截取a的前b位,正确则返回1,错误则返回0

   例如上例中就是先查询database()数据库,从左面看他第一个字母是否是s,如果是则返回1,错误则返回0;

2.regexp函数:select user() regexp ‘r’ user()的结果是root,regexp为匹配root的正则表达式

   例如上例中就是把查询到的user用户也就是root和r从左至右进行比较,相同是1,不同是0.

3. like函数: select user() like ‘ro%’ 匹配与regexp相似。

   与上个函数类似,唯一不同就是加一个%

4. substr(a,b,c) select substr() XXXX substr(a,b,c)从位置b开始,截取a字符串c位长度

   例如select substr((select database()),1,1)='s’; 匹配第一个字符是否是 s

5. ascii() 将某个字符串转化为ascii值

6.在python中 chr(数字)或者是ord(‘字母’) 使用python中两个函数可以转换判断ascii值

LESS5
首先输入?id=1

 显示出来的是you are in
输入id=1000 是没有返回的,我们考虑为布尔盲注,即正确的情况下返回you are in ,错误的情况下没有返回

在输入’来试试

 开始报错


我们可以得出为字符型

接下来我们不能依照1-4关中利用union select来查询列,因为正确只可以返回 you are in 得不到有效的信息

所以我们就需要前面讲解的铺垫知识了。

方法一:利用left函数比较,正确显示you are in 错误则不显示
这种方法相当于盲猜..很是麻烦,可以这样猜出来,但是效率太低了

 

后面猜的就不一一演示了。

方法二:利用ascii二分法
输入:
?id=1' and  ascii(substr((select schema_name from information_schema.schemata limit 1,1),1,1)) >100--+

 此时不显示,说明小于100
再将最后改为>50 依次测试,得到数据库库名第一个字母的ascii值为99
再根据转换可以得到为c

其实依旧为猜,效率十分低

方法三:利用burp工具抓包,进行暴力破解

首先,在浏览器中开启代理模式,如图操作,版本不一样可能不同

 打开burp工具,开启代理功能。on为开启 off为关闭

假设我们不知道数据库表名,猜测第一个字母为a,输入?id=1' and left((select database()),1)='a'--+ 
等待burp抓包

 将数据发送到爆破模块
并在模块中先清除所有标记,然后将a作为变量点击add

如图选择,使用暴力破解

 

 开始破解

 我们可以发现s的返回值不同

所以第一位就是s
LESS6

猜你喜欢

转载自www.cnblogs.com/c1047509362/p/12342683.html
5-6