【漏洞练习-Day10】FengCms 1.32与Simple-Log1.6网站重装漏洞

开始练习【红日团队】的PHP-Audit-Labs 代码审计 Day10
链接:https://github.com/hongriSec/PHP-Audit-Labs
感兴趣的同学可以去练习练习
预备知识:
内容题目均来自 PHP SECURITY CALENDAR 2017
Day 10 - Anticipation代码如下:

extract($_POST);

function goAway() {
  error_log("Hacking attempt.");
  header('Location: /error/');
}

if (!isset($pi) || !is_numeric($pi)) {
  goAway();
}

if (!assert("(int)$pi == 3")) {
  echo "This is not pi.";
} else {
  echo "This might be pi.";
}

漏洞解析 :
这道题目实际上讲的是当检测到攻击时,虽然有相应的防御操作,但是程序未立即停止退出,导致程序继续执行的问题。程序在第一行处 使用 extract函数,将POST请求的数据全都注册成变量。

extract () 函数:

(PHP 4, PHP 5, PHP 7)

功能:

extract() 函数从数组中将变量导入到当前的符号表。

定义:
extract(array,extract_rules,prefix)
说明:
参数描述
array必需。规定要使用的数组。
extract_rules可选。extract() 函数将检查每个键名是否为合法的变量名,同时也检查和符号表中已存在的变量名是否冲突。对不合法和冲突的键名的处理将根据此参数决定。
prefix可选。如果 extract_rules 参数的值是 EXTR_PREFIX_SAME、EXTR_PREFIX_ALL、 EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS,则 prefix 是必需的。

范例:

在这里插入图片描述
结果:

$a = Original; $b = Dog; $c = Horse; 
$dup_a = Cat

这样我们就可以控制 第8行处的pi 变量。

