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

作者:王亮


一. 在一次玩sql injection时无意发现了这个漏洞:
1.访问http://www.lznet.net/news/displaynews.asp?漏洞,接下来猜表名:

4.访问http://www.lznet.net/news/displaynews.asp?数据库引擎找不到输入表或查询 'news'

5.访问http://www.lznet.net/news/displaynews.asp?数据库引擎找不到输入表或查询 'admin'

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

7.访问http://www.lznet.net/news/displaynews.asp?数据库引擎打不开文件'C:WINNTsystem32CMD.EXE'。 它已经被别的用户以独占方式打开,或没有查看数据的权限。 "
分析以上出错信息,我想权限是有的,因为我们是基于asp的guest权限,默认cmd.exe是Everyone:R ,如果打不开那就是数据库不支持了,但是文件夹是可以被数据库访问,否则我们是搜索不到其中的文件的。

10.访问http://www.lznet.net/news/displaynews.asp?数据的权限。

12.访问http://www.lznet.net/news/displaynews.asp?服务器。

注:我们看到出错信息很老实的告诉了我们这个系统没有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'"。否则我们无论查询是否成功都变的没有意义。
 

Leave a comment

Your comment

Why not Login? Sign up now! »