You are here: 首頁 文章分類選單 PHP分享特區

飛朵啦學習手札

本網站建議使用Firefox2.0以上,或是使用Goole瀏覽器來瀏覽,並使用1024x768解析度來觀看.

PHP分享特區

PHP執行外部程式因selinux 限制apache exec 而無法執行

E-mail 列印 PDF

以下說明轉自http://emn178.pixnet.net/blog/post/72463845-php%E5%9F%B7%E8%A1%8C%E5%A4%96%E9%83%A8%E7%A8%8B%E5%BC%8F

 


 

How to execute an external program in PHP

說明PHP如何執行外部程式,以及可能造成無法成功執行的原因,包含SELinux、php.ini設定、Sudoer、環境變數路徑和參數問題。

在php中可以使用shell_exec(), exec(), system()等函式執行外部程式,但是要注意有些設定可能會限制而無法執行,這裡以Linux系統為主要討論,要注意的地方如下:

1. SELinux

這是加強系統安全的模組,但沒有特別去設定的話時常會無法讓程式正常運作,而且在php端沒有任何訊息,例如執行shell_exec("ls"),沒有任何訊息。不過如果被SELinux封鎖的話,在/var/log/messages裡面會有類似以下的訊息:

 

你可以輸入以下指令來查詢目前針對httpd的設定

1
# /usr/sbin/getsebool -a | grep httpd

例如會輸出

allow_httpd_anon_write -- off
allow_httpd_mod_auth_pam -- off
allow_httpd_sys_script_anon_write -- off
httpd_builtin_scripting -- on
httpd_can_network_connect -- off
httpd_can_network_connect_db -- off
httpd_can_network_relay -- off
httpd_disable_trans -- off
httpd_enable_cgi -- on
httpd_enable_ftp_server -- off
httpd_enable_homedirs -- on
httpd_rotatelogs_disable_trans -- off
httpd_ssi_exec --off
httpd_suexec_disable_trans -- off
httpd_tty_comm -- off
httpd_unified -- on

你可以依據需求更改,根據網路上找到的資料,設定httpd_ssi_exec為on可以解決掉這問題,輸入

1
# setsebool -P httpd_ssi_exec 1

停用SELinux

除此之外,你也可以直接關閉SELinux,修改SELinux設定檔,不同系統可能會不同位置,以我用到的CentOS為例是在/etc/selinux/config,有的系統在/etc/sysconfig/selinux

1
# vi /etc/selinux/config

SELINUX的值改成disabled

1
SELINUX=disabled

然後還要的要重開機

暫時停用

或者也可以暫時的停用啟用SELinux,不同系統有不同方式,Fedora和Red Hat使用setenforce開關

停用

1
# setenforce 0

啟用

1
# setenforce 1

有些則用以下方是

停用

1
echo 0 >/selinux/enforce

啟用

1
echo 1 >/selinux/enforce

2. php.ini

safe_mode

另外php.ini的safe_mode如果被啟用的話,shell_exec()就無法使用,而exec()則只能執行在safe_mode_exec_dir下的檔案

disable_functions

有些版本的php.ini會預設將shell_exec()等函式放到這下面,顧名思義在這之下的函式就無法使用,確認shell_exec()等沒有被設定在這項目之下

3. Sudoer

網頁的執行身分通常是apache,你可以在php中使用以下方式查看

1
2
3
<?php
echo shell_exec("whoami");
?>

所以php當然只能執行apache有權限執行的指令,如同Linux一般系統帳號的權限設定一樣,要使用sudoer設定apache允許執行的指令,你可以使用以下指令來編輯

1
# visudo

1
# vi /etc/sudoers

apache沒有密碼同時避免輸入密碼的過程,使用NOPASSWD的屬性,例如我們給root權限來測試如下

1
apache  ALL=(ALL)       NOPASSWD: /sbin/ifconfig

由於apache沒有tty,註解requiretty設定

1
#requiretty

最後再php中可使用sudo取得權限,例如

