常见危险函数及特殊函数(1)(几乎照抄Virink老师的笔记,,,,)

PHP代码执行函数

eval($code)函数:

eval(参数)

把字符串 $code作为PHP代码执行。很多常见的webshell都是用eval执行的(


assert()函数:

assert(参数1[,参数2])检查一个单元是否为FALSE。把变量1作为PHP代码执行。

这是一个调试函数,也有字符串作为PHP代码执行的功能。在eval()函数被满世界的杀毒软件通缉之后流行起来。


preg_replace()函数:

preg_replace(参数1,参数2,参数3)

作用是执行正则表达式,搜索和替换。(preg_replace("/test/e,$_GET[“pass”],“test”);提交?pass=phpinfo(),phpinfo()就会被执行。)


create_functions()函数:

create_function(参数1,参数2)

创建一个匿名函数,并返回独一无二的函数名。$ newfunc = create_function(’$ v’,return system(’$v’);’);
$newfunc(‘whoanmi’);相当于system(‘hwoami’)


call_user_func()函数:

call_user_func(参数1,参数2)

第一个参数是被调用的回调函数,其余参数是回调函数的参数。


call_user_func_array()函数:

call_user_func_array(参数1,数组1)

把第一个参数作为回调函数调用,把参数数组作为回调函数的参数传入。


包含函数

require()函数:


include()函数:
include $file; 在变量 $file可控的情况下,我们可以包含任意文件,从而达到getshell的目的。
利用php流filten读取任意文件(需要用到支持的协议,封装协议还有过滤器):
include ( $_GET[‘file’]); 我们可以提交:
?file=php(支持的协议): //filter/convert.base64-encode(过滤器)/resource=index.php


命令执行函数

1、exec():执行一个外部程序。
2、passthru():执行一个外部程序并且显示原始输出。
3、proc_open():执行一个命令,并且打开用来输入/输出的文件指针。
4、shell_exec()& ‘’:通过shell环境执行命令,并且将完整的输出以字符串的方式返回。
5、system():执行外部程序,并且显示输出。例如:
system($cmd);通过控制变量 $cmd执行任意命令。system(‘ping -c 3’ . $target)通过管道符等特殊字符截断从而执行任意命令。(‘a | whoami’;)
6、popen():通过popen()的从参数传递一条命令,并对popen()所打开的文件进行执行。


文件操作函数

1、copy():拷贝文件。
2、file_get_contents():将整个文件读入一个字符串。
3、file_put_contents():将一个字符串写入文件。
4、file():把整个文件读入一个数组中。
5、fopen():打开文件或者URL。
6、move_uploaded_file():将上传的文件移动到新位置。
7、readfile():输出文件。
8、rename():重命名一个文件或目录。
9、rmdir():删除目录。
10、unlink & delete ():删除文件。
任意文件读取,写入,删除往往是上面(或者其他)几个函数受到了控制。
读取:可以读取配置等文件,拿到key。写入:可以写入shell代码相关内容。删除:可以删除.lock文件而可以重新安装覆盖。等等。


特殊函数

信息泄露:

bool phpinfo([int $what=INFO_ALL])

输出PHP当前状态的大量信息,包含了PHP编译选项,启用的扩展,PHP版本,服务器信息和环境变量,操作系统版本信息,path变量,配置选项的本地值和主值,HTTP头和PHP授权信息。


软连接-读取文件内容:

bool symlink(string $target,string $link)

symlink()对于已有的target建立一个名为link的符号链接。

string readlink(string $path)

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


环境变量:

string getenv(string $varname)

获取一个环境变量的值。

bool putenv(string $setting)

添加setting到服务器环境变量,环境变量仅存活于当前请求期间,在请求结束时环境会恢复到初始状态。


加载扩展:

bool dl(string $library)

加载指定参数library的PHP扩展。


相关配置:

string ini_get(string $varname)

成功时返回配置选项的值。


数字判断:

bool is_numeric(mixed $var)

如果var是数字和数字字符串则返回TRUE,否则返回FALSE。


数组相关:

bool in_array(mixed $needle,array $haystack[,bool $strict = FALSE])

在haystack中搜索needle,如果没有设置strict则使用宽松的比较。该函数有一个特性,比较值钱会进行自动类型转换。例如:
$a=‘1sjdkkfl’;
in_array( $a,array(1,2,3))的返回值会是真。


这一篇几乎照抄于Virink老师的笔记,,,真正的掌握还需要大量的使用。

你可能感兴趣的:(我欠下的债)