从php反序列化到phar文件

在系统、程序运行的过程中,内存中的变量数据随着运行的结束,自动销毁,而想保存内存中的数据,就应运而生了一种序列化与反序列化的技术,用来将内存中的数据保存到文件中。在php中利用serialize函数,…

在运作系统软件和程序流程的全过程中,运行内存中的自变量统计数据会在运作完毕时全自动消毁。假如要将统计数据储存在运行内存中,则选用序列化和反序列化技术性将运行内存中的统计数据储存到文档中。 在php中,序列化涵数用以序列化要解决的统计数据,而且应用unserialize涵数对解决后的序列化统计数据开展反序列化和輸出。

做为ctf游戏里面的1个事例,魔术师方式__sleep()和__wakeup()将会会在序列化和反序列化全过程中导致某些系统漏洞。

sho_source涵数将当前目录与获得的自变量文档组成一起以显示文件的內容。所述编码的切入点是绕开__wakeup涵数。能用方式是CVE-2018-7124,这代表当另一半特性总数的值超过实际上特性数时,将绕过__wakeup的实行。下边详细介绍某些php序列化的基础知识,能够绕过。

上边的照片是序列化统计数据,每一首字母的含意,简略叙述,这一ctf难题的合理负荷,及其上边的详解,O: 5:“SoFun”: 2: {S: 7:“\ 03 * \ 03file“; s: 8:”flag.php“;} 照片11.jpg 在其中O表达类,5表达长短5,2表达在类中申明的2个自变量,S表达字符串,7表达长短,受维护组员前边含有'*'。这种作为前缀值在任一边都空着字节数,产生\ 03 * \ 03。针对php序列化全过程,O:和O: +能够表达类(查验經典SugarCRM中的preg_macth查验,相关详细资料,请参阅参照连接)。 phar拓展出示了这种将全部PHP手机应用程序放进名叫“phar”(PHP Archive)的单独文档以开展派发和安裝的方式。依据php官方网指南,phar文档将包括元数据的序列化统计数据。当你能够操纵序列化统计数据时,人们能够相互配合魔术师方式来保持运用。 照片4.jpg 因为人们愿意应用phar,我们一起在当地转化成1个演试,看一下phar文档中有什么构造和內容。演试编码给出如图:

依据php官方网指南,存根是phar文档中的1个标示:<php __HALT_COMPILER();

addFromString将文档做为字符串加上到phar文档,setMetadata,设定phar归档元数据,如上所述序列化元数据统计数据,后以十六进制景图显示信息转化成的文档以搜索序列化统计数据。 照片8.jpg 根据剖析phar文档和转化成全过程,发觉phar标示由stub标志,换句话说,假如phar文档能够变换为gif,txt等种类文档,要是有个存根,它能够被鉴别为phar文档。根据setstub涵数将GIF89a标头加上到存根标示,能够绕开很多发送体制。 在这一简易的检测中,搭建1个仿真模拟背景图,只容许文件上传尺寸低于30 kb的.gif或.jpeg文档(测试代码是最后参照连接) upload.php的 照片10jpg Upload.html

Evil.php

Show.php

应用全过程给出: 照片13.jpg 进攻设计效果图给出:

请参阅毕业论文以分析phar文档的受危害作用,给出如图: https://bugs.php.net/bug.php?id=72663 https://paper.seebug.org/37/ https://i.blackhat.com/us-16/Thu-August-9/us-16-Thomas-Its-A-PHP-Unserialization-Vulnerability-Jim-But-Not-As-We-Know-It-wp.pdf https://paper.seebug.org/690/ http://www.w3school.com.cn/php/php_file_upload.asp