Skip to content

java代码审计-命令执行

描述

命令执行漏洞是指应用有时需要调用一些执行系统命令的函数,如果系统命令代码未对用户可控参数做过滤,则当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击。命令执行攻击主要存在以下几个危害:

  • 继承Web服务程序的权限去执行系统命令或读/写文件
  • 反弹shell,控制整个网站甚至控制服务器,进一步实现内网渗透。

执行命令的几种方式

  • 反射
  • Runtime.getRuntime.exec
  • ProcessBuilder
  • groovy_shell

审计技巧

  • 查找可用于命令执行的相关关键字如groovyRuntime.getRuntime.execProcessBuilderClass.forName等,找到对应的地址后跟踪方法调用栈,最后找他的入口点即客户端传参获取地点进行分析

0x02 漏洞防御

命令执行漏洞的防御需要结合实际场景,没有很通用的防御手段。

  1. 尽量避免调用shell来执行命令。
  2. 如果是拼接参数来执行命令,对参数进行严格过滤,比如只允许字母数字。

0x03 参考资料

山石JavaWeb靶场的代码执行相关页面,具体代码见com.hillstone.controller.command

Comments