Palo Alto防火墙远程代码执行漏洞复现

      最近,花了点时间复现了一下这个漏洞,踩过一些坑,在这里记录一下。关于这个漏洞的情况,可以看这里。

      文章介绍说,三个漏洞组合完成代码执行的过程。作者其实写的蛮清楚的,但是在第三步是有一些坑要踩的。

      首先,来复现部分权限绕过,先访问/php/utils/debug.php。会直接跳转到登录页面,如下图所示:

Palo Alto防火墙远程代码执行漏洞复现_第1张图片

      接着按照作者指导的方式,访问/esp/cms_changeDeviceContext.esp,可以看如下所示:

Palo Alto防火墙远程代码执行漏洞复现_第2张图片

      接着再次访问/php/utils/debug.php即可完成访问,如下所示:

Palo Alto防火墙远程代码执行漏洞复现_第3张图片

      权限部分绕过还是很简单复现的。

      关于最后的代码执行,我因为在hackbar里面模拟post包,这里有一个小坑,hackbar会对提交的+号转换为%2B,开始我没注意,BurpSuit抓包的时候我也没注意,后来是看hackbar实现代码和生成的目录,发现这个小坑。看下hackbar中post的实现,对+号进行了转义:

2017-12-26_18-14-18

      所以,这里需要在最后提交POST包的时候,先Burpsuit拦截一下,修改再发出去。如下是拦截下来的POST包,可以看到base64编码字符+被转义了:

Palo Alto防火墙远程代码执行漏洞复现_第4张图片

      修改后再把包发出去,这样就OK了。(虽然不改也会返回200,但是这样在目标主机就不能base64解码了)如下所示:

Palo Alto防火墙远程代码执行漏洞复现_第5张图片

Palo Alto防火墙远程代码执行漏洞复现_第6张图片

Palo Alto防火墙远程代码执行漏洞复现_第7张图片

      如果是直接用python写exp,应该不会遇到上面的坑。

      接着还有两个坑等着你。

      这个代码执行的问题,是出在bash脚本genindex.sh这里。但是genindex.sh是由genindex_batch.sh调用才能执行起来。我们来看下这两个脚本的源码:

Palo Alto防火墙远程代码执行漏洞复现_第8张图片

      接着是genindex.sh中引起命令执行的代码:(/1目录下,我们带入的目录名引起代码执行)

2017-12-26_16-26-33

      genindex.sh中有一段代码如下:

Palo Alto防火墙远程代码执行漏洞复现_第9张图片

      这里就可以设置$dir为上面的任意值了,如traffic等。

      linux下我们用find搜索目录和文件的时候,有没有发现如果目录名带空格,虽然find也会执行成功,但是会把目录名称截断。我在本地测试代码的时候,虽然报错,find带入的执行代码也是执行成功的,但是这个在目标环境是行不通的。如何解决?在所要查找的目录下,继续建一个任意名称的目录就好了。

      解决了这个坑,在目标主机执行简单的命令,如touch aaaa这种已经没有问题了,但是要执行复杂一点的,还是有问题的。别看作者只是写了exec("[base64 code..]".decode("base64"))这么一句,这里面可是有坑的。base64编码的部分也是要带入exec的,才能执行起来。

      几个坑都点出来了,exp我就不放出来了,有需要的自己再琢磨琢磨,应该可以写出exp了。

      我执行了一个反弹shell,如下是复现的结果:

Palo Alto防火墙远程代码执行漏洞复现_第10张图片

 

你可能感兴趣的:(Palo Alto防火墙远程代码执行漏洞复现)