| 導購 | 订阅 | 在线投稿
分享
 
 
 

linux编程:PHP执行root命令

2008-05-19 06:26:02  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
  在玩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命令了.
 
 
 
  在玩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;   ?>   在浏览器中浏览.   [color=Red]ChainINPUT(policyACCEPT)   targetprotoptsourcedestination   ChainFORWARD(policyDROP)   targetprotoptsourcedestination   ACCEPTall--anywhereanywherestateRELATED,ESTABLISHED   ChainOUTPUT(policyACCEPT)   targetprotoptsourcedestination[/color]   [color=Blue]myuid:48   myeuid:0   aftersetreuiduid:0   afersertreuideuid:48[/color]   --------------------------------------------------------------------------------   Lastlineoftheoutput:afersertreuideuid:48   --------------------------------------------------------------------------------   Returnvalue:0   该命令执行成功..   众所周知:apache的uid为48.调用setreuid后将有效用户id和实际用户id互换了.(必须在chmodu+s生效的情况下)使apache当前的uid为0这样就能执行root命令了。   大家只需要更改C文件中的system所要执行的命令就可以实现自己的PHP执行root命令了.
󰈣󰈤
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
王朝网络微信公众号
微信扫码关注本站公众号 wangchaonetcn
 
  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味著赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有