命令执行漏洞

命令执行漏洞是指攻击者可以随意执行系统命令。通常说的远程执行代码漏洞,都是此类型.

OS命令执行漏洞

任何语言基本上都可以调用系统命令。比如PHP的system,shell_exec,exec等等或者Java的Runtine.exec都是可以直接执行系统调用的。

举个简单的示例

上述代码打包以后,执行 java xxx.jar “rm -fr /“,也就是传入的系统执行命令是删除服务器根目录.这是个很危险的操作.倘若类似的代码暴露在公网上面.有意者构造请求就能达到执行恶意命令的目的

框架执行漏洞

我们的代码一般是没有使用到runtime.exec , 但是我们经常是使用反射,者字节码相关的类,或者业务系统里面使用了相关的框架,当用户能在输入中构造出相关的执行类时便可以,通过构造出的执行类来达到执行自己恶意代码的目的.

2017年3月15日,fastjson官方主动爆出fastjson在1.2.24及之前版本存在远程代码执行高危安全漏洞。攻击者可以通过此漏洞远程执行恶意代码来入侵服务器。 具体地址是 https://github.com/alibaba/fastjson/wiki/security_update_20170315

这是个很简单的执行类,我们要做的就是将他的字节码注入到待侵入系统使用了fastjson的地方.

readBytecode 函数读出了Command类的字节码,并转换成base64,我们使用他来模拟用户的输入,最终放入evilCode,然后构造完整的json对象,也就是testJson.在实际的攻击中只需要往系统里面构造的几个字段即可.在执行了代码后确实是调出了windows的计算器,有兴趣的可以试试.这个侵入是比较巧的它需要业务系统使用了SupportNonPublicField参数.

类似的,struts2的漏洞曾经爆发过几次.它是由于其WEB输入参数使用了OGNL动态绑定到值对象,攻击者构造固定的参数,使其支持静态方法并且直接执行了Runtime的方法.struts2的这个漏洞危害显然是很巨大的,它不需要任何条件,只需要输入构造好的参数.

防范命令执行漏洞

不要使用这种危险的系统执行命令代码.如果没有使用就不会被利用.

非要使用的时候,在执行动态命令之前,一定要对用户输入的变量进行过滤,且对敏感字符进行转义.有输入的地方就可能存在漏洞

对于框架类型的,在业务上线前要做好充分测试,如果真有漏洞爆发,要及时进行处理,关注官方的修复情况.

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180226G06BXV00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券