由浅入深剖析序列化攻击(二)-黑客接单平台

之前写了一篇文章介绍序列化概念和两种常见进犯:1.魔法办法,2.session序列化引擎。 本篇文章持续深化,介绍别的办法:原生类序列化问题。 原生类同名函数 问题引进 什么是原生类同名函数进犯...

之前写了一篇文章介绍序列化概念和两种常见进犯:1.魔法办法,2.session序列化引擎。 本篇文章持续深化,介绍别的办法:原生类序列化问题。 原生类同名函数 问题引进 什么是原生类同名函数进犯缝隙呢?咱们无妨看如下代码: class UploadFile { function upload($fakename, $content) { ..... // 你什么也不能做 } function open($fakename, $realname) { ..... // 你什么也不能做 } } 假设有这样一个上传类,可是由于有.htaccess文件的操控,上传文件夹被约束的很死,咱们很难上传咱们的一句话文件。仅有的突破口是运用类中的函数或许缝隙,删去.htaccess文件,不然即使上传了一句话文件,也不能被解析。 问题探求 可是纵观类中函数,没有一个具有删去或许掩盖功用,此刻应该怎么操作呢?此刻便应该考虑一下是否有原生类具有同名函数。比方此处的open函数,咱们能够经过php代码进行搜索: $methodn"; } } ?> 不难得到如下成果: SQLite3->open SessionHandler->open XMLReader->open ZipArchive->open 发现有4个php原生类带有open办法,咱们查阅每个办法的完成。 办法完成探求 关于SQLite3->open,咱们查阅官方手册:

其有3个参数,看到形式SQLITE3_OPEN_READWRITE,应该不难想到是否能够篡改.htaccess,咱们测验一下,得到报错:

显着这儿的open办法并不能直接调用,咱们持续往下看。 关于SessionHandler->open,咱们查阅官方手册:

其有两个参数,一个是保存session的方位,一个是session的姓名,很显着在这儿不太适用,咱们持续往下看。 关于XMLReader->open,咱们查阅官方手册:

该办法也有3个参数,但显着也与删去文件没有太大相关,对咱们的缝隙运用协助不大,所以也能够直接越过。 最终关于ZipArchive->open,咱们查阅官方手册:

发现其参数为2个,前者是文件名,后者是挑选形式,这儿有一个overwrite十分有目共睹,这正是咱们需求的形式。咱们跟进检查该形式描述:

本地测验一下:

发现运用该形式,能够成功删去指定文件。 那么假如方针操作序列化中,存在open调用,一起序列化可控,就有或许进行掩盖,到达删去指定文件的意图。例如题目中的: function open($fakename, $realname) { ..... // 你什么也不能做 } 咱们能够让fakename为.htaccess,realname为ZipArchive::OVERWRITE,并操控序列化为ZipArchive目标,即可达到删去意图。 上述进程并非凭空想象出来的环境,在一次竞赛中便用到了这样的办法,在竞赛Insomnihack Teaser 2019中,File Vault一题的调查点便在于此。有爱好的能够看这篇文章: https://corb3nik.github.io/blog/insomnihack-teaser-2019/file-vault 原生类魔法办法 咱们知道这种状况比较少量,由于需求程序去调用函数,而且其间同名的概率也是比较低的。所以不难联系到之前的魔法办法,这类办法能够在满意条件的状况下主动触发。假如咱们能发掘原生类中魔法办法的运用点,那么进犯规模必定是显着大于上述这种需求调用的同名办法的。 原生类探求 那么无妨列举出一切带有魔法办法的原生类: 运转后不难发现,这儿就有前一篇文章咱们说的原生类SoapClient魔法办法__call导致SSRF的问题:

当然这么多原生类中,必定不止这一个魔法办法能够运用。 SQLite3 例如原生类SQLite3,咱们在遍历的时分,发现其存在魔法办法:SQLite3::__construct。 咱们查阅一下官方手册:

此处能够发现,刚办法能够创立一个指定称号指定途径的空白文件: [1][2]黑客接单网

  • 发表于 2021-04-16 13:30
  • 阅读 ( 190 )
  • 分类:互联网

0 条评论

请先 登录 后评论
1846
1846

679 篇文章

你可能感兴趣的文章

相关问题