江鸟's Blog

php中的危险函数

字数统计: 1.1k阅读时长: 3 min
2021/02/08 Share

简单做个记录,最近在准备面试,会很少学习ctf相关知识,以复现漏洞为主

php中的危险函数

命令执行

passthru()

  功能描述:允许执行一个外部程序并回显输出,类似于 exec()。

  危险等级:高

exec()

  功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)。

  危险等级:高

system()

  功能描述:允许执行一个外部程序并回显输出,类似于 passthru()。

  危险等级:高

shell_exec() ``

  功能描述:通过 Shell 执行命令,并将执行结果作为字符串返回。

  危险等级:高

proc_open()

  功能描述:执行一个命令并打开文件指针用于读取以及写入。

  危险等级:高

popen()

​ 通过 popen() 的参数传递一条命令,并对 popen() 所打开的文件进行执行

​ 危险等级:高

proc_get_status()

  功能描述:获取使用 proc_open() 所打开进程的信息。

  危险等级:高

代码执行

eval()

​ eval函数可以把字符串当作php代码来执行,最常见的操作就是一句话木马:

assert函数

​ assert函数的作用与eval的差不多,也可以把字符串当作 php 代码来执行。

preg_replace函数

​ 如果有/e模式修正符,也可以执行代码

creat_function匿名函数

1
2
3
4
5
string create_function ( string $args , string $code )

string $args 要向我们创建的函数中传入的变量

string $code 要创建函数的代码部分

将字符串拼接,然后赋值给函数,直接调用即可执行命令

1
2
3
4
<?php
$func = 'sys'.'tem';
$func('whoami');
?>

回调函数

call_user_func()、call_user_func_array()、array_map() 都可以调用其他函数。

1
2
3
4
5
<?php
call_user_func('system', "whoami");
echo "<br />";
call_user_func_array('system', array("whoami"));
?>

文件包含

include和require

require_once和include_once

文件操作函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
copy 拷贝文件

file_get_contents 将整个文件读入为字符串

file_put_contents 将整个字符串写入文件

file 将文件读入数组中

fopen 打开文件或者url

move_upload_file将上传文件移动到新的位置

readfile 输出文件

rename 重命名

rmdir 删除目录

unlink delete 删除文件

变量覆盖

parse_str

​ 如果 encoded_string 是 URL 传递入的查询字符串(query string),则将它解析为变量并设置到当前作用域(如果提供了 result 则会设置到该数组里 )。

extract

​ 本函数用来将变量从数组中导入到当前的符号表中。检查每个键名看是否可以作为一个合法的变量名,同时也检查和符号表中已有的变量名的冲突。

mb_parse_str

​ 解析 GET/POST/COOKIE 数据并设置全局变量。 由于 PHP 不提供原始 POST/COOKIE 数据,目前它仅能够用于 GET 数据。 它解析了 URL 编码过的数据,检测其编码,并转换编码为内部编码,然后设置其值为 array 的 result 或者全局变量。

import_request_variables

​ 将 GET/POST/Cookie 变量导入到全局作用域中。如果你禁止了 register_globals,但又想用到一些全局变量,那么此函数就很有用

其他

phpinfo

​ 输出关于 PHP 配置的信息

chroot()

  功能描述:可改变当前 PHP 进程的工作根目录,仅当系统支持 CLI 模式PHP 时才能工作,且该函数不适用于 Windows 系统。

  危险等级:高

chgrp()

  功能描述:改变文件或目录所属的用户组。

  危险等级:高

chown()

  功能描述:改变文件或目录的所有者。

  危险等级:高

get_defined_vars函数

​ 此函数返回一个包含所有已定义变量列表的多维数组,这些变量包括环境变量、服务器变量和用户定义的变量。

get_defined_constants函数

​ 返回当前所有已定义的常量名和值。 这包含 define() 函数所创建的,也包含了所有扩展所创建的。

get_defined_functions

​ 返回一个包含所有已定义函数列表的多维数组

get_included_files

​ 返回所有被 include、 include_once、 require 和 require_once 的文件名。

软连接读取文件内容

symlink:对于已有的 target 建立一个名为 link 的符号连接。

readlink:readlink() 和同名的 C 函数做同样的事,返回符号连接的内容。

参考:https://blog.csdn.net/superbirds/article/details/4439317

CATALOG
  1. 1. php中的危险函数
    1. 1.1. 命令执行
    2. 1.2. 代码执行
    3. 1.3. 文件包含
    4. 1.4. 文件操作函数
    5. 1.5. 变量覆盖
    6. 1.6. 其他