fumobackdoor
这道fumobackdoor和2022ciscn总决赛的backdoor其实差不多一道题(出题人都是一个人),今天就来分析一下这两道题的详细做题流程。
2022CISCN总决赛backdoor
这道题还是挺有意思的,出现了__sleep魔术方法,这个方法在数据被序列化的时候自动调用,而自动序列化数据的场合比较少,这里使用的是session_start,先反序列化session文件中的数据并放进$SESSION(如果有的话),再序列化存回去。
这道fumobackdoor和2022ciscn总决赛的backdoor其实差不多一道题(出题人都是一个人),今天就来分析一下这两道题的详细做题流程。
这道题还是挺有意思的,出现了__sleep魔术方法,这个方法在数据被序列化的时候自动调用,而自动序列化数据的场合比较少,这里使用的是session_start,先反序列化session文件中的数据并放进$SESSION(如果有的话),再序列化存回去。
概念
EJS是一个javascript模板库,用来从json数据中生成HTML字符串
感觉,有点像php里面jinja2那种模板,这也许就是为什么ejs也有SSTI注入,都可以动态渲染执行代码。
这个知识点应用的范围比较小,仅当题目中出现utils
的merge
或Pydash
模块中的set
和set_with
函数才会用上。今天来学习其实是因为DASCTF的第一题ezflask里面出现了。
首先经典回顾一下python的类与继承:
class
关键字,class
后面紧接着是类名,紧接着是(object)
,表示该类是从哪个类继承下来的,所有类的本源都是object类__init__
方法,在创建实例的时候,就把类内置的属性绑上__init__
方法的第一个参数永远是self
,表示创建的实例本身,因此,在__init__
方法内部,就可以把各种属性绑定到self
,因为self
就指向创建的实例本身。isinstance()
判断。简要概括:jndi注入通过访问RMI服务或LADP服务来利用动态类加载完成攻击。
jndi的全称为Java Naming and Directory Interface(java命名和目录接口)SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。
简单来说就是jndi提供了统一的接口来方便地访问各种命名服务和目录系统
RPC
RPC(Remote Procedure Call)远程过程调用,就是要像调用本地的函数一样去调远程函数。它并不是某一个具体的框架,而是实现了远程过程调用的都可以称之为RPC。比如RMI(Remote Method Invoke 远程方法调用)就是一个实现了RPC的JAVA框架。
一般RPC的过程:Client如果想要远程调用一个方法,就需要通过一个Stub类传递类名、方法名与参数信息给Server端,Server端获取到这些信息后会从本地服务器注册表中找到具体的类,再通过反射获取到一个具体的方法并执行然后返回结果。
shiro概念:
Apache Shiro 是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能,Shiro框架直观、易用、同时也能提供健壮的安全性。Apache Shiro反序列化漏洞分为两种:Shiro-550、Shiro-721,而本篇中主要讨论的是Shiro-550,Shiro-721主要采用现成工具来爆破密钥和写入木马。
漏洞成因:
Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。
在做ctf题的时候,千辛万苦获得了webshell,蚁剑也连接上了,但是查看不了其他目录,也看不了文件,很有可能是open basedir
和disablefunc
的设置导致。这时候我们查看phpinfo(养成rce前先查阅phpinfo的好习惯),发现果然如此,与系统命令相关的函数全被禁止(例如[极客大挑战 2019]RCE ME)。这时候我们也许可以直接用蚁剑的bypass插件逃课,但是这种方法成功率较低,本篇介绍正规方法:使用LD_PRELOAD
和putenv
来劫持进程,从而命令执行。