0×00 导言

pfSense是一个基于FreeBSD,专为防火墙和路由器功能定制的开源版本。

在本文中,我们将向大家介绍在pfSense的2.1.3以及更低版本中的CVE-2014-4690漏洞;对于更高的版本来说,pfSense已经修复了这个漏洞。

0×01 pkg_mgr_install.php脚本中的LFI漏洞

首先,让我们来看一下来自/usr/local/www/pkg_mgr_install.php脚本中的一段代码:

 if ($_GET) {
  $pkgname = str_replace(array("<", ">", ";", "&", "'", '"'), "",
  htmlspecialchars_decode($_GET['pkg'], ENT_QUOTES |
NT_HTML401));
  switch($_GET['mode']) {
  case 'showlog':
  if (strpos($pkgname, ".")) {
  update_output_window(gettext("Something is wrong on the
equest."));
  } else if (file_exists("/tmp/pkg_mgr_{$pkgname}.log"))
pdate_output_window(@file_get_contents("/tmp/pkg_mgr_{$pkgname}.log"));
  else
  update_output_window(gettext("Log was not retrievable."));
  break;
  case 'installedinfo':
  if (file_exists("/tmp/{$pkgname}.info")) {
  $status = @file_get_contents("/tmp/{$pkgname}.info");
  update_status("{$pkgname} " . gettext("installation completed."));
  update_output_window($status);
  } else
  update_output_window(sprintf(gettext("Could not find %s."),
pkgname));
  break;
  default:
  break;
  }
  }

你可能已经注意到了,上面的代码需要接收两个GET参数,即mode和pkg。首先,参数mode在接收后会传递给switch语句,其中支持的参 数值为showlog或installedinfo。第二个参数是pkg,它在接收后会被读入到变量pkgname中,并会除掉输入字符串中 的<、 >、;、&、'、"六种字符。

由于执行替换的语句并没有对特殊字符.和/进行检查,这就给攻击者留下了遍历服务器中各个目录的机会。从上述代码中还可以看到,参数pkg的值竟然 与/tmp/{$pkgname}.info串联了起来,这也是非常不安全的做法。因为,如果我们利用参数pkg传递的值为../usr/local /info/gettext的话,那么代码读取到的完整路径就会是/tmp/../usr/local/info/gettex.info,而这是磁盘上 已有的一个文件。好了,让我们看看如下所示的一个请求。

图1  利用GET参数pkg进行目录遍历

需要注意的是,这个文件的开头部分“This is a gettext.info”被放入到了web页面的输出中了,具体如下图所示。

图2  一个展示请求的文件的响应

head /usr/local/info/gettext.info
This is gettext.info, produced by makeinfo version 4.13 from gettext.texi.
To verify that this is the same file, we can connect to the Pfsense ia SSH and issue the head command to display the first part of the ile; the output below verifies the file is the same.
INFO-DIR-SECTION GNU Gettext Utilities
START-INFO-DIR-ENTRY
gettext: (gettext). GNU gettext utilities.
autopoint: (gettext)autopoint Invocation. Copy gettext nfrastructure.
envsubst: (gettext)envsubst Invocation. Expand environment variables.
gettextize: (gettext)gettextize Invocation. Prepare a package for ettext.
msgattrib: (gettext)msgattrib Invocation. Select part of a PO file.
<script type="text/javascript" src="javascript/domTT/domLib.js"></script>
<script type="text/javascript" src="javascript/domTT/domTT.js"></script>
<script type="text/javascript" src="javascript/domTT/behaviour.js"></script>
<script type="text/javascript" src="javascript/domTT/fadomatic.js"></script>
<script type="text/javascript" src="/javascript/row_helper_dynamic.js"></script>

如果我们使用浏览器的话,展示效果会更好一些。

图3  用浏览器展示文件内容

由于这里的字符串连接操作就是在字符串尾部追加.info,所以这里显示的文件都是以.info作为扩展名。实际上,我们可以利用find命令找出所有文件名以这种扩展名结尾的文件,该命令使用方法如下所示。

find / -name "*.info"
/usr/local/info/gettext.info
/usr/local/info/autosprintf.info
/usr/pbi/snort-amd64/info/autosprintf.info
/usr/pbi/snort-amd64/info/gettext.info
/usr/pbi/snort-amd64/info/m4.info
/usr/pbi/snort-amd64/info/autoconf.info
/usr/pbi/open-vm-tools-nox11-amd64/info/autosprintf.info
/usr/pbi/open-vm-tools-nox11-amd64/info/gettext.info
/usr/pbi/open-vm-tools-nox11-amd64/info/m4.info
/usr/pbi/open-vm-tools-nox11-amd64/info/autoconf.info
/usr/pbi/havp-amd64/info/autosprintf.info
/usr/pbi/havp-amd64/info/gettext.info

需要注意的是,这个脚本不会接收NULL 字节%00,这将允许我们从服务器上任意下载文件。

攻击者可以利用这个漏洞获得来自Pfsense的任意.info文件中的内容。为了修复这个漏洞,/usr/local/www/pkg_mgr_install.php脚本必须实现相应的安全措施来阻止针对服务器的目录遍历攻击。

0×02 System_firmware_restorefullbackup.php脚本中的LFI漏洞

此外,在system_firmware_restorefullbackup.php脚本中也存在一个LFI漏洞。如果用户只具有“Diagnostics: Restore Full Backup”权限的话,如图所示,那么他是无法利用这个LFI漏洞的。

图4  “restore full backup”权限

实际上,如果攻击者想要利用这个漏洞的话,他必须首先取得更高的权限,至少为“Allow access to all pages”权限。

图5  “access to all pages”权限

虽然如此,这个Web应用仍然容易受到LFI注入的攻击,因为我们可以利用GET参数downloadbackup来传递任意值,就像下图那样。

图6  请求/etc/passwd文件

对于上述请求的响应如下所示,我们从中可以看出,/etc/passwd也一起返回给了用户。

图7  /etc/passwd文件

如果攻击者具备了前面所说的权限的话,那么他就能够利用这个漏洞来获得访问整个Pfsense目录的权限。

攻击者可以使用这个漏洞从系统上面下载任意文件。为了修复这个漏洞,必须对GET参数downloadbackup中传递的值进行相应的安全处置,阻止它任意从服务器读取文件。

0×03 小结

本文详细介绍了我们在PfSense中发现的一些目录遍历漏洞,希望对读者朋友们有所帮助。

*参考来源:proteansec编译/I12016,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

[cyber security][php]pfSense目录遍历漏洞分析的更多相关文章

  1. 【代码审计】大米CMS_V5.5.3 目录遍历漏洞分析

      0x00 环境准备 大米CMS官网:http://www.damicms.com 网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15) 程序源码下载:http://www ...

  2. 【代码审计】711cms_V1.0.5 目录遍历漏洞分析

      0x00 环境准备 711CMS官网: https://www.711cms.com/ 网站源码版本:711CMS 1.0.5 正式版(发布时间:2018-01-20) 程序源码下载:https: ...

  3. 【代码审计】CLTPHP_v5.5.3后台目录遍历漏洞分析

      0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...

  4. nginx解析漏洞,配置不当,目录遍历漏洞环境搭建、漏洞复现

    nginx解析漏洞,配置不当,目录遍历漏洞复现 1.Ubuntu14.04安装nginx-php5-fpm 安装了nginx,需要安装以下依赖 sudo apt-get install libpcre ...

  5. 网络安全学习阶段性总结:SQL注入|SSRF攻击|OS命令注入|身份验证漏洞|事物逻辑漏洞|目录遍历漏洞

    目录 SQL注入 什么是SQL注入? 掌握SQL注入之前需要了解的知识点 SQL注入情况流程分析 有完整的回显报错(最简单的情况)--检索数据: 在HTTP报文中利用注释---危险操作 检索隐藏数据: ...

  6. Kali学习笔记31:目录遍历漏洞、文件包含漏洞

    文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 目录遍历漏洞: 应用程序如果有操作文件的功能,限制不严 ...

  7. HttpClient使用之下载远程服务器中的文件(注意目录遍历漏洞)

    参考文献: http://bbs.csdn.net/topics/390952011 http://blog.csdn.net/ljj_9/article/details/53306468 1.下载地 ...

  8. 目录遍历漏洞简介 转载于h3c

    参考文章: 攻防:目录遍历漏洞简介

  9. nginx目录遍历漏洞复现

    nginx目录遍历漏洞复现 一.漏洞描述 Nginx的目录遍历与apache一样,属于配置方面的问题,错误的配置可导致目录遍历与源码泄露. 二.漏洞原理 1. 修改nginx.conf,在如下图位置添 ...

随机推荐

  1. Android Studio build dex jar

    Gradle配置 Build配置文件gradle.build中添加如下task task clearJar(type: Delete) { delete 'build/outputs/mylib.ja ...

  2. HDU-4527 小明系列故事——玩转十滴水 模拟

    题意:就是平时玩的十滴水游戏,游戏者拥有一定的水滴,能够滴在某些位置,如果一个点上的体积超过了4就会爆炸,向四周传递一个小水滴.该题就是要求模拟这个过程. 分析:这里有一个问题就是不能够使用递归来处理 ...

  3. python打怪之路【第二篇】:ImportError: No module named setuptools

    在python安装第三方模块时出现如下错误: python错误:ImportError: No module named setuptools这句错误提示的表面意思是:没有setuptools的模块, ...

  4. 安装 SciPy 和 scikit-learn 升级pip 及pip基本命令表

    安装Scipy和scikit-learn出错,出错记录及当时最终解决办法 问题: 一.使用pip直接安装 直接pip install scipy C:\Users\Plain>pip insta ...

  5. Linux线程的实现 & LinuxThread vs. NPTL & 用户级内核级线程 & 线程与信号处理

    另,线程的资源占用可见:http://www.cnblogs.com/charlesblc/p/6242111.html 进程 & 线程的很多知识可以看这里:http://www.cnblog ...

  6. Java命令提示符编译

    Java利用命令提示符编译 1:最简单的方式:直接编译 /** 文件路径:G:\测试项目\java\src 文件名称:JacaText.java 编写时间:2016/6/2 作 者:郑晨辉 编写说明: ...

  7. 20160824_CentOS6.4x64_关闭IPv6

    1.参考网址: http://blog.csdn.net/suplxj/article/details/7773423 2.我的操作: #cat <<EOF>>/etc/mod ...

  8. MySQL按照汉字的拼音排序,mysql汉字排序

    按照汉字的拼音排序,用的比较多是在人名的排序中,按照姓氏的拼音字母,从A到Z排序: 如果存储姓名的字段采用的是GBK字符集,那就好办了,因为GBK内码编码时本身就采用了拼音排序的方法(常用一级汉字37 ...

  9. sonar-gerrit-plugin-2.2.0 安装

    这是一个很新的插件国内使用的用户还是很少的,公司有需要才花了一段时间去研究. 作用:在 code review的时候可以将sonar的检测结果直接集成返回.帮助po对code 进行review. 请严 ...

  10. asp.net还原备份数据库(C#)

    因为做项目的时候用到对数据库的还原和备份,第一次接触,所以上网查了关于这方面的资料,网络果然是个好东西,该有的都有了,这里我就把原文中的代码直接粘贴过来了. using System; using S ...