代码执行:可执行脚本语言代码
命令执行:可执行系统(Linux、windows)命令
eval:
eval函数会将提交上来的值作为PHP代码处理,可以提交phpinfo(); 或者生成一句话shell
preg_replace:(5.5版本以上已废弃/e修饰符)
当replacement 参数构成一个合理的php代码字符串的时候,/e 修正符将参数当做php代码执行
create_function:
在php 中使用create_function创建一个匿名函数(lambda-style) 如未对参数进行严格的过滤审查,可以通过提交特殊字符串给create_function执行任意代码.
使用${${ }}简单绕过:
代码使用反斜杠将echo后面的内容给转义了 与加addslashes()函数进行过滤是一样的 payload:arg=${${phpinfo()}}
最简单的例子:
payload:?cmd=whoami 这样即可执行系统命令
举一个类似DVWA里边的例子:
payload:?cmd=127.0.0.1;whoami
命令分隔符:
在Linux上,上面的 ; 也可以用 |、|| 代替
;前面的执行完执行后面的
|是管道符,显示后面的执行结果
||当前面的执行出错时执行后面的
可用**%0A**换行执行命令
在Windows上,不能用 ; 可以用&、&&、|、||代替
&前面的语句为假则直接执行后面的
&&前面的语句为假则直接出错,后面的也不执行
|直接执行后面的语句
||前面出错执行后面的
PHP 支持一个执行运算符:反引号(``) PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回
效果与函数 shell_exec() 相同,都是以字符串的形式返回一个命令的执行结果,可以保存到变量中
正则审查
是否使用多行模式修饰符(/foo/m)
是否遗漏匹配对象末尾的换行符(/^\d+$/)
是否允许空白字符(\s)
是否误写反斜杠匹配模式(/\/)
可用**%0A换行执行命令,换行符自身是一个有效的目录分隔符**
黑名单绕过
**shell特殊变量:**ca$1t、ca$@t fla$@g
单引号、双引号: c""at、ca''t、反斜线 c\at
base64编码:echo "Y2F0IGZsYWc="|base64 -d|bash、Hex编码: echo "63617420666c6167" | xxd -r -p|bash
利用变量: 执行ls命令: a=l;b=s;$a$b cat 1.php文件内容: a=c;b=at;c=1.php;$a$b ${c}
绕过空格
用**${IFS}**代替
读取文件的时候利用重定向符cat<flag
花括号无空格**{cat,666.txt}**
$IFS可截断后边的内容,cat flag$IFS666.txt
长度限制,通过构造文件来绕过
linux下可以用 1>a创建文件名为a的空文件
ls -t>test则会将目录按时间排序后写进test文件中 sh命令可以从一个文件中读取命令来执行
引号逃逸
恶意命令被扩在引号内,可用 \ 转义引号逃逸
1、尽量不要使用以上的代码/命令执行函数
2、使用disable_funtion()禁用以上函数
3、过滤所有能当作命令分隔符使用的字符