细谈web系统安装程序安全

前言

作为一个Web系统,安装程序是必不可少的。提供安装系统,已连接数据库和初始化网站数据,当首次安装时,系统一般会生成一个lock文件以免非法重装,但我们可以通,导致系统重装,系统数据丢失甚至getShell,本文以多个实例浅谈web系统安装程序的安全。

关于程序安装文件

web系统安装在第一次访问程序入口的会自动安装, 以笔者熟悉的php为例,一般是install.php 或者根目录下的install文件夹,安装流程如下。

围观以上内涵图先,接下来我们用多个案例细谈之。

最土团购直接重复安装 加 getShell

参考 http://www.0855.tv/post/46.htm
1.访问www.site.com/install.php (有的人懒,并没有删除这个文件)
2.填写自己本机搭建好的Mysql帐户和IP,重新安装之。
3.注册一个帐户,第一个注册的默认为管理员。
4.访问/manage/index.php

5.点击 设置–模版—选择about_job.html 添加PHP一句话
6.用菜刀链接site.com/about/job.php

跳转绕过 phpdisk header bypass & getShell

参考http://yaseng.me/phpdisk-header-bypass-getshell-exp.html

图二

如图二,已安装检测时,直接 header跳转,php中的 header 函数跳转之后还可以执行,而为了安装方便去掉gpc,导致重复安装直接getShell.

图三

xdcms全局变量覆盖绕过重装

参考 http://yaseng.me/xdcms-open-code-audit.html

install下的 index.php 文件

1
2
3
4
5
foreach(Array('_GET','_POST','_COOKIE') as $_request){

foreach($$_request as $_k => $_v) ${$_k} = _runmagicquotes($_v);

}

经典的全局变量覆盖,代码的意思是把传入的变量数组遍历赋值,比如 $_GET[‘a’] 赋值为 $a Ok 继续往下看已安装检测代码

$insLockfile = dirname(FILE).’/install_lock.txt’; //在全局数据遍历之前

if(file_exists($insLockfile)){

exit(“ 程序已运行安装,如果你确定要重新安装,请先从FTP中删除 install/install_lock.txt“);

}

这里的 insLockfile是我们可控的(全局变量覆盖),随便传入一个参数

http://demo.xdcms.cn/install/index.php?insLockfile=1

额 老衲得回老家几天了 来时在写完吧

直接附件下载 点我