目录
产生原因:
-
包含远程命令执行和远程代码执行 == REC{简称}
-
一般出现这种漏洞
-
是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口
-
-
比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上
一般会给用户提供一个ping操作的web界面
用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果
-
而如果设计者在完成该功能时
没有做严格的安全控制
则可能会导致攻击者通过该接口提交“意想不到”的命令
从而让后台进行执行,从而控制整个后台服务器
-
现在很多的甲方企业都开始实施自动化运维
大量的系统操作会通过"自动化运维平台"进行操作
在这种平台上往往会出现远程系统命令执行的漏洞
不信的话现在就可以找你们运维部的系统测试一下,会有意想不到的"收获"
简称以及言简意赅:
-
只要能够执行操作系统的执行的我们称之为远程命令执行漏洞 --- REC。
-
也就是前端提交到后端的数据没过滤导致的任意命令执行漏洞 。
原理
漏洞发现的手法
-
出现这种情况一般都是代码审计出来的bug
“|”:管道符,前面命令标准输出,后面命令的标准输入。例如:help |more
“&” commandA & commandB 先运行命令A,然后运行命令B
“||” commandA || commandB 运行命令A,如果失败则运行命令B
“&&” commandA && commandB 运行命令A,如果成功则运行命令B
远程命令执行
-
执行命令
Ping wwww.baidu.com || net user
包装了指令数据 ***
运维自动化系统
也是执行系统操作
执行得三个命令
Exec
eval
Phpinfo(); 执行命令php
-
一句话木马原理以及如何利用
-
Eval + 命令 也就是一句话木马的原理
-
蚁剑 菜刀 + 一句话木马作为连接所用【连接方式】
-
RCE漏洞防御
Low级别
-
192.168.1.5 && net user
中等防护
&& ; 替换
-
|| 前面能执行 只执行了前面的
-
| 后面能执行 只能执行后面的
-
;前面错了 后面的命令依旧能执行
-
| 只执行了后面的命令 192.168.1.5|net user
Hight
-
有空格 单个管道符不行 192.168.1.5| net user
-
代码审计是无敌得可以审计出这种bug
- 最高等级防护 对数据输入的数据进行严格的控制 说明类别的数据类型。
远程命令执行
-
一般都是通过代码审计审核出代码漏洞 也就是安全审计
1)执行系统命令: assert,exec,shell_exec,``(反单引号)
system,passthru,pcntl_exec,popen,proc_open
(2)代码执行与加密: eval, assert, call_user_func,base64_decode, gzinflate, gzuncompress, gzdecode, str_rot13
写在eval()中的字符串都会当做代码来执行。
(3)文件包含与生成:
require, require_once, include, include_once,file_get_contents, file_put_contents, fputs, fwrite
(4)dvwa low && Medium & 或&;& High | (代码里面的|后有一个空格)pikachu phpinfo();
(5)struts2命令执行漏洞攻防演示
历史漏洞:https://www.seebug.org/search/?keywords=struts2
-
REC防御只看DVW得防范就可以了
-
尽量不要使用命令执行函数。 不要让用户控制参数。 执行前做好检测和过滤。
编写不易,喜欢的点个赞就是最大的鼓励,转载亲注明出处~~~ 希望对你有帮助 !!!!