[cyber security][php]pfSense目录遍历漏洞分析

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)

时间: 2024-08-08 09:41:57

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

目录遍历漏洞原理及复现

一.IIS目录遍历漏洞原理及复现 1.原理 “目录遍历”其实并不能算是漏洞,因为它是IIS的一个功能项.在IIS中将该选项勾上,用户就可以通过目录的形式访问网站中的文件,通常这项功能被用于共享文件.但由于管理员的疏忽或经验不足,在网站中开启了这项功能, 这就造成了IIS目录遍历漏洞. 2.复现 打开IIS信息服务管理器,对网站进行进行如下设置: 打开浏览器,在浏览器中访问该站点,可查看到服务器上的站点文件目录: 二.Apache目录遍历漏洞 1.原理 当客户端访问到一个目录时,Apache服务器

nginx目录遍历漏洞复现

一.漏洞描述 Nginx的目录遍历与apache一样,属于配置方面的问题,错误的配置可导致目录遍历与源码泄露. 二.漏洞原理 1. 修改nginx.conf,在如下图位置添加autoindex on 三.漏洞环境搭建和复现 1. 在ubuntu 16.04安装nginx 1.1安装nginx依赖库 1.1.1安装gcc g++的依赖库 ubuntu平台可以使用如下命令: apt-get install build-essential apt-get install libtool 1.1.2安装

小白日记37:kali渗透测试之Web渗透-手动漏洞挖掘(三)-目录遍历、文件包含

手动漏洞挖掘 漏洞类型 #Directory traversal 目录遍历[本台机器操作系统上文件进行读取] 使用者可以通过浏览器/URL地址或者参数变量内容,可以读取web根目录[默认为:/var/www/]之外的其他操作系统文件(如:/etc/passwd/).形成根源:目录权限限制不严格 #File include文件包含[1.include本地文件包含LFI:2.远程系统文件包含RFI(可传入木马)] 通常为如include函数,可以将web根目录以外的目录包含进来.根源:include

漏洞及修复——Apache/IIS目录遍历

一.Apache目录遍历漏洞的修复 1.在服务器端,打开Apache配置文件C:\Program Files\phpStudy\Apache\conf\httpd.conf  2.在httpd.conf文件中找到   Options +Indexes +FollowSymLinks +ExecCGI  并修改成   Options -Indexes +FollowSymLinks +ExecCGI  并保存: 3.重新启动phpstudy 二.IIS目录遍历漏洞的修复 1.在服务器端,打开 控制

nginx配置不当导致的目录遍历下载漏洞-“百度杯”CTF比赛 2017 二月场

题目:http://98fe42cede6c4f1c9ec3f55c0f542d06b680d580b5bf41d4.game.ichunqiu.com/login.php 题目内容: 网站要上线了,还没测试呢,怎么办? 经过测试在点击Mini-Zone的时候会有如下数据包. GET /index.php HTTP/1.1Host: 98fe42cede6c4f1c9ec3f55c0f542d06b680d580b5bf41d4.game.ichunqiu.comUpgrade-Insecure

网络安全系列之三十六 目录遍历攻击

目录遍历攻击又称目录穿越.恶意浏览.文件泄露等,攻击者利用系统漏洞访问合法应用之外的数据或文件目录,导致数据泄露或被篡改. 比如我们之前一直使用的Web服务器平台NMPServer,它的网站主目录为C:\NMPServer\NPMserv\www,理论上讲网站的所有内容都应该位于这个主目录里,即使内容位于别的位置,也应该采用虚拟目录的形式将之链接到主目录中.作为客户端,当然也只能访问主目录中的内容.但是如果网站存在漏洞,那么客户端就可以突破主目录的限制,而去访问其他目录中(比如C:\Window

Pikachu:目录遍历、敏感信息泄漏及URL重定向

目录遍历: 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活. 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应的文件. 在这个过程中,如果后台没有对前端传进来的值进行严格的安全考虑,则攻击者可能会通过“../”这样的手段让后台打开或者执行一些其他的文件. 从而导致后台服务器上其他目录的文件结果被遍历出来,形成目录遍历漏洞. 看到这里,你可能会觉得目录遍历漏洞和不安全的文件下载,甚至文件包含漏洞有差不多的

pikachu 目录遍历 敏感信息泄露

目录遍历漏洞概述在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能变的更加灵活. 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应的文件. 在这个过程中,如果后台没有对前端传进来的值进行严格的安全考虑,则攻击者可能会通过“../”这样的手段让后台打开或者执行一些其他的文件. 从而导致后台服务器上其他目录的文件结果被遍历出来,形成目录遍历漏洞. 看到这里,你可能会觉得目录遍历漏洞和不安全的文件下载,甚至文件包含漏洞有差不

pikachu靶场-重定向、目录遍历、敏感信息泄露

一.URL重定向 1.概述 不安全的url跳转 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方. 如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话 就可能发生"跳错对象"的问题. url跳转比较直接的危害是: -->钓鱼,既攻击者使用漏洞方的域名(比如一个比较出名的公司域名往往会让用户放心的点击)做掩盖,而最终跳转的确实钓鱼网站 2.不安全的URL跳转 点击第一个和第二个没有变化,第三个跳转