您现在的位置: 无忧电子商务网 >> 信息学院 >> 程序开发 >> php >> 正文

如何对PHP程序中的常见漏洞进行攻击(上)

作者:佚名    信息学院来源:整理    点击数:    更新时间:2008-2-2 我要参与讨论

  nbsp;1024) 
  $hello_name = The original name of the file on the

 remote system (e.g "c:\\temp\\hello.txt") 
  $hello_type = Mime type of uploaded file (e.g "text/plain")

  然后PHP程序开始处理根据“$hello”指定的文件,问题在于“$hello”不一定是一个PHP设置的变量,任何远程用户都可以指定它。如果我们使用下面的方式:

  http://vulnhost/vuln.php?hello=/etc/passwd&hello_size=10240&hello_type=text/plain&hello_name=hello.txt

  就导致了下面的PHP全局变量(当然POST方式也可以(甚至是Cookie)):

  $hello = "/etc/passwd" 
  $hello_size = 10240 
  $hello_type = "text/plain" 
  $hello_name = "hello.txt"

  上面的表单数据正好满足了PHP程序所期望的变量,但是这时PHP程序不再处理上载的文件,而是处理“/etc/passwd”(通常会导致内容暴露)。这种攻击可以用于暴露任何敏感文件的内容。

  我在前面已经说了,新版本的PHP使用HTTP_POST_FILES[]来决定上载文件,同时也提供了很多函数来解决这个问题,例如有一个函数用来判断某个文件是不是实际上载的文件。这些函数很好的解决了这个问题,但是实际上肯定有很多PHP程序仍然使用旧的方法,很容易受到这种攻击。

  作为文件上载的攻击方法的一个变种,我们看一下下面的一段代码:

  <?php 
    if (file_exists($theme)) // Checks the file exists on the local system (no remote files) 
  include("$theme"); 
  ?>

  如果攻击者可以控制“$theme”的话,很显然它可以利用“$theme”来读取远程系统上的任何文件。攻击者的最终目标是在远程服务器上执行任意指令,但是他无法使用远程文件,因此,他必须得在远程服务器上创建一个PHP文件。这乍看起来好象是不可能的,但是文件上载帮了我们这个忙,如果攻击者先在本地机器上创建一个包含PHP代码的文件,然后创建一个包含名为“theme”的文件域的表单,最后用这个表单通过文件上载把创建的包含PHP代码的文件提交给上面的代码,PHP就会把攻击者提交的文件保存起来,并把“$theme”的值设置为攻击者提交的文件,这样file_exists()函数会检查通过,攻击者的代码也将执行。

  获得执行任意指令的能力之后,攻击者显然想提升权限或者是扩

上一页  [1] [2] [3] [4] [5] 下一页

在google里搜索更多如何对PHP程序中的常见漏洞进行攻击(上)

Google
Web www.51ec.org
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
我来说两句 对此文章发表了评论
  昵 称: *必填    ·注册用户·
  评 分: 1分 2分 3分 4分 5分     严禁发表危害国家安全、政治、黄色淫秽等内容的评论,用户需对自己在使用本网站服务过程中的行为承担法律责任。本站管理员有权保留或删除评论内容,评论内容只代表机友个人观点,与本网站立场无关。  
评 论
内 容

 
评论列表 (最新 评论仅限网友观点!)

供求信息




| 设为首页 | 加入收藏 | 关于我们 | 广告服务 | 联系方式 | 友情链接 | 版权申明