if (!isset($pi) || !is_numeric($pi)) {

程序对pi变量进行简单的验证,如果不是数字或者没有设置 pi变量,程序就会执行 goAway方法,即记录错误信息并直接重定向到 /error/页面。看来程序员这里是对非法的操作进行了一定的处理。但是关键在于,程序在处理完之后,没有立即退出,这样程序又会按照流程执行下去,也就到了第12行assert语句。

if (!assert("(int)$pi == 3")) {

由于前面pi变量可以被用户控制,所以在这一行存在远程代码执行漏洞

例如我们的payload为:pi=phpinfo() (这里为POST传递数据),然后程序就会执行这个 phpinfo 函数。当然,你在浏览器端可能看不到 phpinfo 的页面,而是像下面这样的图片:

在这里插入图片描述
在这里插入图片描述
为了方便大家理解,红日团队的大佬录制了debug程序的过程:点这里

实际上,这种案例在真实环境下还不少。例如有些CMS通过检查是否存在install.lock文件,从而判断程序是否安装过。如果安装过,就直接将用户重定向到网站首页,却忘记直接退出程序,导致网站重装漏洞的发生。下面我们来看两个真实的案例。

实例分析:

  • FengCms 1.32 网站重装漏洞

本次实例分析,我们选取的是 FengCms 1.32 。

漏洞POC 本站提供安全工具、程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!

漏洞分析:

对于一个已经安装好的 FengCms ,当用户再次访问 install/index.php 时,就会导致网站重装。我们来具体看下程序的逻辑:
现在正常页面:
在这里插入图片描述
install/index.php(25-135行)
在这里插入图片描述
我们可以看到,如果是第一次安装网站,程序会在 upload目录下(27行)生成一个 INSTALL 文件,用于表示该网站已经安装过(对应上图 25-28行 代码)。当我们再次访问该文件时,程序会先判断upload目录下是否有INSTALL文件。如果存在,则弹窗提示你先删除 INSTALL 文件才能进行网站重装(对应上图 1-4行 代码)。但是这里注意了,网站在弹出告警信息后,并没有退出,而是继续执行,所以我们在不删除 INSTALL 文件的情况下,仍可以重装网站

比较有趣的是,原本网站网站安装成功后,程序会自动删除upload目录下的所有文件,来防止攻击者重装网站,然而这段代码却在注释当中,具体原因不得而知。

/****
    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;
***/

漏洞利用:

漏洞利用就极其简单了 ,我们直接访问 install/index.php 页面,无视弹出来的警告:

在这里插入图片描述
在这里插入图片描述

  • Simple-Log1.6网站重装漏洞

漏洞分析:

我们再来看 Simple-Log1.6网站重装的例子。其install\index.php 文件中,对网站安装成功的处理有问题,其代码是在下图 17-20行 ,程序只是用 header 函数将其重定向到网站首页,然而程序还是会继续执行下去。
在这里插入图片描述
而且程序的安装逻辑其实是有问题的,安装步骤由 $setup变量控制,而 $setup变量可以被用户完全控制(如上图 第10行 代码),攻击者完全可以控制网站的安装步骤。

漏洞利用:

Simple-Log 的重装利用:
http://10.211.55.2:100/Simple-Log1.6/upload/install/index.php
在这里插入图片描述
host=localhost&dbname=day9&dbuser=root&dbpass=root&dbprefix=&admin_user=admin&admin_pass=123456&blogname=admin&blogdesc=&setup=finish&button=%E5%BC%80%E5%A7%8B%E5%AE%89%E8%A3%85

修复建议:

实际上,要修复这一类型的漏洞,我们只要在正确的地方退出程序即可。拿这次的例题举例,我们只需要在检查到非法操作的时候,直接添加退出函数,即可避免漏洞发生。例如使用 dieexit等函数都是可以的,具体修复代码如下:
在这里插入图片描述

结语

再次感谢【红日团队】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FengCms Beta 1.28 更新说明: 本次更新给栏目增加了图片字段,以后可以给每个栏目单独指定一张栏目图片,便于大家更加灵活的制作网站。 另,前段时间由于爆发了N多的安全漏洞,为了更加安全,我们给全站增加了XSS过滤,导致后台一些功能受到限制,甚至出错。 为了解决这个问题,我们在1.28版本中,去掉了全站过滤,而仅仅保留了前台过滤。这样大家在使用时会更加灵活方便。 1、栏目表新增图片字段 2、去除了后台的XSS过滤。 虽然FengCms是一款免费、开源、且就FengCms本身是不寻求商业模式的这样一套自由的CMS系统。但是出于对乌云上这些朋友给予我们的热心帮助,开发团队决定采购一批小礼品。随后将邮寄给大家! 希望各位白帽子可以继续为FengCms挖掘漏洞。我相信,我们一定可以做得更好! 另外FengCms2.0 公开版本将推迟发布。我们从1.0被挖掘出来的漏洞和问题,我们将进一步的去完善2.0。不定期的会在FengCms交流群中发布内测版本。希望大家可以关注QQ群 ,群号是53667986! ============== FengCms 安全说明 ============================= 1、修改后台密码。在后台右上角点击“修改密码”进行修改。 2、修改后台认证码。在 /config.php 配置文件中修改。 3、修改后台路径。直接修改 admin 目录名即可。 4、随时关注官方网站 www.fengcms.com 以获得最新的升级补丁。 ============== Linux 权限配置777 ============================ PS:安装在linux服务器下要注意给以下目录文件夹和其下的子文件777权限。 /admin/app/dbbackup 数据库备份目录 /admin/app/cache 后台缓存文件 /app/cache 前台缓存文件 /template 模版目录 /css 样式目录 /upload/ 上传目录 /config.php 配置文件 更多目录信息,请查阅目录说明.txt文件 =============== 新L标签写法 ================================= 老的万能标签写法: {loop M("module")->l("article"…… 新的万能标签写法: {loop l("article"…… 也就是说,省略调了“ M("module")-> ” 原先写的模版没有必要修改,因为兼容老的写法。 ============================================================= 后台地址:/admin/login.php 用户名:admin 密码:123456 认证码:8888 ======================== FengCms系统是由地方网络工作室倾力打造的一套PHP+MYSQL的CMS,和其他小型CMS不同,我们的CMS是完全自主开发的核心(由开源核心开发的CMS程序很大程度上受到核心的限制,在安全问题,以及代码臃肿等方面有先天缺陷)。当然,由于我们是自主开发的核心,因此,我们和其他cms有很大的不同。 由此,FengCms官方制作了视频教程和模版标签白皮书,方便诸君能够迅速理解并使用FengCms网站内容管理系统。 当然,这还远远不够。因此我们会倍加努力,写更多的教程,不断的完善我们的程序,以期为诸君提供更加优质的服务! FengCms是一套纯粹为展示内容而生的cms系统。因此,FengCms不包含任何交互模块(除自带的留言,且默认不显示)。我们是为纯粹为展示内容而生的,是纯展示类型网站的最佳伴侣。 FengCms自带非常强大的模型系统,利用模型系统,可以自由搭建任意需要的模型。不再收到任何限制。甚至,你新建的模型可以连栏目都没有,你爱咋滴咋滴。 FengCms的万能L标签功能,可以对数据库内的任意数据表进行任意调用,支持原生PHP函数,支持循环套循环,判断套判断。 更为强大的是。FengCms的后台,其实和前台一样,是用一样的代码写出来的。因此,FengCms有无与伦比的二次开发潜力。其中的好处,需要诸君慢慢品评! FengCms系统可以用来制作企业网站,文章网站,图片网站,电影网站,导航站等等等等不需要交互系统的各种类型的网站FengCms 开发团队石峰在开发一套大的项目,总监刘峰目前就职于青海某旅游公司。因此,FengCms 项目进展有所放缓。但是,FengCms团队始终对FengCms不离不弃。我们一定会坚持开发下去的。请大家放心。 如果使用新增的下载函数不能下载,而是打开一个乱码的网
FengCms Beta 1.32 更新说明: 1、新增阿里云xss安全插件,提升FengCMS系统安全 2、核心增加过滤,提升系统安全。 3、新增动态缩略图函数。可根据大图动态生成缩略图于内存中,可大幅减少流量占用,提高网站打开速度(但会占用CPU资源,劣质虚拟主机慎用)。 函数使用方法 {thumb(原始图片地址,缩略图宽度,缩略图高度)} 示例:{thumb($v['img'],120,80)} 4、新增 web.config 文件,用于 windows 2008 以及以上系统的伪静态配置(需要服务器支持)我们建议系统运行于linux服务器上。 FengCms系统介绍 FengCms系统是由地方网络工作室倾力打造的一套PHP MYSQL的CMS,和其他小型CMS不同,我们的CMS是完全自主开发的核心(由开源核心开发的CMS程序很大程度上受到核心的限制,在安全问题,以及代码臃肿等方面有先天缺陷)。当然,由于我们是自主开发的核心,因此,我们和其他cms有很大的不同。 由此,FengCms官方制作了视频教程和模版标签白皮书,方便诸君能够迅速理解并使用FengCms网站内容管理系统。 当然,这还远远不够。因此我们会倍加努力,写更多的教程,不断的完善我们的程序,以期为诸君提供更加优质的服务! FengCms是一套纯粹为展示内容而生的cms系统。因此,FengCms不包含任何交互模块(除自带的留言,且默认不显示)。我们是为纯粹为展示内容而生的,是纯展示类型网站的最佳伴侣。 FengCms自带非常强大的模型系统,利用模型系统,可以自由搭建任意需要的模型。不再收到任何限制。甚至,你新建的模型可以连栏目都没有,你爱咋滴咋滴。 FengCms的万能L标签功能,可以对数据库内的任意数据表进行任意调用,支持原生PHP函数,支持循环套循环,判断套判断。 更为强大的是。FengCms的后台,其实和前台一样,是用一样的代码写出来的。因此,FengCms有无与伦比的二次开发潜力。其中的好处,需要诸君慢慢品评! FengCms系统可以用来制作企业网站,文章网站,图片网站,电影网站,导航站等等等等不需要交互系统的各种类型的网站FengCms 开发团队石峰在开发一套大的项目,总监刘峰目前就职于青海某旅游公司。因此,FengCms 项目进展有所放缓。但是,FengCms团队始终对FengCms不离不弃。我们一定会坚持开发下去的。请大家放心。 如果使用新增的下载函数不能下载,而是打开一个乱码的网页,则请检查php.ini配置文件中的 output_buffering 选项是否在 Off ,请改成 On 或者 4096 FengCms 安全说明 1、修改后台密码。在后台右上角点击“修改密码”进行修改。 2、修改后台认证码。在 /config.php 配置文件中修改。 3、修改后台路径。直接修改 admin 目录名即可。 Linux 权限配置777 PS:安装在linux服务器下要注意给以下目录文件夹和其下的子文件777权限。 /admin/app/dbbackup 数据库备份目录 /admin/app/cache 后台缓存文件 /app/cache 前台缓存文件 /template 模版目录 /css 样式目录 /upload/ 上传目录 /config.php 配置文件 新L标签写法 老的万能标签写法: {loop M("module")->l("article"…… 新的万能标签写法: {loop l("article"…… 也就是说,省略调了“ M("module")-> ” 原先写的模版没有必要修改,因为兼容老的写法。 FengCms前台页面: FengCms后台管理:  后台地址:/admin/login.php 用户名:admin 密码:123456 认证码:8888  后台页面:   相关阅读 同类推荐:CMS系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值