linux編程:PHP執行root命令

在玩C以前玩過一段時間的PHP,哪個時候需要用PHP來運行root命令,一直未果,直到有一天搜索到了super這個插件.

隨著玩C的日子多了.發現可以用C語言來包裹要運行的外部命令.實驗了一下.成功了.

不需要任何外部工具就可以實現用PHP執行root命令.

我下面就把方法發布給大家,有需求用php來運行root命令的朋友可以不用發愁了.

平台:Linux.實驗命令iptables當前的目錄是/var/www/html/http

寫程序的時候用root用戶

大家都知道iptables非root用戶不能運行.

首先寫個C程序

命名爲:ipt.c

#include<stdio.h>

#include<stdlib.h>

#include<sys/types.h>

#include<unistd.h>

intmain()

{

uid_tuid,euid;

charcmd[1024];

uid=getuid();

euid=geteuid();

printf("myuid:%u\n",getuid());//這裏顯示的是當前的uid可以注釋掉.

printf("myeuid:%u\n",geteuid());//這裏顯示的是當前的euid

if(setreuid(euid,uid))//交換這兩個id

perror("setreuid");

printf("aftersetreuiduid:%u\n",getuid());

printf("afersertreuideuid:%u\n",geteuid());

system("/sbin/iptables-L");//執行iptables-L命令

return0;

}

[/CODE]

編譯該文件gcc-oipt-Wallipt.c

在該路徑下生成ipt這個可執行文件.

如果現在用PHP網頁調用該ipt的話,即使setreuid了也是不行的.

接下來要做的是chmodu+s./ipt

ls一下

-rwsr-xr-x1rootroot5382Jul221:45ipt

s位已經設置上了.

再寫一個php頁面調用它.

<?php

echo'<pre>';

$last_line=system('/var/www/html/http/ipt',$retval);

echo'

</pre>

<hr/>Lastlineoftheoutput:'.$last_line.'

<hr/>Returnvalue:'.$retval;

?>

在浏覽器中浏覽.

ChainINPUT(policyACCEPT)

targetprotoptsourcedestination

ChainFORWARD(policyDROP)

targetprotoptsourcedestination

ACCEPTall--anywhereanywherestateRELATED,ESTABLISHED

ChainOUTPUT(policyACCEPT)

targetprotoptsourcedestination

myuid:48

myeuid:0

aftersetreuiduid:0

afersertreuideuid:48

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

Lastlineoftheoutput:afersertreuideuid:48

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

Returnvalue:0

該命令執行成功..

衆所周知:apache的uid爲48.調用setreuid後將有效用戶id和實際用戶id互換了.(必須在chmodu+s生效的情況下)使apache當前的uid爲0這樣就能執行root命令了。

大家只需要更改C文件中的system所要執行的命令就可以實現自己的PHP執行root命令了.

 
使用php作linux自動執行腳本
用PHP作一社區, 在寫到計算最高上線人數時, 成功調試出把PHP作爲 shell script直接在服務器上運行. 在作社區時, 時常需要統計上線人數等數據. 一般做法是, 把這段代碼放在用戶 login或者某一個頁面中, 以便在用戶登錄...查看完整版>>使用php作linux自動執行腳本
 
Shell編程(6)- 命令執行順序
1、使用&& :& &左邊的命令(命令1)返回真(即返回0,成功被執行)後,& &右邊的命令(命令2)才能夠被執行;2、使用|| :如果| |左邊的命令(命令1)未執行成功,那麽就執行| |右邊的命令(...查看完整版>>Shell編程(6)- 命令執行順序
 
Linux C編程---make命令的使用
在開發一個系統時,一般是將一個系統分成幾個模塊,這樣做提高了系統的可維護性,但由于各個模塊間不可避免存在關聯,所以當一個模塊改動後,其他模塊也許會有所更新,當然對小系統來說,手工編譯連接是沒問題,但是...查看完整版>>Linux C編程---make命令的使用
 
linux與unix shell編程指南_(6)命令執行順序
命令執行順序使用&&:命令1 && 命令2 如果這個命令執行成功& &那麽執行這個命令 例如:$ mv /apps/bin /apps/dev/bin && rm -r /apps/bin / a p p s / b i n目錄將會被移...查看完整版>>linux與unix shell編程指南_(6)命令執行順序
 
在PHP中執行系統外部命令
在PHP中執行系統外部命令 在PHP中執行系統外部命令 PHP作爲一種服務器端的腳本語言,象編寫簡單,或者是複雜的動態網頁這樣的任務,它完全能夠勝任。但事情不總是如此,有時爲了實現某個功能,必須借助于操作...查看完整版>>在PHP中執行系統外部命令