phpBB 2.0.13惊现漏洞的解决

一、Path Disclosure

漏洞文件:/db/oracle.php

漏洞描叙:直接访问oracle.php,导致暴露web路径

涉及版本:phpbb <=2.013

测试:ie提交http://127.0.0.1/phpBB2/db/oracle.php 返回错误:

Fatal error: Cannot redeclare sql_nextid() in f:\easyphp1-7\www\phpbb2\db\oracle.php on line 405

解决办法

如果你不是采用的oracle数据库,可以直接把oracle.php删除

修改php.ini设置: display_errors = Off

二、Remote php File Include

漏洞文件:/admin/admin_styles.php

漏洞描叙:admin_styles.php文件里变量过滤不严,导致从后台执行恶意代码,从而危险服务器安全

涉及版本:phpbb <=2.013+ php <5.0

漏洞分析:

71 case "addnew":

72 $install_to = ( isset($HTTP_GET_VARS[’install_to’]) ) ? urldecode($HTTP_GET_VARS[’install_to’]) : $HTTP_POST_VARS[’install_to’];

73 $style_name = ( isset($HTTP_GET_VARS[’style’]) ) ? urldecode($HTTP_GET_VARS[’style’]) : $HTTP_POST_VARS[’style’];

74

75 if( isset($install_to) )

76 {

77

78 include($phpbb_root_path. "templates/" . $install_to . "/theme_info.cfg");

79

80 $template_name = $install_to;

81 $found = FALSE;

$install_to变量过滤不严,导致被include($phpbb_root_path. "templates/" . $install_to . "/theme_info.cfg");调用,入侵者可以通过构造 $install_to达到攻击

目的

测试分析(目的:从后台得到webshelll):

首先我们只看78行代码

78 include($phpbb_root_path. "templates/" . $install_to . "/theme_info.cfg");

include最终于是执行了theme_info.cfg文件,theme_info.cfg是保存“风格”的一些设置 如果我们可以在从在theme_info.cfg文件插入恶意代码,那么就直接通过include执行了我们的代码 :) [思路参考《从后台到webshell的一点思路》]我们来测试下:

后台风格管理-->管理选项--->编辑-->CSS 风格表 输入";phpinfo();" (也可以是其他变量插入),然后“输出”设置成功保存到theme_info.cfg文件

我们在打开theme_info.cfg看看:

$subSilver[0][’head_stylesheet’] = "subSilver.css\";phpinfo();\"";

郁闷"被过滤了,我是在 magic_quotes_gpc = off 下测试的 看来phpbb本身对做了过滤 ,此路不通 :(

在对于<5.0(不包括4.10)的php本身存在对null截断的漏洞:

------------------------------- 漏洞具体描叙 start -------------------------------

PHP存在输入验证漏洞,远程攻击者可以利用这个漏洞读取系统文件内容及进行目录遍历攻击。

问题一是addslashes()存在问题,addslashes()用于过滤用户输入,在magic_quotes_gpc设置"on"时,将对每个输入执行addslashes()进行过滤,但是由于NULL字节不正确被addslashes()编码,如果用户输入被include()或require()使用,可能导致攻击者读取文件系统的任意文件。

问题二是上传路径遍历问题,PHP自动过滤上传的文件名数据,删除在斜杠或反斜杠之前的数据,但是如果攻击者上传的文件包含单引号,而WEB服务又设置magic_quotes为ON,或者对上传文件名执行addslashes()操作,那么在单引号前会前缀一个反斜杠,因此在Windows系统可造成目录遍历问题,导致文件上传到系统任意目录中。

Warning: main(./../templates/theme_info.cfg\0/theme_info.cfg): failed to open stream: No such file or directory in f:\easyphp1-7\www\phpbb2\admin\admin_styles.php on line 78

Warning: main(): Failed opening ’./../templates/theme_info.cfg\0/theme_info.cfg’ for inclusion (include_path=’.;f:\EasyPHP1-7\php\pear\’) in f:\easyphp1-7\www\phpbb2\admin\admin_styles.php on line 7

%00变从了\0,phpbb就是变态,既然%00不行 我们在看到72行代码:

72 $install_to = ( isset($HTTP_GET_VARS[’install_to’]) ) ? urldecode($HTTP_GET_VARS[’install_to’]) : $HTTP_POST_VARS[’install_to’];

我们使用ie提交的方式是get 那么我们提交的&install_to,要被urldecode()解析,那么我们可以先把%00进行url编码一次:%25%30%30 提交:

http://127.0.0.1/phpBB2/a......6eb9ea1e43e62cbd634

返回:

Warning: main(./../templates/theme_info.cfg): failed to open stream: No such file or directory in f:\easyphp1-7\www\phpbb2\admin\admin_styles.php on line 78

Warning: main(): Failed opening ’./../templates/theme_info.cfg’ for inclusion (include_path=’.;f:\EasyPHP1-7\php\pear\’) in f:\easyphp1-7\www\phpbb2\admin\admin_styles.php on line 7

注意和%00时比较

%00     ---> main(./../templates/theme_info.cfg\0/theme_info.cfg)

%25%30%30 ---> Warning: main(./../templates/theme_info.cfg)

哈哈 include成功被截断,那么我们可以利用../来调用容易文件咯 :)

具体利用

我们把phpshell代码保存为gif或其他图片格式,在通过论坛上传 然后利用构造 install_to 而被 include() 调用并执行。

这里phpshell代码代码使用 保存为 1.gif 我们到 http://127.0.0.1/phpBB2/profile.php?mode=editprofile 上传图像

返回错误:The avatar filetype must be .jpg, .gif or .png

如图1

