PHP危险函数总结
Contents
php危险函数总结
什么是危险函数
函数设计出来就是让人使用的,之所以危险,是因为其功能过于强大。开发人员特别是刚从业的人员很少很少会完整阅读整个文档,再或者是没有意识到当给这些函数传递一些非常规的,外部可控的参数会带来什么影响。
1 | $_GET |
执行任意代码的函数
- eval函数
- assert函数
- create_function 函数
- preg_replace 函数
- call_user_func/call_user_func_array函数
- array_map函数
- array_filter函数
- usort/uasort函数
- $a($b)动态函数
eval函数
eval() 函数把字符串按照 PHP 代码来计算。
该字符串必须是合法的 PHP 代码,且必须以分号结尾。
注释:return 语句会立即终止对字符串的计算。
提示:该函数对于在数据库文本字段中供日后计算而进行的代码存储很有用。
1 | <?php |
简单的一句话木马:
assert函数
assert——检测一个 断言是否为FALSE
如果参数为字符串,它将会被assert()当做php代码来执行
版本只能为:5.x
1 |
|
如果我们提交?func=fo,即可写入shell.php
create_function函数
create_function(string $args, string $code)
适用范围:PHP 4> = 4.0.1
,PHP 5
,PHP 7
功能:根据传递的参数创建匿名函数,并为其返回唯一名称。
1 |
|
preg_replace函数
preg_replace($pattern,$replacement,$subject,$limit,$count)
示例1:
1 |
|
当我们所要匹配的字符串中含有test时
我们直接传入参数?a=phpinfo()即可执行代码。
示例2:
1 |
|
call_user_func/call_user_func_array函数
call_user_func($callback,$parameter)
调用一个回调函数处理字符串,
call_user_func_array($callback,$param arr)
利用回调函数处理数组。
示例1:
示例2:
一句话木马:
1 |
|
array_map函数
array_map($callback,$array1)
作用是为数组的每个元素应用回调函数 。其返回值为数组,是为 array1 每个元素应用 callback函数之后的数组。 callback 函数形参的数量和传给 array_map() 数组数量,两者必须一样。
1 |
|
array_filter函数
array_filter() 函数用回调函数过滤数组中的元素。
该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回给结果数组。数组键名保持不变。
语法:array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
1 |
|
usort/uasort函数
usort
使用用户自定义的比较函数对数组中的值进行排序
usort(array, cmp_function);
uasort(array, cmp_function);
$a$b动态函数
读取网络资源的函数
常见的php读取远程文件的方式
Fopen()
1
2
3
4
5
6
7
8
9
10
$handle=fopen("http://www.baidu.com","rb");
$contents="";
while (!feof($handle)) {
$contents .= fread($handle, 8192);
}
fclose($handle);
echo $contents;
- file_get_content()
- curl
php命令执行函数
system函数
system():执行外部程序,并且返回输出
shell_exec(没有回显的命令执行)
shell_exec():通过shell环境,并且将完整的输出以字符串方式返回
passthru函数
执行外部程序并且显示原始输出
exec函数
exec():执行一个外部程序
ob_start函数
操作文件的函数
常见文件操作函数
- Copy()
copy() 函数拷贝文件
语法:copy(source,destination)
1 |
|
输出1。
File_get_contents()/File_put_contents
file_get_contents() 把整个文件读入一个字符串中。
语法:file_get_contents(path,include_path,context,start,max_length)
1
2
3
echo file_get_contents("test.txt");file_put_contents() 函数把一个字符串写入文件中。
语法:int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )
1
2
3
echo file_put_contents("sites.txt","Runoob");
File()
file() 函数把整个文件读入一个数组中。
数组中的每个元素都是文件中相应的一行,包括换行符在内
语法:file(path,include_path,context)
1
2
3
print_r(file("test.txt"));
Fopen()
open() 函数打开一个文件或 URL。
如果 fopen() 失败,它将返回 FALSE 并附带错误信息。您可以通过在函数名前面添加一个 ‘@’ 来隐藏错误输出。
语法:fopen(filename,mode,include_path,context)
1
2
3
4
5
6
7<?php
$file = fopen("test.txt","r");
$file = fopen("/home/test/test.txt","r");
$file = fopen("/home/test/test.gif","wb");
$file = fopen("http://www.example.com/","r");
$file = fopen("ftp://user:password@example.com/test.txt","w");
?>
Move_uploaded_file()
move_uploaded_file() 函数把上传的文件移动到新位置。
如果成功该函数返回 TRUE,如果失败则返回 FALSE。
语法:move_uploaded_file(file,newloc)
Readfile()
readfile() 函数读取一个文件,并写入到输出缓冲。
语法:readfile(filename,include_path,context)
1
2
3
echo readfile("test.txt");
Rename()
rename() 函数重命名文件或目录。
如果成功,该函数返回 TRUE。如果失败,则返回 FALSE。
语法:rename(oldname,newname,context)
1
2
3
rename("images","pictures");
Unlink()
unlink() 函数删除文件。
如果成功,该函数返回 TRUE。如果失败,则返回 FALSE。
语法:unlink(filename,context)
1
2
3
4
5
6
7
8
9
10
11
$file = "test.txt";
if (!unlink($file))
{
echo ("Error deleting $file");
}
else
{
echo ("Deleted $file");
}
参考文章:
Author: Shu1L
Link: https://shu1l.github.io/2020/04/02/php-wei-xian-han-shu-zong-jie/
License: 知识共享署名-非商业性使用 4.0 国际许可协议