另类代码应用 PHP在安全方面的使用窍门

曾少77

曾少77

2016-01-29 13:23

另类代码应用 PHP在安全方面的使用窍门,另类代码应用 PHP在安全方面的使用窍门


  1.远程文件
  
  PHP是一门具有丰富特性的语言,它提供了大量函数,使程序员能够方便地实现各种功能,远程文件就是一个很好的例子:
  代码
  <?php
  $fp=@Fopen($url,"r") or die ("cannot open $url");
  while($line=@fgets($fp,1024)) {
  $contents.=$line;
  }
  echo $contents; //显示文件内容
  fclose($fp); //关闭文件
  ?
  
  以上是一段利用Fopen函数打开文件的代码,由于Fopen函数支持远程文件,使得它应用起来相当有趣,将以上代码保存为Proxy.php,然后后提交:
  
  代码
  /proxy.php?url=http://www.hacker.com.cn/bbs
  
  
  这时候你会发现论坛下方显示的IP地址变成了PHP脚本所处服务器的IP地址。Fopen函数可以从任何其Web或FTP站点读取文件,事实上PHP的大多数文件处理函数对远程文件都是透明的,比如请求:
  
  代码
  /proxy.php?url=http://target/script/..%c1%1c../winnt/system32/cmd.exe?/c+dir
  
  这样实际上是利用了Target主机上的Unicode漏洞,执行了DIR命令。但并不是所有的服务器都支持远程文件的功能,如果你使用的是商业的服务器,很可能会发现远程文件使用不了(如51的虚拟主机),这是因为在商业主机上限制远程文件的功能,往往能够更好的保护服务器的正常运行。你可以通过PHPinfo()查看服务器是否支持这种功能。当然,在PHPinfo()被禁用的情况下,也可以使用Get_cfg_var():
  
  代码
  <?php
  echo "是否允许使用远程文件(allow_url_Fopen)";
  ?php
  if (get_cfg_var("allow_url_Fopen")=="1")
  {
  echo("<font color=green<b是</b</font");
  }
  else echo("<font color=red<b否</b</font");
  ?
  
  当Allow_url_Fopen一项参数为ON时,即支持远程文件的功能。充分发挥远程文件的特性,我们可以实现许多特殊的功能:如果你是用过PHP Flame的最新版本,你会发现它在集文件夹复制、文本搜索等功能的基础上,又增加了Web间文件传输的功能,依靠这种功能,你可以随意将其他服务器上的文件传送到你的Web目录下。而且,在两台服务器间传送文件有着飞快的传输速度。我们看看实现这个功能的代码:
  
  代码
  <?php
  $fp = Fopen($_GET['filename'], 'rb'); //打开文件
  $data = $tmp = '';
  while ( true ) {
  $tmp = fgets($fp, 1024);
  if ( 0 === strlen($tmp) ) {
  break; //跳出while循环
  }
  $data .= $tmp;
  }
  fclose($fp); //关闭文件
  $file=preg_replace("/^.+//","",$filename);//转换文件名
  //write
  $fp = Fopen("$file", 'wb'); //生成文件
  fwrite($fp, $data); //写入数据
  fclose($fp);
  ?
  
  在调用Fopen和Fwrite函数时加入"b"标记,可以使这两个函数安全运用于二进制文件而不损坏数据。在以上脚本提交:
  /down.php?filename=http://www.chinaz.com/winrar.zip
  这时便会在Down.php的所处目录下生成相应的Winrar.zip文件。如果再配合遍历目录的功能,你将可以实现多个文件夹服务器间的传输。但是,远程文件应该还有更大的发挥空间,比如写SQL Injection攻击的自动脚本,甚至是HTTP的代理服务:
  
  代码
  <?
  $url = getenv("QUERY_STRING");
  if(!ereg("^http",$url)) //检查输入的URL格式
  {
  echo "例子:<brhttp://www.163.com/<br";
  echo "http://www.xxxx.com/list.php?id=600<br";
  echo "当URL为目录时需要在目录后加入"/"";
  exit;
  }
  if($url)
  $url=str_replace("\","/",$url);
  $f=@Fopen($url,"r"); //打开文件
  $a="";
  if($f)
  {
  while(!feof($f))
  $a.=@fread($f,8000); //读取文件
  fclose($f);
  }
  $rooturl = preg_replace("/(.+/)(.*)/i","\1",$url); //转换根目录
  $a = preg_replace("/(src[[:space:]]*=['"])([^h].*?)/is","\1$rooturl\2",$a);
  $a = preg_replace("/(src[[:space:]]*=)([^h'"].*?)/is","\1$rooturl\2",$a); //转换图片地址
  $a = preg_replace("/(action[[:space:]]*=['"])([^h].*?)/is","\1$php_self?$rooturl\2",$a);
  $a = preg_replace("/(action[[:space:]]*=)([^h'"].*?)/is","\1$php_self?$rooturl\2",$a); //转换POST地址
  $a = preg_replace("/(<a.+?href[[:space:]]*=['"])([^h].*?)/is","\1$php_self?$rooturl\2",$a);
  $a

展开更多 50%)
分享

猜你喜欢

另类代码应用 PHP在安全方面的使用窍门

PHP
另类代码应用 PHP在安全方面的使用窍门

AJAX技术可能会扩大安全方面的威胁

Web开发
AJAX技术可能会扩大安全方面的威胁

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

MySQL数据库在网络安全方面的功能

MySQL mysql数据库
MySQL数据库在网络安全方面的功能

主流网络安全技术全方面纵览

电脑网络
主流网络安全技术全方面纵览

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

MySQL在网络安全方面采取的主要措施

MySQL mysql数据库
MySQL在网络安全方面采取的主要措施

在php中输出html代码

PHP
在php中输出html代码

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

实用比较:JAVA事件模式下PHP如何实现

实用比较:JAVA事件模式下PHP如何实现

如何使用PHP来编写一个自动投票程序

如何使用PHP来编写一个自动投票程序
下拉加载更多内容 ↓