PHP代码执行函数
1.eval
把字符串$code作为php代码执行。
很多常见的webshell都是用eval来执行具体操作的。
eval一般出现的场景是
2.assert
检查一个断言是否为FALSE。t=(把字符串$assertion作为PHP代码执行)
因为大多数杀软件把eval列入黑名单了,所以用assert来代替eval来执行具体操作的。
3.preg_replace
/e修正符使pre_replace()将replacement参数当作PHP代码
如果我们提交=phpinfo(),phpinfo()将会被执行
4.create_function
创建一个匿名函数,并返回独一无二的函数名。
$newfuction(‘whoaml’);就相当于system(‘whoami’);
5.call_user_func
第一个参数callback是被调用的回调函数,其余参数是回调函数的参数。
把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入
包含函数
require、include、require_once、include_once
包含函数一共有四个,主要作用为包含并运行指定文件。
在变量$file可控的情况下,我们就可以包含任意文件,从而达到getshell的目的。
另外,在不同的配置环境下,可以包含不同的文件。
因此又分为远程文件包含和本地文件包含。
包含函数也能沟渎取任意文件内容,这就需要用到【支持的协议和封装协议】和【过滤器】。
例如,利用PHP流filter读取任意文件
命令执行函数
- exec()——执行一个外部程序。
- passthru()——执行外部程序并显示原始输出。
- proc_open()——执行一个命令,并且打开出来输入、输出的文件指针。
- shell_exec()&’’——通过shell环境执行命令,并且将完整的输出以字符串的方式返回。
- system()——执行外部程序,并且显示输出
- popen()——通过popen()的参数传递一条命令,并对popen()所打开的文件进行执行。
执行函数包括但不限于上述几个。
同样的道理、只要命令的参数可控制就能狗执行系统命令
例如:
system($cmd);或者system(‘ping-c 3’. $target);
当 $cmd可以空就执行任意命令,而当 $target可控的话,可以用管道符等特殊字符截断从执行任意命令。
文件操作函数
- copy——拷贝文件
- file_get_contents——将整个文件读入一个字符串
- file_put_contents——将一个字符串写入文件
- file——把整个文件读入一个数组中
- fopen——打开文件或者URL
- move_uploaded_file——将上传的文件移动到新位置
- reasfile——输出文件
- rename——重命名一个文件或目录
- rmdir——删除目录
- unlink & delete——删除文件
任意文件读取、写入、删除往往是上面几个函数受到了控制(当然还有其他的函数)。
不同的函数在不同的场景有不同的作用和不同的利用的看法。
读取:可以读取配置等文件,拿到key
写入:可以写入shell代码相关的内容
删除:可以删除.lock文件而可以重新安装覆盖
等等其他的思路
特殊函数
信息泄露
输出PHP当前状态的大量信息,包含了PHP编译选项,启用的扩展,PHP版本,服务器信息和环境变量(如果编译为一个模块的话)、PHP环境变量、操作系统版本信息、path变量、配置选项的本地值和主值,HTTP头和PHP授权信息(License)。
软连接-读取文件内容
symlink()对于已有的target建立一个名为link的符 连接。
readlink()和同名的C函数做同样的事,返回符 连接的内容。
环境变量
获取一个环境变量的值
添加setting到服务器环境变量。环境变量仅存活于当前请求期间。在请求结束时环境会恢复到初始状态。
加载扩展
载入指定参数library的PHP扩展
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!