• 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”

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

  • 相关阅读:
    linux常见的编码转换
    linux sort的用法
    转--11个失败之后
    shell入门
    迟到
    必须要回答的问题
    【转载】个人开发者要掌握的时间规划建议
    Unity 碰撞检测 OnTriggerEnter 入门
    浅谈BUFF设计
    随机掉宝,对玩家来讲真的随机吗?
  • 原文地址:https://www.cnblogs.com/c1047509362/p/12342683.html
Copyright © 2020-2023  润新知