[转]Typecho install.php 后门代码分析

有一天凌晨听其他师傅说typecho留了后门,因为吃鸡太晚了就没看。
后面想分析的时候,后发现原文章没了,搜索引擎的缓存都是乱的。。。。
找了好久也没有找到,于是问了下其他看过的师傅漏洞位置,根据杂乱的缓存,就自己操刀子了

问题源头在install.php
install.php在安装后是不会删除的,这里就是恶意代码的输入点

恶意代码的大致操作顺序:

  1. base64解码后反序列化cookie中传入的__typecho_config参数,
  2. 然后让__typecho_config作为构造参数例化一个Typecho_Db类,
  3. 接着通过POP链进行代码执行。

涉及到的文件还有类名

install.php(unserialize) – >  Db.php(class Typecho_Db)  – >  Feed.php (class Typecho_Feed) – >  Request.php (class Typecho_Request)

install.php

进入这段代码的条件:

  1. 设置了正确的referer(网站url即可)
  2. 加上一个任意的finish参数
  3. 设置cookie中__typecho_config字段的值

cookie中的__typecho_config得到序列化后的$config数组字符串,
反序列化后,再使用$config[‘adapter’]作为构造参数传入Typecho_Db的实例化过程。

Db.php

$config[‘adapter’]在构造函数里面对应形参$adapterName,
$adapterName是Typecho_Feed类的实例,使用.字符连接就调用__toString魔术方法

 

Feed.php

$this->_type用来控制if语句的流程,
给$this->_type 赋值 ATOM 1.0时,
即可进入包含$item[‘author’]->screenName的分支,
$item[‘author’]这个变量是一个Typecho_Request的实例,
我们可以设置这个Typecho_Request实例的属性screenName是一个私有属性,
当访问$item[‘author’]->screenName就会调用__get方法

Request.php

Typecho_Request实例调用__get魔术方法,进入get方法,最后进入_applyFilter方法

$key的值是screenNamem,
因此$this->_params需要是个键为screenNamem的数组,键值为想执行的代码,
最终$value传进call_user_func

进入_applyFilter后,可以看见 call_user_func,
这时需要设置$this->_filter为arrsert,作为call_user_func的第一个参数,
$value我们也可控,已经可以执行任意代码

EXP

主要用于生成__typecho_config 的Payload

编写payload的简单思路:

最外层$exp是数组,数组中的’adapter’是Typecho_Feed的实例$payload1,
$payload1的构造参数是’ATOM 1.0’用于控制分支,
$payload2是Typecho_Request的实例,
private $_filter ,private $_params是传给call_user_func的参数,也就是通过assert写shell
然后$payload2通过additem添加到$payload的$_items的变量中
最后把$payload1添加到最外层的$exp数组中
ps:因为install.php中有ob_start();所以构造好是没有回显的,但是也能写shell
后面其他师傅说可以用Typecho_Response类中的redirect方法中的exit()得到回显

GetShell小工具

记得把php添加进环境变量

图片[1]-[转]Typecho install.php 后门代码分析-安全小百科PS:感谢和我一起讨论的师傅,代码仅用于学习研究,请勿用于非法用途恶意攻击,否则后果作者概不负责。

相关推荐: 【转】redis 在渗透中 getshell 方法总结

0x00 前言 今天同学突然提到了redis,想到最近搞站确实有一段时间没有遇到redis getshell的场景了(主要是最近懒,搞得少),有些利用方式都忘的差不多,这里再对常见的redis getshell方式总结并复现一遍,避免遗忘。如果有同学恰好看到了…

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论