RCE
概述
服务器未针对指定危险函数进行过滤,导致在没有绝对路径的情况下误将用户输入当成代码或系统命令执行
常见危险函数
有回显:
system()
passthru()
无回显:
exec():默认返回最后一行
shell_exec():可通过echo将结果输出到页面,等价于`
popen():不会直接返回执行结果,而是返回一个文件指针,但是命令已经执行。
proc_open():和popen类似,但是可以提供双向管道
windows系统命令拼接
可用逻辑运算符对多个命令予以拼接,以达到特殊效果
“|”:A|B表示A命令和B命令同时执行,要求:必须保证两个命令都正确才会输出结果,否则将会报错 ,而且默认只会输出B的结果
“||”: A||B表示A命令和B命令同时执行,互不干涉,同时输出,即使一个命令出错也不影响另一个正常输出
“&”:和||类似
“&&”:和|类似
危害
这可能不用多说了吧,都能执行代码和系统命令了,那还不是无法无天了
防范
尽量不要使用命令执行函数。
不要让用户控制参数。
执行前做好检测和过滤。
靶场实操
第一关
可以看到此处给了个ping功能
我先ping一下本地
此处给出的返回结果正是我们后台执行控制台命令后输出的结果。尝试拼接命令:127.0.0.1&whoami
可获取相关的身份信息
第二关
字符串?作为老实人,我直接上来就提交了自己的真实姓名:彭于晏
结果居然出现了下面的情景
年轻人不讲武德,来骗我69岁的老萌新
那我只好来点特殊手段:直接输入phpinfo();然后回车
获得谭振文件,偷袭得手