一,介绍
RCE是远程代码/命令执行,可以直接在目标主机上执行代码或者命令,危害极大。一般是因为对输入的过滤不严格导致,常见于有调用系统命令或者调用代码执行函数的地方。
二,命令注入
- 后台直接执行系统命,一般要结合linux,windows的管道对要执行的命令进行拼接。 过滤的话大致分为两种情况:白名单,黑名单
- 黑名单是过滤到一些常用的参数,如果过滤的不全面可以考虑用其他相同功能的函数代替;如果黑名单比较全面,那就要考虑用编码的方式尝试绕过。
- 白名单是限制参数的使用范围,写死了的话应该常规的办法就没有用了。盲猜很多web都是基于白名单的。
- 可以通过echo,>>等方法生成php文件并写入一句话木马
三,文件包含
- 本地包含是一个文件在使用的时候动态的把本地的其他文件的代码通过函数包含进来,这种情况下被包含的文件可以是任何后缀的文件,因为包含的是内容。可以结合文件上传漏洞,上传一句话木马,然后包含执行。
- 远程包含是包含其他服务器上的文件,这种情况下就及其的不安全,可能要采取一些措施来保证安全。比如检测被包含的文件的后缀,内容,文件头等。但是这种检测一般又是基于黑白名单来做,存在绕过的风险吧。
- 对于一些操作要求allow_url_fopen 和 allow_url_include 两个配置为 on,并且要和伪协议结合起来
四,代码执行
- 因为php的一些函数例如eval()会把输入的字符串当作php代码执行,而且对输入的检测不严格导致的
- 还是可以基于黑白名单检测经行防御,当然应该也有绕过的方法吧