常见危险函数及特殊函数

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进行处理,非常感谢!

上一篇 2019年6月18日
下一篇 2019年6月18日

相关推荐