命令执行方面
system()
exec()
shell_exec()
passthru()
类似于exec()
popen()
<?php
$cmd = 'whoami';
$re = popen($cmd,'r');
print_r(fgets($re));
fclose($re);
proc_open()
这个用法有点复杂,没看懂
<?php
$descriptorspec=array( //这个索引数组用力指定要用proc_open创建的子进程的描述符
0=>array('pipe','r'), //STDIN
1=>array('pipe','w'),//STDOUT
2=>array('pipe','w') //STDERROR
);
$handle=proc_open('dir',$descriptorspec,$pipes,NULL);
//$pipes中保存的是子进程创建的管道对应到 PHP 这一端的文件指针($descriptorspec指定的)
if(!is_resource($handle)){
die('proc_open failed');
}
//fwrite($pipes[0],'ipconfig');
print('stdout:<br/>');
while($s=fgets($pipes[1])){
print_r($s);
}
print('===========<br/>stderr:<br/>');
while($s=fgets($pipes[2])){
print_r($s);
}
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($handle);
?>
pcntl_exec()
shell.php
<?php pcntl_exec(“/bin/bash”, array(“/tmp/shell.sh”));?>
shell.sh
#/tmp/shell.sh
#!/bin/bash
ls -l /
反引号
代码执行方面
eval()
assert()
preg_replace()的\e模式
create_function()
$cmd = 'echo 1;}phpinfo();//';
create_function($a,$cmd);
ob_start()
<?php
$cmd = 'system';
ob_start($cmd); //将命令存储到内部缓冲区
echo "whoami";
ob_end_flush(); //清除内部缓冲区,此时将输出缓冲区的内容当作参数执行并输入执行结果,即执行system($_GET(a))
?>
call_user_func()
<?php
$a = 'system';
$b = 'whoami';
call_user_func($a,$b);
?>
call_user_func_array
<?php
$a = 'system';
$b = 'whoami';
call_user_func_array($a,array($b));
?>
array_map
<?php
$a = 'system';
$b = 'whoami';
array_map($a,($b));
?>
动态函数
<?php
$a = 'system';
$b = 'whoami';
$a($b);
?>
其他
phpinfo()
scandir()
列出指定路径中的文件和目录
get_defined_vars()
返回由所有已定义变量所组成的数组
get_defined_constants()
返回当前所有已定义的常量名和值
get_defined_functions()
返回一个包含所有已定义函数列表的多维数组
get_included_files()
返回所有被 include、 include_once、 require 和 require_once 的文件名
get_cfg_var
获取 PHP 配置选项的值
ini_set()
可用于修改、设置 PHP 环境配置参数
ini_alter()
ini_set() 函数的一个别名函数
ini_get_all()
获取所有已注册的配置选项
ini_restore()
可用于恢复 PHP 环境配置参数到其初始值
error_log()
将错误信息发送到指定位置
error_log("<?php phpinfo();?>", 3, "D:\\work\\php\\shell.php");
chroot()
可改变当前 PHP 进程的工作根目录,仅当系统支持 CLI 模式PHP 时才能工作,且该函数不适用于 Windows 系统
chgrp()
改变文件或目录所属的用户组
chown()
改变文件或目录的所有者
更多