细谈Web系统安装程序安全
细谈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 | foreach(Array('_GET','_POST','_COOKIE') as $_request){ |
经典的全局变量覆盖,代码的意思是把传入的变量数组遍历赋值,比如 $_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
额 老衲得回老家几天了 来时在写完吧
直接附件下载 点我