码迷,mamicode.com
首页 > Windows程序 > 详细

win2003 PHP服务器的突破新思路

时间:2019-04-03 10:45:13      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:osi   安装   iis7   inf   命令执行   inline   参数传递   对话   安全模式   

从WIN2000到WIN XP, 再到WIN2003, MS IIS服务器安全性的提高是显而易见的。 在WIN2000中, 一个普通的PHP SHELL便能把它打垮; 在WIN XP, 即使Safe mode = off,你也无法用system() 等函数执行系统命令, 但是我们还能用com()函数进行突破;到WIN 2003,即使IIS 和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 "output&lt;/pre>&quot;;?>  safemodeon使  2dl()  PHP使dl()safemode=offdl()W32apiPECLPHP5.1.0  //  dl(&quot;phpw32api.dll&quot;);  //GetTickCountkernel32.dll  w32apiregisterfunction(&quot;kernel32.dll&quot;  &quot;GetTickCount&quot;  &quot;long&quot;);  //MessageBoxAUser32.dll  w32apiregisterfunction(&quot;User32.dll&quot;  &quot;MessageBoxA&quot;  &quot;long&quot;);  //  output&lt;/pre&gt;&quot;;?&gt;   据说这个只有设成safe_mode为on才能避免,但上次我在一台国外的服务器上使用的时候还是失败了,人并不是什么时候都能那么走运的:)   2、dl()函数的应用   当任何PHP的内部命令执行数和&#x27;&#x27;都无法使用的时候,可以尝试dl(),该方法只能用于safe mode=off, 因为它在安全模式下是被禁用的。利用dl()你可以直接调用W32api 函数,可惜这个扩展已被移动到 PECL 库中,且自PHP 5.1.0以下版本起不再被绑定。以下是手册里的例子:   // 加载此扩展   dl(&quot;php_w32api.dll&quot;);   // 注册 GetTickCount 函数,来自 kernel32.dll   w32api_register_function(&quot;kernel32.dll&quot;,   &quot;GetTickCount&quot;,   &quot;long&quot;);   // 注册 MessageBoxA 函数,来自 User32.dll   w32api_register_function(&quot;User32.dll&quot;,   &quot;MessageBoxA&quot;,   &quot;long&quot;);   // 取得开机时间信息   output</pre>";?>  safem?odeon使  2dl()  PHP使dl()safemode=offdl()W32apiPECLPHP5.1.0  //  dl("phpw?32api.dll");  //GetTickCountkernel32.dll  w32apir?egisterf?unction("kernel32.dll"  "GetTickCount"  "long");  //MessageBoxAUser32.dll  w32apir?egisterf?unction("User32.dll"  "MessageBoxA"  "long");  //  ticks = GetTickCount();

  // 转换为易于理解的文本
  

secs=floor(secs = floor(secs=floor(ticks / 1000);   
mins=floor(mins = floor(mins=floor(secs / 60);   
hours=floor(hours = floor(hours=floor(mins / 60);   
KaTeX parse error: Can‘t use function ‘\r‘ in math mode at position 61: …ter for:".   "\?r?\n %d Milliseco…ticks,   
secs  secs,   secs  mins,   
hours  hours,   hours  mins - (hours60));  //OK  MessageBoxA(NULL  hours*60));   // 显示一个消息对话框,只有一个 OK 按钮和上面的开机时间文本   MessageBoxA(NULL,   hours60));  //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(cmd=” E:/cert/admin/psexec.exe”;   if(cmd=E:/cert/admin/psexec.exe;  if(com=new COM(“WScript.Shell”)) echo “yes”;   if(!
cmd1=cmd1=cmd1=com->exec(cmd))    echo&quot;cannotexec()&quot;;    if(!cmd))   {   echo &quot;can not exec()&quot;;   }   if(!cmd))    echo"cannotexec()";    if(!cmd2=$cmd1->stdout())   {   echo “can not stdout()”;
文章来源:http://www.iis7.com/c/90/

win2003 PHP服务器的突破新思路

标签:osi   安装   iis7   inf   命令执行   inline   参数传递   对话   安全模式   

原文地址:https://www.cnblogs.com/ngnntds03/p/10647251.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!