sql-lib闯关之5-6

Posted 随年c

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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


 第六关我们判断注入类型
在输入?id=1 ?id=1‘之后都是you are in。。界面
输入?id=1 and 1=1 和?id=1 and 1=2 依旧是you are in 所以可以判断是字符型

输入?id=1”

 

 报错后,加上注释符

 

 

我们可以判断参数为 id=“1”

 剩下的操作就和第五关相同了

以上是关于sql-lib闯关之5-6的主要内容,如果未能解决你的问题,请参考以下文章

sql-lib闯关秘籍之51-60关

sql-lib闯关秘籍之31-40关

sql-lib闯关秘籍之41-50关

sql-lib闯关秘籍之21-30关

sql-lib闯关秘籍之11-20关

sql-lib闯关之lesson17-19