PHP代码审计

编写进度

Table of Contents

  1. PHP Audit
    1. 代码审计常见思路
    2. Untrusted Data ,使用不可信的数据
    3. Command Execution, 命令执行
    4. Code Execution, 代码执行
    5. Information Discloure, 信息泄露
    6. Insecure Cryptographic Functions, 不安全的加密函数
  2. 常见危险函数
    1. 代码执行函数
    2. 包含函数
    3. 命令执行函数
    4. 文件操作函数
    5. 特殊函数
    6. 变量覆盖

PHP Audit

RIPS VCG

代码审计本质: unfilter_function(param_input)
找漏洞 -> 找可以控制的变量(参数)=paraminput= -> 危险函数(paraminput)

漏洞形成条件:

  • 可以控制的变量(外部输入) –> 内因
  • 危险(未过滤参数)函数接收外部输入 –> 决定漏洞的类型

隐式输入: 用户传递数据-> 数据库/缓存文件等地方 -> 程序代码处理->程序代码
显式输入: 用户传递数据-> 程序代码处理

代码审计常见思路

  • 正向追踪: 变量 –> 函数
  • 逆向追踪: 函数 –> 变量
  • 常见功能点定向审计
  • 第三方组件,中间件版本比对
  • 补丁比对,反推漏洞位置
  • 工具扫描+人工验证

Untrusted Data ,使用不可信的数据

$_REQUEST 参数中的数据是浏览器可控的,黑客可以通过巧妙的构造覆盖PHP全局参数

Command Execution, 命令执行

PHP中存在敏感函数可以执行系统命令,常见这类函数如下:

exec
shell_exec

system
passthru

popen
proc_open
pcntl_exec

Code Execution, 代码执行

PHP中存在敏感函数可以执行PHP代码段,常见函数如下:

eval
assert
preg_replace
create_function

Information Discloure, 信息泄露

常见信息泄露的函数有 phpinfo~、~show_source

Insecure Cryptographic Functions, 不安全的加密函数

  • md5
  • CRYPTSTDDES
  • CRYPTEXTDES
  • CRYTPTMD5等

常见危险函数

代码执行函数

  • eval()

  • assert()

  • preg_replace

  • create_funtion

  • call_user_func

  • call_user_func_array

      @eval('echo "test-echo";');
      echo '<hr>';
      assert('system("whoami")');
      // preg_replace("/test/e","phpinfo();","just test");
    
      echo '<hr>';
      $cfunc=create_function('$v','return system($v);');
      $cfunc('whoami');
    
      echo '<hr>';
      $sfunc='sys'.'tem';
      $sfunc('whoami');
    
      echo '<hr>';
      function callback($var){
               echo "call test $var";
      }
      call_user_func('callback','crkmyth1cal');

包含函数

  • require

  • include

  • require_once

  • include_once

    include $file;

    include($_GET[‘file’]);
    // ?file=php://filter/convert.base64-encode/resource=index.php

命令执行函数

  • exec

  • system

  • popen

  • proc_open

  • passthru

  • shell_exec

    echo shell_exec(‘ping www.baidu.com');
    echo shell_exec(‘whoami’);

文件操作函数

读取:读取配置文件,获取key
写入:写入shell代码
删除:删除 .lock 文件,重新安装

  • copy

  • file_get_contents

  • file_put_contents

  • file

  • glob

  • fopen

  • move_uploaded_file

  • readfile

  • rename

  • delete

  • rmdir

  • unlink

  • symlink

  • readlink

      file_put_contents("baidu.txt",file_get_contents("https://www.baidu.com"));
      unlink('baidu.txt');

特殊函数

  • phpinfo
  • getenv
  • putenv
  • dl
  • ini_get
  • ini_set
  • ini_alter
  • ini_restore
  • is_numeric
  • in_array

变量覆盖

  • parse_str
  • mb_parse_str
  • extract
  • import_request_variables
  • get_defined_vars
  • get_defined_constants
  • get_defined_functions
  • get_included_files

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 askding@qq.com

💰

×

Help us with donation