简单做个记录,最近在准备面试,会很少学习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 | string create_function ( string $args , string $code ) |
将字符串拼接,然后赋值给函数,直接调用即可执行命令
1 | <?php |
回调函数
call_user_func()、call_user_func_array()、array_map()
都可以调用其他函数。
1 | <?php |
文件包含
include和require
require_once和include_once
文件操作函数
1 | copy 拷贝文件 |
变量覆盖
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 函数做同样的事,返回符号连接的内容。