命令执行&代码执行漏洞
一、漏洞介绍
cmd:command 命令执行
rce:
web应用提供调取外部应用、执行系统命令功能。用户利用这些功能执行系统命令,从而读取敏感信息、拿到系统权限。
命令执行与代码执行的区别:
命令执行是调用系统的命令执行接口,与语句本身无关,只与系统版本有关。
代码执行是调用后端语言(java、php等)。
二、产生原因
- 使用命令执行、代码执行函数调取外部应用、执行系统命令
- 参数用户可控
- 未对用户输入进行过滤、转义和限制
三、漏洞危害
- 继承web应用权限执行系统命令、读写文件。
- 反弹shell
- 控制服务器
- 攻击内网
四、应用场景
提供ping功能的网站。
五、产生条件
使用命令执行&代码执行函数
命令执行函数:
- system(): 执行一个外部的应用程序并显示输出的结果
- exec(): 执行一个外部的应用程序,以数组形式保存结果,回显需要echo ???
- shell_exec(): 执行shell命令并返回输出的结果的字符串,回显需要echo
- passthru(): 执行一个unix系统命令并显示原始的输出
代码执行函数:
- eval(): 将字符串带入php中执行
- assert():直接执行php中的命令
代码执行函数前面加@,不报错。
六、漏洞利用
命令执行
使用命令连接符拼接命令
windows:
- &: 顺序执行,全部执行
- &&: 顺序执行,遇到假则报错
- |: 顺序执行,遇到假则报错
- ||: 顺序执行,遇到真则结束
linux:
- 分号: 顺序执行,全部执行
- &: 使命令在后台运行,这样就可以同时执行多条命令
- &&: 顺序执行,前面成功,则继续执行后面
- |: 将前面的输出作为后面的输入;前后都执行,但只显 示后面的结果
- ||: 若前面的命令执行成功,则直接结束;若前面的命令执 行失败,则执行后面的命令
代码执行
在代码执行函数中使用命令执行函数。
七、防御与修复
- 尽量不要使用命令执行&代码执行函数
- 对用户输入进行过滤、转义和限制
- 尽量不要使用不能完全控制的危险函数