🧬PHP敏感函数速查表
最后更新于
最后更新于
函数/方法 | 备注 |
---|---|
函数 | 描述 | 例子 |
---|---|---|
函数 | 描述 | 例子 |
---|---|---|
system
执行命令并输出结果
system('id');
exec
执行命令 只可获取最后一行结果
exec('id',$a); print_r($a);
passthru
同 system
passthru('id');
shell_exec ` (反引号)
执行命令并返回结果
$a=shell_exec('id');print_r($a); $a=`id`;print_r($a);
popen
执行命令并建立管道 返回一个指针 使用fread等函数操作指针进行读写
$a=popen("id", "r"); echo fread($a, 2096);
proc_open
同 popen (进程控制功能更强大)
pcntl_exec
执行命令 只返回是否发生错误
pcntl_exec('id');
eval
将传入的参数内容作为PHP代码执行 eval 不是函数 是一种语法结构 不能当做函数动态调用
eval('phpinfo();');
assert
将传入的参数内容作为PHP代码执行 版本在PHP7以下是函数 PHP7及以上为语法结构
assert('phpinfo();');
preg_replace
当preg_replace使用/e修饰符且原字符串可控时时 有可能执行php代码
echo preg_replace("/e","{${PHPINFO()}}","123");
call_user_func
把第一个参数作为回调函数调用 需要两个参数都完全可控才可利用 只能传入一个参数调用
call_user_func('assert', 'phpinfo();');
call_user_func_array
同call_user_func 可传入一个数组带入多个参数调用函数
call_user_func_array ('file_put_contents', ['1.txt','6666']);
create_function
根据传递的参数创建匿名函数,并为其返回唯一名称 利用需要第二个参数可控 且创建的函数被执行
$f = create_function('','system($_GET[123]);'); $f();
include
包含并运行指定文件 执行出错会抛出错误
include 'vars.php'; (括号可有可无)
require
同include 执行出错会抛出警告
require('somefile.php'); (括号可有可无)
require_once
同require 但会检查之前是否已经包含该文件 确保不重复包含
include_once
同include 但会检查之前是否已经包含该文件 确保不重复包含
mysql_query
odbc_exec
mysqli_query
mysql_db_query
mysql_unbuffered_query
mysqli::query
用法
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$mysqli->query();
pg_query
pg_query_params
pg_send_query
pg_send_query_params
sqlsrv_query
pdo::query
$pdo=new PDO("mysql:host=localhost;dbname=phpdemo","root","1234"); $pdo->query($sql);;
PDO
SQLite3::query
SQLite3::exec
$db = new SQLite3('mysqlitedb.db'); $db->query('SELECT bar FROM foo'); $db->exec('CREATE TABLE bar (bar STRING)');
$mongo = new mongoclient(); $data = $coll->find($data);
$ld = ldap_connect("localhost");…. $lb = @ldap_bind($ld, "cn=test,dc=test,dc=com", "test");
Db::query
Thinkphp
Db::execute
Thinkphp
file_get_contents
读入文件返回字符串
echo file_get_contents("flag.txt"); echo file_get_contents("https://www.bilibili.com/");
curl_setopt curl_exec
Curl访问url获取信息
function curl($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_exec($ch); curl_close($ch); } $url = $_GET['url']; curl($url); https://www.php.net/manual/zh/function.curl-exec.php
fsockopen
打开一个套接字连接(远程 tcp/udp raw)
readfile
读取一个文件,并写入到输出缓冲
同file_get_contents
fopen/fread/fgets/fgetss /fgetc/fgetcsv/fpassthru/fscanf
打开文件或者 URL 读取文件流
$file = fopen("test.txt","r"); echo fread($file,"1234"); fclose($file);
file
把整个文件读入一个数组中
echo implode('', file('https://www.bilibili.com/'));
highlight_file/show_source
语法高亮一个文件
highlight_file("1.php");
parse_ini_file
读取并解析一个ini配置文件
print_r(parse_ini_file('1.ini'));
simplexml_load_file
读取文件作为XML文档解析
file_put_contents
将一个字符串写入文件
file_put_contents("1.txt","6666");
move_uploaded_file
将上传的临时文件移动到新的位置
move_uploaded_file($_FILES["pictures"]["tmp_name"],"1.php")
rename
重命名文件/目录
rename($oldname, $newname);
rmdir
删除目录
mkdir
创建目录
unlink
删除文件
copy
复制文件
copy($file, $newfile);
fopen/fputs/fwrite
打开文件或者 URL
link
创建文件硬链接
link($target, $link);
symlink
创建符号链接(软链接)
symlink($target, $link);
tmpfile
创建一个临时文件 (在临时目录存放 随机文件名 返回句柄)
$temp = tmpfile(); fwrite($temp, "123456"); fclose($temp);
request()->file()->move()
request()->file()->file()
$file = request()->file($name);
$file->move($filepath);
extractTo
解压ZIP到目录
DOMDocument loadXML simplexml_import_dom
加载解析XML 有可能存在XXEE 漏洞 file_get_contents获取客户端输入内容 new DOMDocument()初始化XML解析器 loadXML($xmlfile)加载客户端输入的XML内容 simplexml_import_dom($dom)获取XML文档节点,如果成功则返回SimpleXMLElement对象,如果失败则返回FALSE。
<?php $xmlfile=file_get_contents('php://input'); $dom=new DOMDocument(); $dom->loadXML($xmlfile); $xml=simplexml_import_dom($dom); $xxe=$xml->xxe; $str="$xxe \n"; echo $str; ?> 来自 <https://xz.aliyun.com/t/6887>
simplexml_load_string
加载解析XML字符串 有可能存在XXE 漏洞
$xml=simplexml_load_string($_REQUEST['xml']); print_r($xml);
simplexml_load_file
读取文件作为XML文档解析 有可能存在XXE 漏洞
unserialize
反序列化