我喜欢黑夜,喜欢网络安全,孤独寂寞的黑夜里,我只需要,一包烟,一台笔记本...
更多
首  页>>JAVA安全开发>> 安全运维细谈Web系统安装程序引发的安全问题
细谈Web系统安装程序引发的安全问题
6409
1推荐
0评论

Author:Yaseng

[目录]

0×00 前言

0×01 关于程序安装文件

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

0×03 跳转绕过 phpdisk header bypass & getShell

0×04 全局变量覆盖绕过 sdcms

0×05 非主流 dcrcms 的非常重装

0×06 phpweb 安装会员验证绕过

0×07 其他绕过实例

0×08 安全代码的编写

0×09 总结

前言

作为一个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 绕过

参考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 文件

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



图四

图四位sdcms官方网站,利用poc

http://www.xxx.com/install/index.php?insLockfile=1&step=4&dbhost=localhost&dbname=xdcms&dbuser=root&dbpwd=&dbpre=c_&dblang=gbk&adminuser=yaseng&adminpwd=90sex

加粗部分填写配置 直接绕过 重装

dcrcms 逻辑缺陷导致二次安装

我们来看dcrcms非主流安装程序,没有已安装检测代码,index.php写入配置,传入install_action.php,当安装结束时,

function install_end()

{

//安装收尾

//把安装文件的名字换了

@rename(‘index.php’, ’index.php_bak’);

}

额 改了index.php 有毛用,index.php只是一个配置数据的发射器,好吧 既然你改名的 index 我就本地写一个index

图五

提交本地表单

图六

Done !!!

phpweb 重装vip验证绕过

Phpweb 作为一个收费系统,安装时有会员验证,所以开发人员的天真的免去了已安装检测.

图七

但是安装流程有 post过来的 nextstep控制

图八

Firefox tamper 直接绕过安装 (破解此程序未测试,感兴趣者可深入研究)

图九

其他绕过

安装程序不能绕过时,可以通过别的方式,比如dedecms的任意文件删除,删除lockfile,

Xxxcms的任意文件改名等等。

安全代码的编写

改名? lock file ? ….. 这些都有被绕过的危险,discuz给了我们一个很好答案.看代码,安装完后访问后台

if(@file_exists(DISCUZ_ROOT.’./install/index.php’) && !DISCUZ_DEBUG) {

@unlink(DISCUZ_ROOT.’./install/index.php’);

if(@file_exists(DISCUZ_ROOT.’./install/index.php’)) {

dexit(‘Please delete install/index.php via FTP!’);

}

}

直接删除 index.php,下手干净利落,永除后患

总结

本文笔者代码审计和项目开发时对web系统安装程序的简单评测,案例中有的在新版本中已经修正,有些是未公布0day,具体利用方法还靠读者自行研究。

已经有 ( 0 ) 位网友对此发表了自己的看法,你也评一评吧! 此文不错,我要推荐-->    推 荐
欢迎参与讨论,请在这里发表您的看法、交流您的观点@禁止各种脚本

  • 点击Top
  • 推荐Top
  • 评论Top
更 多>>
本站采用Java语言开发,Spring框架,欢迎朋友们提意见。重新对页面进行布局,修改了程序,方便开源使用,由于本人美工真的不行 ,很少用背景图片,页面基本都用背景色...
主题:无色无味 | 网站地图|
Copyright (c) 2012-2013 www.shack2.org All Rights Reserved. | 空ICP备111111111号 | 程序设计: shack2 Powered by SJBlog v1.0 联系QQ:1341413415