# PHP 常见危险函数
# eval () 函数
定义和用法:
eval () 函数把字符串按照 PHP 代码来计算.
该字符串必须是合法的 PHP 代码,且必须以分号结尾。
1 |
|
# assert () 函数
1 | assert()会检查指定的assertion并在结果为FALSE时采取适当的行动。 |
一般情况下,黑名单都会禁用 eval()
函数,所以用 assert
来代替 eval 来执行具体操作。
# assertion 函数
1 | 检查一个断言是否为 FALSE。 |
构造
1 | <?php $_GET[a]($_GET[b]);?> //一句话木马 |
# preg_replace () 函数
preg_replace 函数执行一个正则表达式的搜索和替换。
代码
1 |
|
1 | ?pat=/test/e&rep=phpinfo()&sub=jutst test |
1 | PHP 5.5.0 起, 传入 “\e” 修饰符的时候,会产生一个 E_DEPRECATED 错误; PHP 7.0.0 起,会产生 E_WARNING 错误,同时 “\e” 也无法起效。 |
# create_function () 函数
string create_function ( string $args , string $code )
函数作用:从创建一个匿名函数传递的参数,并返回一个唯一的名称
代码
1 |
|
构造匿名函数原型
1 | function test($a,$b) |
构造 payload:
1 | http://127.0.0.1/test3.php?sort_by=%27%22]);}phpinfo();/* |
# call_user_func 函数
mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $… ]] )
第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。
代码
1 |
|
# call_user_func_array 函数
call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数
1 | 把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。 |
# 命令执行函数
- exec () 执行一个外部程序
- passthru () 执行外部程序并且显示原始输出
- proc_open () 执行一个命令,并且打开用来输入 / 输出的文件指针
- shell_exec () 通过 shell 环境执行命令,将完整的输出以字符串方式返回
- system () 执行外部程序,并且显示输出
- popen () 通过 popen () 的参数传递一条命令,并对 popen () 所打开的文件进行执行
- escapeshellcmd () 对字符串中可能会欺骗 shell 命令执行任意命令的字符转义
# 包含函数
require、include、require_once、include_once
包含函数 一共有四个,主要作用为包含并运行指定文件。
- require 和 include 几乎完全一样,除了处理失败的方式不同之外。require 在出错时产生 (E_COMPILE_ERROR) 级别的错误。换句话说将导致脚本中止而 include 只产生警告(E_WARNING),脚本会继续运行。
- include 语句包含并运行指定文件
- require_once 语句和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。
- include_once 语句在脚本执行期间包含并运行指定文件。此行为和 include 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。
# 文件操作函数 (官方文档)
- copy 拷贝文件 http://php.net/manual/zh/function.copy.php
- file_get_contents 将整个文件读入一个字符串 http://php.net/manual/zh/function.file-get-contents.php
- file_put_contents 将一个字符串写入文件 http://php.net/manual/zh/function.file-put-contents.php
- file 把整个文件读入到一个数组中 http://php.net/manual/zh/function.file.php
- fopen 打开文件或者 URL http://php.net/manual/zh/function.fopen.php
- move_uploaded_file 将上传的文件移动到新位置 http://php.net/manual/zh/function.move-uploaded-file.php
- readfile 输出文件 http://php.net/manual/zh/function.readfile.php
- rename 重命名一个文件目录 http://php.net/manual/zh/function.rename.php
- rmdir 删除目录 http://php.net/manual/zh/function.rmdir.php
- unlink & delete 删除文件 http://php.net/manual/zh/function.unlink.php
# 特殊函数
1 | phpinfo — 输出关于 PHP 配置的信息 |
# 变量覆盖
- parse_str 如果 str 是 URL 传递入的查询字符串(query string),则将它解析为变量并设置到当前作用域。
- extract 本函数用来将变量从数组中导入到当前的符号表中。检查每个键名看是否可以作为一个合法的变量名,同时也检查和符号表中已有的变量名的冲突。
- mb_parse_str 解析 GET/POST/COOKIE 数据并设置全局变量。
- import_request_variables 将 GET/POST/Cookie 变量导入到全局作用域中。如果你禁止了 register_globals,但又想用到一些全局变量,那么此函数就很有用。
列目录
1 | glob |
# 无参数获取信息
- get_defined_vars 返回一个包含所有已定义变量列表的多维数组,这些变量包括环境变量、服务器变量和用户定义的变量。
- get_defined_constants 返回当前所有已定义的常量名和值。 这包含 define () 函数所创建的,也包含了所有扩展所创建的。
- get_defined_functions 返回一个包含所有已定义函数列表的多维数组
- get_included_files 返回所有被 include、 include_once、 require 和 require_once 的文件名。
php 危险函数总结