一个老问题,另一个查找漏洞的途径,抛砖引玉吧,如果你能发现相关的东西,希望也能帖出来与大家分享。
[数据库敏感信息文件]
在PHP中,include()和require()主要是为了支持代码库,因为我们一般是把一些经常使用的函数放到一个独立的文件中,这个独立的文件就是代码库,当需要使用其中的函数时,我们只要把这个代码库包含到当前的文件中就可以了。
最初,人们开发和发布PHP程序的时候,为了区别代码库和主程序代码,一般是为代码库文件设置一个“.inc”的扩展名,但是他们很快发现这是一个错误,因为这样的文件无法被PHP解释器正确解析为PHP代码。如果我们直接请求服务器上的这种文件时,我们就会得到该文件的源代码,PHP解释器是根据文件的扩展名来决定是否解析为PHP代码的。扩展名是站点管理员指定的,一般是“.php”, “.php3”和“.phtml”。如果重要的配置数据被包含在没有合适的扩展名的PHP文件中,那么远程攻击者很容易得到这些信息。 有些人往往都把数据库的连接信息单独放到一个文件中,文件命名为connect.inc/config.inc/db_connect.inc等等吧,有很多网站就曾经这样, sohu.com/塞迪网(www.ccidnet.com)/中关村在线(zol.com.cn)/电脑之家(pchome.net)等等,很多很多呀.
[查找这个文件]
这个包含数据库信息的文件一般要放到inc/include等等一类的目录下,作为一名管理员OR程序员当然不希望这被一个攻击者看到,于是修改为一个难以猜到的目录名或者文件名,以防止被别人很容易猜到。但是程序员要让自己的代码有可读性一般都使用几个常见的名字去命名,这样的话,可以写一个穷举的程序去进行“破解”,没准就能碰上几个。这是最笨的方法了,现在来说一般成功率是很小的,特别相对于大的站点来说。我曾经随便试过几个,没有1次成功 所以我介绍一种使用搜索引擎来查找这个文件的方法,来快速查找这个文件。在介绍搜索引擎的使用之前,先介绍以下一个问题:
PHP在运行出错的情况下一般都会出现错误的提示,这个错误提示会提供相关的信息,这个提示的相关信息很可能就会让攻击者有机可乘。比如访问http://host/index.php出现如下错误:
MySQL Connection Failed: in /home/http/htdocs/inc/connect123.inc on line 3
这已经暴露了物理路径,多么难猜的名字也没用了,
http://host/inc/connect123.inc 也许就存放着敏感信息。
当一个攻击者访问这个页面的时候,正好赶上有这个出错的页面,那算的上是幸运的,如果是大的网站出错那就更不用说了,一般大的网站反应很快,大多数却是不幸运的。但是只要是出现过这个页面就是不安全的,特别是因为有搜索引擎。如果搜索引擎的spider正好访问这个出错页面,那么不幸的是这个页面很可能就被搜索引擎收录了,这样的话任何人都能通过搜索出错页面中的出错信息关键字(关键字相当重要)就能找到这个出错的页面了,拥有这种功能的我认为是baidu.com是做的“最好”的--百度快照,baidu的客户包括Sina, Sohu, Tom.com ,263在线,21CN,上海热线,广州视窗等(我不是baidu的托),这也是我喜欢用baidu的原因,google的网页快照不好用,其他的搜索引擎没用过。 主要是搜索关键词,关键词中有一文件名如:connect.inc/config.inc/db_connect.inc等等,再有有一些出错信息如:error/ora等等;这样我们可以在baidu.com搜索:warning config.inc 便可以检索出相关结果,通过百度快照看看出错页面,分析以下文件的具体位置,然后通过URL访问相关文件就可以了。主要是关键词的选择,能不能找到感兴趣的信息,要靠自己动脑子拉,GOOD LUCK。
[后记]
各种平台都有这样的问题,至于能不能搜索到感兴趣的页面那是使用搜索引擎的能力了,另外也许攻击者虽然得到了相应的数据也许还是不能更进一步的入侵,但是这已经不是我们本次讨论的问题了。也没有什么比较新的东西,没什么高深的东西,只是提供了另一种查找漏洞的途径,之所以把这么一个简单的问题拿来说以下,是因为我发现不只一个大的网站存在(存在过)这种问题,中小型网站存在这个问题的是太多了!!!至于如何解决这种问题因为太简单了我就不说了。
[附录]
以下是我通过以上方法找到的曾经存在源码泄露系统:
SOHU.CO的部分源码:
<%
response.setHeader("Cache-Control", "no-store, no-cache");
response.setHeader("Pragma", "no-cache");
%
<%@
page import="
java.util.*,
java.sql.*,
java.io.*,
com.sohu.mystores.kidec.*,
com.sohu.mystores.util.*,
org.w3c.dom.*,
com.sohu.mystores.prototype.*,
com.sohu.mystores.concrete.shoppingprocess.*,
com.sohu.mystores.concrete.datacollection.*,
com.sohu.mystores.exception.*"
errorPage="/error.jsp"
%
SOHU苏州部分源码:
<?php
$path="/var/www/test.cninfos.com/kernel/";
set_include_path("/var/www/test.cninfos.com/kernel/");
?
我以前还见过一个SOHU的ORACLE帐号信息,好象是关于CARD的
不过现在忘了。
赛迪网部分源码:
<?
/*
// 屏蔽部分非法的IP地址 ,"192.168.1.100"
$arrayBanIp = array("210.72.21.217","202.84.17.20");
//echo "您的IP地址:".$REMOTE_ADDR;
$banTag = 0;
while (list($banIpIndex,$banIpItem)=each($arrayBanIp)){
if ($banIpItem==$REMOTE_ADDR){
$banTag = 1;
break;
}
}
if ($banTag == 1){
exit();
}
*/
?
pchome.net部分源码:
<?
$link=mysql_connect("xxx.xx.x.x","xxx","xxxx");
mysql_select_db("sw");
define("copyright","Copyright 2000,weiwu");
define("dlbase","/db");
define("base","/db/htdocs/download");
define("dl","电脑之家::下载中心::");
?
中关村在线部分源码:
$onepagelines=25;
$locationid =27;
if (!$locationid) {$locationid=1;};
//The following to define global variable
$db="zoldb";
$link = mysql_connect("localhost", "xxx", "xxxxx");
CHINA.COM个人主页系统/中国教育科研网也曾泄露源码 ,这只是一部分。