php反序列化原生类利用

梳理和总结了一下最近学的东西~

触发

phar无unserialize()反序列化

利用条件:

  • 一个上传点
  • 一个可控的文件操作函数:
    1
    fileatime、filectime、file_exists、file_get_contents、file_put_contents、file、filegroup、fopen、fileinode、filemtime、fileowner、fileperms、is_dir、is_executable、is_file、is_link、is_readable、is_writable、is_writeable、parse_ini_file、copy、unlink、stat、readfile、md5_file、filesize

Hpdoger师傅的四个实例递进php反序列化漏洞理解
Blackhat议题解读 | phar反序列化

session反序列化

利用条件:

  • session解析引擎可控(在同一网站能同时出现两种不同的session配置方式)
  • $_SESSION值可控

修改session存储方式可以通过session_start()函数,给其传入serialize_handler=php_serialize参数即可。
具体见:
LCTF 2018 Babyphp’s revenge

php原生类利用

Soapclient

利用条件:

  • 需要有soap扩展
  • 需要有一个能实例化对象的点
  • 需要调用一个不存在的方法触发其__call()函数

参考:LCTF 2018 Babyphp’s revenge

危害:盲打SSRF:可以结合Soapclient自身的CRLF漏洞,带上各种heade头参数。

参考: 反序列化之PHP原生类的利用

GlobIterator

利用条件:

  • 有实例化对象的点即可

危害:列目录

参考:PHP SECURITY CALENDAR 2017-Day 3 - Snow Flake

SimpleXMLElement

利用条件:

  • xmllib库为存在漏洞的版本
  • 有实例化对象的点即可

危害:

  • 任意文件读取
  • SSRF

盲打xxe姿势见参考链接

参考:PHP SECURITY CALENDAR 2017-Day 3 - Snow Flake

参考:XML外部实体注入小结