[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)
[cyber security][php]pfSense目录遍历漏洞分析的更多相关文章
- 【代码审计】大米CMS_V5.5.3 目录遍历漏洞分析
0x00 环境准备 大米CMS官网:http://www.damicms.com 网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15) 程序源码下载:http://www ...
- 【代码审计】711cms_V1.0.5 目录遍历漏洞分析
0x00 环境准备 711CMS官网: https://www.711cms.com/ 网站源码版本:711CMS 1.0.5 正式版(发布时间:2018-01-20) 程序源码下载:https: ...
- 【代码审计】CLTPHP_v5.5.3后台目录遍历漏洞分析
0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...
- nginx解析漏洞,配置不当,目录遍历漏洞环境搭建、漏洞复现
nginx解析漏洞,配置不当,目录遍历漏洞复现 1.Ubuntu14.04安装nginx-php5-fpm 安装了nginx,需要安装以下依赖 sudo apt-get install libpcre ...
- 网络安全学习阶段性总结:SQL注入|SSRF攻击|OS命令注入|身份验证漏洞|事物逻辑漏洞|目录遍历漏洞
目录 SQL注入 什么是SQL注入? 掌握SQL注入之前需要了解的知识点 SQL注入情况流程分析 有完整的回显报错(最简单的情况)--检索数据: 在HTTP报文中利用注释---危险操作 检索隐藏数据: ...
- Kali学习笔记31:目录遍历漏洞、文件包含漏洞
文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 目录遍历漏洞: 应用程序如果有操作文件的功能,限制不严 ...
- HttpClient使用之下载远程服务器中的文件(注意目录遍历漏洞)
参考文献: http://bbs.csdn.net/topics/390952011 http://blog.csdn.net/ljj_9/article/details/53306468 1.下载地 ...
- 目录遍历漏洞简介 转载于h3c
参考文章: 攻防:目录遍历漏洞简介
- nginx目录遍历漏洞复现
nginx目录遍历漏洞复现 一.漏洞描述 Nginx的目录遍历与apache一样,属于配置方面的问题,错误的配置可导致目录遍历与源码泄露. 二.漏洞原理 1. 修改nginx.conf,在如下图位置添 ...
随机推荐
- android DevicePolicyManager实现一键锁屏
本文章一部分资料来源于网上 1.实现一键锁屏关键是DevicePolicyManager这个类,然后使用lockNow():方法. 2.DevicePolicyManager类,可以让你的做软件获得系 ...
- windows下的Nodejs及npm的安装、常用命令,Nodejs开发环境配置
http://www.cnblogs.com/webstorm/p/5744942.html ***************************************** 第一步:下载Nodej ...
- 使用easyui时 进入一个新页面 前要经过一个页面混乱的时候 才到正常的页面去
var width = $(window).width(); var height = $(window).height(); var html = "<div id='loading ...
- java读取配置文件中数据
Properties pps=new Properties(); try { pps.load(new FileInputStream("src/emai ...
- 经典SQL语句大全以及50个常用的sql语句
经典SQL语句大全 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql serv ...
- BSD Apache GPL LGPL MIT
当Adobe.Microsoft.Sun等一系列巨头开始表现出对”开源”的青睐时,”开源”的时代即将到来! 最初来自:sinoprise.com/read.php?tid-662-page-e-fpa ...
- 查看Msi文件内容
1通过msiexec命令解压msi包 msiexec.exe /a c:\msi\installer.msi /qb targetdir=d:\msi\installer 2 使用Orca查看. Or ...
- Java—接口与抽象类
一.接口 Java编程语言中禁止多继承属性,但可以通过接口来帮助类扩展方法.接口中可以定义大量的常量和方法,但其中的方法只是一种声明,没有具体的实现,使用接口的类自己实现这些方法. 接口与类的不同在于 ...
- jquery mobile 教程
简介:jQuery Mobile框架可以轻松的帮助我们实现非常好看的.可跨设备的Web应用程序.我们将后续的介绍中向大家介绍大量的代码及实例. jQuery一直以来都是非常流行的富客户端及Web应用程 ...
- Positive-definite kernel
Definition Let be a sequence of (complex) Hilbert spaces and be the bounded operators from Hi to Hj. ...