PHP安全威胁概览---你对PHP了解多少???

   日期:2020-05-05     浏览:160    评论:0    
核心提示:PHP安全文章目录PHP安全文件包含本地文件包含远程文件包含变量覆盖漏洞代码执行漏洞其他代码执行方式php

PHP安全

文章目录

  • PHP安全
    • 文件包含
      • 本地文件包含
      • 远程文件包含
    • 变量覆盖漏洞
    • 代码执行漏洞
    • 其他代码执行方式
    • 定制安全的PHP环境
      • 配置参数
      • 隐藏配置细节
      • 隐藏敏感数据
      • 数据加密

文件包含

4个主要函数

  • include()
  • require()
  • include_once()
  • require_once()
    当使用这四个函数包含一个新文件时,该文件将作为PHP代码执行,PHP内核并不会在意该包含的文件时什么类型。

要想成功利用文件包含漏洞,需要满足两个条件

  1. include等函数通过动态变量的方式引入需要包含的文件。如果时静态包含是没有办法的。
  2. 用户能够控制该动态变量。

本地文件包含

  1. %00截断
  2. 目录最大长度限制
  3. 编码达到目录遍历

本地文件包含利用技巧

  1. 包含用户上传的文件
  2. 包含data://或php://inputd等伪协议
  3. 包含session文件
  4. 包含日志文件
  5. 包含/proc/self/environ文件
  6. 包含上传的临时文件
  7. 包含其他应用创建的文件

远程文件包含

实现远程文件包含需要设置allow_url_include=ON,则文件包含的函数将支持加载远程文件。

远程文件包含可以读取攻击者的服务器从而实现命令执行。

变量覆盖漏洞

  • 全局变量覆盖
    register_gobal = ON,现在默认变为OFF

  • extract()变量覆盖

  • 遍历初始化变量

  • import_request_variables变量覆盖

  • parse_str()变量覆盖

安全建议:

  1. register_globals = OFF
  2. 熟悉可能造成变量覆盖的函数和方法,检查用户是否能控制变量的来源
  3. 养成初始化变量的好习惯

代码执行漏洞

  • 危险函数
    popen()、system()、paththru()、exec()等都可以直接执行系统命令。

  • phpmyadmin远程代码执行漏洞

  • MyBB1.4 远程代码执行漏洞

挖掘漏洞的过程。通常需要先找到危险函数,然后回溯函数的调用过程,最终看在整个调用的过程中用户是否有可能控制输入。

  • 文件写入执行代码

其他代码执行方式

  • 直接执行代码的函数
    eval()
    assert()
    system()
    exec()
    shell_exec()
    passthru()
    escapeshellcmd()
    pcntl_exec()
    等函数,一般来说,最好在PHP中禁用这些函数,在进行代码审计时则可以检查代码中是否存在这些函数。

  • 文件包含
    相关函数上述内容有介绍

  • 本地文件写入
    能够往本地文件里写入内容的函数都需要重点关注,比如:
    file_put_contents()
    fwrite()
    fputs()

  • preg_replace()代码执行

  • 动态函数执行
    用户自定义的动态函数可以导致代码执行,需要注意这种情况

  • Curly Syntax
    PHP的Curly Syntax也能导致代码执行,它将执行花括号间的代码,并将结果替换回去。

<?php $var = "i was innocent until {`ls`} appeared here" ?>
  • 回调函数执行代码

  • unserialize()导致代码执行

  1. 一是unserialize()函数的参数用户可控
  2. 二是存在__destruct()函数或者__wakeup()函数

定制安全的PHP环境

根据以上所述,应该配置好php.ini来加固PHP 的运行环境

配置参数

register-globals = OFF----避免变量覆盖漏洞
open_basedir----该指令可以建一个基目录,对抗文件包含、目录遍历
allow_url_include----避免远程文件包含,同时推荐关闭的还有allow_url_fopen
display_errors----防止信息泄露,错误回显可能会使攻击者分析出应用程序逻辑进而扩大攻击范围
log_errors = On----把错误消息记录在日志里
magic_quotes_gpc----推荐关闭,增加转义字符可以被攻击者绕过,还有可能衍生出新的一系列问题
cgi.fix_pathinfo----PHP分为模块安装和CGI安装,如果使后者,则要关闭此选项,避免文件上传问题
session.cookie_httponly----开启,防止XSS
session.cookie_secure----若是全站HTTPS请开启此项
safe_mode----需要仔细斟酌
disable_functions----能够在PHP中禁用函数,视情况而定。disable_classes
max_execution_time = 30(默认值)----防止用户脚本占用过多CPU。
user_dir=string----该指令指定用户主目录的一个目录名,PHP脚本必须放在这里才能执行。

隐藏配置细节

  • 隐藏apache
    ServerSignature指令设置为Off.
    ServerTokens指令在确定开启上个指令时,以何种程度显示服务器细节,从full———Prod共有六个选项

  • 隐藏PHP
    expose_php = 0----设置为1时将细节追加服务器签名后面
    phpinfo()----应删除phpinfo()调用的所有实例

  • 修改文件扩展名
    php\php3\phtml

隐藏敏感数据

  • 隐藏文档根目录
    在apache的配置文件中即httpd.conf会发现有一个配置指令DocumentRoot.它被设置为服务器所认为的公共HTML目录的路径。

  • 拒绝访问某些文件扩展名

<Files * .inc>
Oeder allow,deny
Deny from all
</ Files>

数据加密

  • PHP加密函数
    md5()
    MCrypt包----数据加密包

简单的概括,没有太细节,还有一些涉及到有关php的安全可以参考一下我做的漏洞复现,参考了白帽子讲安全以及php编程。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服