1
2
3
<?php
echo shell_exec("sudo /sbin/ifconfig");
?>

4. 環境變數

由於php執行外部程式的環境變數不太一樣,所以有時候必須要使用絕對路徑才能正確執行程式。

5. escapeshellarg

如果呼叫的程式會帶入動態的參數,應該要使用escapeshellarg()函式來檢驗,尤其是參數會由使用者輸入的內容來決定的時候,例如

1
2
3
<?php
echo shell_exec('ls ' . escapeshellarg($dir));
?>

6. 其他

有些程式雖然在ssh執行的時候是正常有輸出訊息,但是在php執行外部程式就是沒有,例如直接輸入/usr/bin/java會有使用說明,但php端看不到,不過直接執行jar程式還是可以正常運作,應該是shell_exec()只回傳stdout的資料,stderr看不到,要讓shell_exec()都看的到可以在指令後面加上'2>&1 1> /dev/null',例如

1
2
3
<?php
echo shell_exec('ls file_not_exist 2>&1 1> /dev/null');
?>
文章標籤
最近更新 ( 週一, 16 四月 2018 14:42 )
 
 

LINUX 安裝完補phpmyadmin的元件

E-mail 列印 PDF

可以執行「sudo apt-get install phpmyadmin」一些相依的php模組會安裝.

BY:UBUNTU

 

參考:http://www.ubuntu-tw.org/modules/newbb/viewtopic.php?viewmode=compact&topic_id=105012&forum=9

 
 

PHP OWASP 漏洞補救

E-mail 列印 PDF

1. Cookie set without HttpOnly flag

原因:意思是:httponly設置為true則只能通過http操縱cookie,這樣防止了javascript等腳本語言對cookie做修改,幫助我們有效的防止XSS攻擊.

解決方法:

PHP中的設置

PHP5.2以上版本已支持HttpOnly參數的設置,同樣也支持全局的HttpOnly的設置,在php.ini中

-------------------------------------------------- ---

session.cookie_httponly =

-------------------------------------------------- ---

設置其值為1或者TRUE,來開啟全局的Cookie的HttpOnly屬性,當然也支持在代碼中來開啟:

-------------------------------------------------- ---

<?php ini_set("session.cookie_httponly", 1);

// or session_set_cookie_params(0, NULL, NULL, NULL, TRUE);

?>

最近更新 ( 週一, 13 十月 2014 15:28 )
 

有關於PHP 取得IP所產生的SQL injection

E-mail 列印 PDF

轉自:http://devco.re/blog/2014/06/19/client-ip-detection/

 

很多網站都會有偵測使用者 IP 的功能,不管是判斷使用者來自哪邊,或者是記錄使用者的位置。但是你知道嗎?網路上大多數的教學全部都是「錯誤」的。正確的程式寫法可以確保知道訪客的 IP,但是錯誤的寫法卻可能讓網站管理者永遠不知道犯罪者的來源。

這次我們單就偵測 IP 的議題來探討各種錯誤的寫法。

你知道網路上的教學是不安全的嗎?

 

PHP 彩蛋??? PHP INFO訊息顯示

E-mail 列印 PDF

今天資安掃描沒過 就因為這個彩蛋的問題:

以下轉貼自:http://blog.longwin.com.tw/2011/02/disable-php-easter-egg2011/

 

預設

PHP 若於網址列加入下述參數, 會出現不同的圖片(Easter Egg).

 

?=PHPE9568F36-D428-11d2-A769-00AA001ACF42

?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000

ex: http://localhost/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000

參考自: PHP Easter Egg - PHP 4.x URL Easter Eggs

所有彩蛋圖片: PHP 4.x Easter Egg - Author's Picture

 

關閉 Easter Egg

vim /etc/php5/apache2/php.ini # 將下述 expose_php 由 On 改成 Off 即可, 參考: PHP: Description of core php.ini directives

; expose_php = On

expose_php = Off

 

restart apache 即可.

 
第 1 頁, 共 6 頁