作者:seaii@知道創宇404實驗室
時間:2018/08/23
英文版本:https://paper.seebug.org/988/
0x01 前言
通常我們在利用反序列化漏洞的時候,只能將序列化后的字符串傳入unserialize(),隨着代碼安全性越來越高,利用難度也越來越大。但在不久前的Black Hat上,安全研究員Sam Thomas
分享了議題It’s a PHP unserialization vulnerability Jim, but not as we know it
,利用phar文件會以序列化的形式存儲用戶自定義的meta-data這一特性,拓展了php反序列化漏洞的攻擊面。該方法在文件系統函數(file_exists()、is_dir()等)參數可控的情況下,配合phar://偽協議,可以不依賴unserialize()直接進行反序列化操作。這讓一些看起來“人畜無害”的函數變得“暗藏殺機”,下面我們就來了解一下這種攻擊手法。
0x02 原理分析
2.1 phar文件結構
在了解攻擊手法之前我們要先看一下phar的文件結構,通過查閱手冊可知一個phar文件有四部分構成:
1. a stub
可以理解為一個標誌,格式為xxx<?php xxx; __HALT_COMPILER();?>
,前面內容不限,但必須以__HALT_COMPILER();?>
來結尾,否則phar擴展將無法識別這個文件為phar文件。
2. a manifest describing the contents
phar文件本質上是一種壓縮文件,其中每個被壓縮文件的權限、屬性等信息都放在這部分。這部分還會以序列化的形式存儲用戶自定義的meta-data,這是上述攻擊手法最核心的地方。
转载请注明:IAMCOOL » 利用 phar 拓展 php 反序列化漏洞攻擊面