前往个人博客阅读,提升阅读体验
https://wywwzjj.top/2019/05/12/命令注入绕过总结/
直接执行代码
PHP 中有不少可以直接执行代码的函数。
eval();
assert();
system();
exec();
shell_exec();
passthru();
escapeshellcmd();
pcntl_exec();
preg_replace( ) 代码执行
preg_replace() 的第一个参数如果存在 /e
模式修饰符,则允许代码执行。
<?php
$var = "<tag>phpinfo()</tag>";
preg_replace("/<tag>(.*?)<\/tag>/e", "addslashes(\\1)", $var);
?>
若无 /e
修饰符,则可以尝试 %00 截断。
重定向
-
cmd > file
把cmd命令的输出重定向到文件file中。如果file已经存在,则清空原有文件,使用bash的noclobber选项可以防止复盖原有文件。 -
cmd >> file
把cmd命令的输出重定向到文件file中,如果file已经存在,则把信息加在原有文件后面。 -
cmd < file
使cmd命令从file读入 -
cmd << text
从命令行读取输入,直到一个与text相同的行结束。除非使用引号把输入括起来,此模式将对输入内容进行shell变量替换。如果使用<<-
,则会忽略接下来输入行首的tab,结束行也可以是一堆tab再加上一个与text相同的内容,可以参考後面的例子。 -
cmd <<< word
把word(而不是文件word)和后面的换行作为输入提供给cmd。 -
cmd <> file
以读写模式把文件file重定向到输入,文件file不会被破坏。仅当应用程序利用了这一特性时,它才是有意义的。 -
cmd >| file
功能同>,但即便在设置了noclobber时也会复盖file文件,注意用的是|而非一些书中说的!,目前仅在csh中仍沿用>!