对于PHP的网站入侵思路
文章太菜,牛人请绕道。
作者:SpookZanG[S.c.T]
前几天,某个叫情深的MM给我发消息,让我帮他弄个站。漂亮MM发话而且他又答应跟我去开房,这必然得弄下来啊~。
于是拿到某个PHP的网站。
我是一个“很勤奋”的人,所以我的格言是:能工具的就绝不手工。手工太累。所以把它扔到可爱的穿山甲里面,发现穿山甲竟然检测其为MSSQL,跟实际不相符啊~。(也有PHP与MSSQL搭配的,以前见过,不过今天不是。)这命名就是MYSQL数据库啊。
(顺便说下怎么判断是MYSQL还是MSSQL,比如他的连接是http://www.spookzang.net/index.php?id=1,你在他后面加上/*SpookZanG或者–SpookZanG,看哪个能正常显示,前者正常显示就为MYSQL 后者正常显示就为MSSQL)
这时,情MM发来信息说找到了表,但是找不到列。而且能读出文件来。
既然能读文件,我们就来读取一下可能包含数据库帐号密码的文件。一般登录文件都会调用包含数据库帐号密码的文件。
我先读了login_act.php
<!--p
session_start();
Header("Content-type: text/html; charset=GB2312");
require "title.php";
$mod = $_REQUEST['mod'];
$mod=empty($mod)?'out':$mod;
switch($mod){
case 'out':
$RegUse-->Logout();
break;
case 'in':
$env=" and publish='1'";
$RegUser->setUserEnv($env);
$RegUser->Login($_POST['usr'],$_POST['pwd']);
break;
}
?>发现里面包含了title.php。并发现$RegUser含有uer和pwd。我们在来读title.php
<!--define('__SYSTEM_ROOT', '../');
include __SYSTEM_ROOT.'framework_gb/framework.php';
using('System.Web.UI.Handle');
using('System.Web.UI.Handle_new');
using('System.Web.UI.Toolbar');
using('System.Data.Data');
using('System.Data.Plugins.Option');
using('System.Smarty.Smarty');
using('System.Functions.Functions');
require_once __SYSTEM_ROOT."global.php";
using('System.User.User');
$RegUser=new User($_globa-->table->user,'content_name','content_pass');
$Sarray=array('userid'=>'auto_id',
'user_name'=>'content_name',
'role_id'=>'role_id',
);
$RegUser->setSessArray($Sarray);
?>这时,我们就知道了他的列名了,分别为’content_name’和’content_pass’。而且他里面还有global.php这个文件。
我来读一下这个文件global.php
<!--p
@session_start();
/*
* Created on 2005-11-27
*
* To change the template for this generated file go to
* Window - Preferences - PHPeclipse - PHP - Code Templates
*/
define('_ACCESS_VALID', 1);
/**
* 打开所有错误选项
*/
/*
ini_set('display_errors', 1);
error_reporting(E_ALL ^E_NOTICE);
*/
/**
* 系统绝对路径
*/
if (!defined('SYSTEM_ROOT'))
define('SYSTEM_ROOT', dirname(__FILE__));
if (!defined('TMP_ROOT'))
define('TMP_ROOT', SYSTEM_ROOT.DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR);
/**
* 系统相对路径
*/
if (!defined('__SYSTEM_ROOT'))
define('__SYSTEM_ROOT', '');
if(!defined('SYSTEM_UPLOADS_DIR'))
define('SYSTEM_UPLOADS_DIR',SYSTEM_ROOT.'/file/upload/');
define('_SYSTEM_UPLOADS_DIR',__SYSTEM_ROOT.'/file/upload/');
define('_NOIMG',SYSTEM_ROOT.'/images/nophoto.gif');
define('CODE_DIR',SYSTEM_ROOT.'/code/');
/**
* 定义时间常量
* @final LONG_DATE
* @final SHORT_DATE
* @final SERVER_TIME
*/
define('LONG_DATE', date('Y-m-d H:i:s'));
define('SHORT_DATE', date('Y-m-d'));
define('SERVER_TIME', date('H:i:s'));
/**
* 常用服务器配置常?Y
* @final ENV_MAGIC_QUOTES_GPC
* @final ENV_OUTPUT_BUFFERING
* @final ENV_REGISTER_GLOBALS
* @final ENV_SESSION_LIFETIME
* @final ENV_UPLOAD_MAX_FILESIZE
*/
define('ENV_MAGIC_QUOTES_GPC', (int) ini_get('magic_quotes_gpc'));
define('ENV_OUTPUT_BUFFERING', (int) ini_get('output_buffering'));
define('ENV_REGISTER_GLOBALS', (int) ini_get('register_globals'));
define('ENV_SESSION_LIFETIME', (int) ini_get('session.cookie_lifetime'));
define('ENV_UPLOAD_MAX_FILESIZE', (int) ini_get('upload_max_filesize'));
/**
* 系统常用路径常量
* @final SYSTEM_UPLOADS_DIR
*/
include SYSTEM_ROOT.DIRECTORY_SEPARATOR.'config.php';
include SYSTEM_ROOT.DIRECTORY_SEPARATOR.'vars.php';
//模板
$smarty = new Smarty();
$smart-->template_dir = $SmartyCfg['TEMPLATE_DIR'];
$smarty->compile_dir = $SmartyCfg['COMPILE_DIR'];
$smarty->config_dir = $SmartyCfg['CONFIGS_DIR'];
$smarty->cache_dir = $SmartyCfg['CACHE_DIR'];
$smarty->left_delimiter = $SmartyCfg['LEFT_DELIMITER'];
$smarty->right_delimiter = $SmartyCfg['RIGHT_DELIMITER'];
$smarty->caching = false;
$smarty->compile_check = true;
$smarty->debugging = false;
$_tpl = new StdClass();
$_tpl->site="site/";
$_tpl->lib=$_tpl->site."lib/";
$_tpl->header=$_tpl->site."lib/header.htm";
$_tpl->footer=$_tpl->site."lib/footer.htm";
define('NEWIMG',$config->LiveSite.'/images/05062003011.gif');
define('NEWDATE',3);
//数据
$Data = new Data();
$Data->Open($DBType,$DBCfg);
$Data_Sec = new Data();
$Data_Sec->Open($DBType,$DBCfg);
$_global = new StdClass();
$_global->table = new StdClass();
/**
*
* 取得框架相对路径
*/
$_global->framework_path = new StdClass();
$_global->framework_path->System = getPath('System');
$_global->framework_path->FCKeditor = getPath('System.Web.UI.FCKeditor');
$_global->framework_path->Htmledit = getPath('System.Web.UI.Htmledit');
$_global->framework_path->Upload = getPath('System.Upload');
$_global->framework_path->Dtree = getPath('System.Web.UI.Dtree');
$smarty->assign('framework_path',$_global->framework_path);
$_global->table->admin_role = 'sys_role';
$_global->table->module = 'sys_module';
$_global->table->defmodule = 'sys_plugin';
$_global->table->user = 'sys_user';
$_global->table->news_content = 'news';
$_global->table->news_class='sys_module';
$_global->table->news_info='news';
$_global->table->article_content = 'article';
$_global->table->share_price = 'share_price';
$_global->table->pdf_content = 'pdf';
$_global->table->video_content = 'video';
$_global->table->person_content = 'person';
$_global->table->guest_content = 'guest';
$_global->table->vars="vars";
$_global->table->productmodule = 'productmodule';
$_global->table->product = 'product';
$_global->table->zhaopin = 'zhaopin';
$_global->table->vote = 'vote';
$_global->table->friendlink='friendlink';
$_global->table->focusimg='focusimg';
$_global->table->database_back="database_back";
$_global->table->mailadmin='mailadmin';
$_global->table->mailshow='sendmail_list';
$_global->table->guest_touch='guest_touch';
$_global->table->member='member';
$_global->table->cent='cent';
$_global->table->video='video';
$_global->form->dateimg = "../tpl/images/toolbar/html_f2.png";
$_global->form->noimg = "../tpl/images/toolbar/html_f2.png";
if(ENV_OUTPUT_BUFFERING>0){
ob_end_clean();
}
?>其中的include SYSTEM_ROOT.DIRECTORY_SEPARATOR.’config.php’;
他的ROOT密码 没准就在那里。
最后读出了ROOT密码和网页的管理员帐号。
不过,帐号登录不了。(administrator这个权限高的没法登录,权限低的却一点问题没有,真实匪夷所思……)
而且处于内网当中,所以root也是没有办法在外网登录。
本文只是介绍一下入侵这个网站的思路。如有错的地方,欢迎指出讨论。(特别是那个帐号无法登录的问题)