大家都晓得图片文件都有他的“特殊标志” ,用uedit等编辑工具你就可以发现如 gif 文件的开头有“GIF89a” 看来phpbb在判断后缀后还用了 getimagesize() 或类似的函数判断,那么我们怎么绕过去呢?注意gif的文件尾部有个“0000...”的空数据区,我们就可以把php代码写到这个里面。

如图2

(0)

相关推荐

  • phpBB 2.0.13惊现漏洞的解决

    一.Path Disclosure 漏洞文件:/db/oracle.php 漏洞描叙:直接访问oracle.php,导致暴露web路径 涉及版本:phpbb <=2.013 测试:ie提交http://127.0.0.1/phpBB2/db/oracle.php 返回错误: Fatal error: Cannot redeclare sql_nextid() in f:\easyphp1-7\www\phpbb2\db\oracle.php on line 405 解决办法 如果你不是采用的or

  • Win10系统安装MySQL8.0.13遇到的问题及解决方法

    操作系统:Window10 MySQL版本:8.0.13-winx64 安装步骤比较简单,本文不再啰嗦,以下是runoob提供的安装说明: http://www.runoob.com/mysql/mysql-install.html 安装后遇到的问题: 一:Access denied for user 'root'@'localhost' (using password:YES) 解决方式: 1.以管理员的身份进入到cmd命令窗口,并cd到MySQL安装路径的bin目录下. 2.关闭MySQL服

  • Centos 6.5系统下编译安装PHP 7.0.13的方法

    PHP7.0正式版也出来了,今天编译安装了一下,写下安装步骤,我是在centos6.6 环境中编译的,下面是详细的安装步骤 环境依赖 yum install gcc gcc-c++ libxml2 libxml2-python libxml2-devel -y 下载 wget http://cn2.php.net/distributions/php-7.0.13.tar.gz 解压 tar -zxvf php-7.0.13.tar.gz cd php-7.0.13 ./configure --e

  • MySQL 8.0.13设置日期为0000-00-00 00:00:00时出现的问题解决

    刚开始学习数据库操作,今天存数据时发现,保存的时候报错(Error 1292: Incorrect datetime value: '0000-00-00' for column 'deleted_at' at row 1) ,之后就搜索了下原因,是因为MySQL存日期时不允许出现这种格式导致的.下面记录下解决问题的经过: 先是根据Mysql 数据库date, datetime类型设置0000-00-00默认值报错问题这篇博客操作的.但是发现.我电脑上没有文章中提到的cnf文件.于是就在网上搜索

  • mysql 8.0.13手动安装教程

    本文为大家分享了mysql 8.0.13手动安装教程,供大家参考,具体内容如下 一.步骤解读 1.下载MySQL 下载地址 选择 Downloads-->Community-->MySQL Community Server,然后拉到页面的最低端,点击"下载". 此时一般会提示登陆,不用理会,直接点击最下面的"No thanks, just start my download."直接下载. 我们选择Generally Available(GA)Releas

  • windows10系统安装mysql-8.0.13(zip安装) 的教程详解

    安装环境说明 •系统版本:windows10 •mysql版本:mysql-8.0.13-winx64.zip •下载地址:http://mirrors.163.com/mysql/Downloads/MySQL-8.0/mysql-8.0.13-winx64.zip 解压安装包 •解压路径:D:\develop\software •解压后mysql根目录:D:\develop\software\mysql-8.0.13-winx64 原则: 安装目录不能有空格.不能有中文 配置文件 •my.i

  • CentOS7.3下mysql 8.0.13安装配置方法图文教程

    一.基础环境 1.操作系统:CentOS 7.3 2.MySQL:8.0.13 链接: https://pan.baidu.com/s/13-j_umr7eEnKFaugw4YTqQ 提取码: 62yt 二.安装MySQL 1.卸载mariadb数据库 rpm -qa | grep mariadb yum -y remove mariadb-libs-5.5.52-1.el7.x86_64 2.安装相关依赖(本文使用CentOS 7.3镜像做本地离线yum源) yum -y install op

  • MySQL Server 8.0.13.0 安装教程图文详解

    在mysql 6.1.3的基础上安装8.0.13. mysql 8.0.13 下载地址: https://dev.mysql.com/downloads/windows/installer/8.0.html 可直接下载313.8M的.msi文件. 下载之后如图: 双击可直接安装,如出现如下报错,可在360中更新相应的.net framework 同意协议进入下一步 接下来,不用修改,一路点击next即可. 在已经安装版本的基础上,选择add进行添加. 选择mysql服务器选项 将需要8.0的版本

  • Docker版的MySQL5.7升级到MySQL8.0.13,数据迁移

    1.备份旧的MySQL5.7的数据 记得首先要备份旧的数据,防止升级失败导致数据丢失.备份的方式有两种,一种是在宿主机直接执行导出命令,另外一种是先进入Docker环境下进行操作.主要的导出命令如下: #方式一,直接在宿主机器进行数据备份 # 0df568 是docker的id ;-uroot -p123456 是用户名和密码;dbA dbB是要备份的数据,--databases 后面可以接多个数据库名,导出的sql到/root/all-databases3306.sql docker exec

  • Centos7 安装mysql 8.0.13(rpm)的教程详解

    yum or rpm? yum安装方式很方便,但是下载mysql的时候从官网下载,速度较慢. rpm安装方式可以从国内镜像下载mysql的rpm包,比较快.rpm也适合离线安装. 环境说明 •操作系统:Centos7.4 (CentOS-7-x86_64-Minimal-1804.iso) •mysql:mysql8.0.13 •卸载系统自带的mariadb-lib •查看mariadb版本 rpm -qa|grep mariadb mariadb-libs-5.5.56-2.el7.x86_6

随机推荐