探索黑客技术攻防,实战研究与安全创新

导航菜单

对“数据库防下载新招之‘#%’”的质疑与拓展

在安全测试过程中,经常会遇到站长使用该文中的思路和方法来保护自己的数据库不被下载,但是这样设置后真的能防止数据库不被下载吗?那么到底又该怎样防止下载呢?且看我下面进行详细讲解。

首先,我对文中作者的分析过程实在不敢苟同,文中提到当我们访问#%23test.mdb或##test.mdb时会返回一个页面,也就是说明目录存在,而作者将其原因归结为“/”的URL编码是“%”,所以“%23”中的“%”被IIS解析成了目录。其实,“/”URL编码为“%2F”,而并不是“%”,而且这个也和IIS没什么关系(个人见解,因为我在Apache和Tomcat环境下测试均通过),我们从这两个地址可以很容易的发现所请求的文件名第一位字母都为“#”,浏览器向服务器请求数据时会自动忽略“#”以及它后面的所有内容,因此我们的访问就变成了访问目录。

QQ截图20170123153405.png

其次,作者的防范方法就真的难以突破吗?其实不然,当我们理解了它的本质后就很简单了。对于“#%23test.mdb”这样的数据库,站长给我们设置了两层障碍:一是“#”,相信大家对于这个的突破已经驾轻就熟了,直接在浏览器里将“#”换成它的URL编码“%23”访问即可下载到。而这里当我们访问%23%23test.mdb时,却依然无法下载,这是为什么呢?这就是第二层障碍在发挥作用,也就是上面文件名中的第二个%23,服务器把这个也当作了URL编码,于是我们请求下载的文件就变成了# #test.mdb,这显然与“# %23test.mdb”不同,那该如何解决呢?这里我们只要把“%”也用URL绵码转换为“%25”就行了,成功下载到了数据库。

下面我对数据库的保护发表一下我的看法,一方面是防止数据库的路径被泄露,首先我们要修改网站的默认数据库,其次是在数据库连接文件中加入容错语句“on error resume next”防止暴库。另一方面,就是在数据库路径泄露后要防止数据库被下载到,可以通过下面几种方法来实现:一、可以把数据库放到Web目录外。二、如果是asp后缀的的数据库,可以

将以下代码保存为asp文件存放在数据库所在目录里访问。

这段代码的大致意思就是在数据库里建立一个NotDownload表,在NotDown字段里写入“<%”,这样被更改为脚本后缀的数据库就无法闭合了,自然在访问时也就会出错了。如果是mdb后缀的数据库,那么我们可以对服务器IIS进行设置,而且只要修改一处,整个站点的数据库就都可以防止被下载了。我们在IIS属性一主目录一配置一映射一应用程序扩展那里添加.mdb文件的应用解析(注意:最好要选择asp.dll等),这样只要下载数据库就会出现404或500等错误了。

文章到此就结束了,我觉得单靠修改数据库名是无法防止被下载的。另外,上文中提到的方法也不可能保证数据库的绝对安全,比如针对asp后缀的数据库建立防下载表,在极少数情况下我们可以想办法闭台脚本标记或删掉防下载表就可以突破了。互联网永远没有绝对的安全,作为真正的网络高手,应该是喜欢这样充满挑战的生活,因为只有这样,才会不停的进步!

本文为网络安全技术研究记录,文中技术研究环境为本地搭建或经过目标主体授权测试研究,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,在挖掘、提交相关漏洞的过程中,应严格遵守相关法律法规。

相关推荐