java代码审计-命令执行
描述
命令执行漏洞是指应用有时需要调用一些执行系统命令的函数,如果系统命令代码未对用户可控参数做过滤,则当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击。命令执行攻击主要存在以下几个危害:
- 继承Web服务程序的权限去执行系统命令或读/写文件
- 反弹shell,控制整个网站甚至控制服务器,进一步实现内网渗透。
执行命令的几种方式
- 反射
- Runtime.getRuntime.exec
- ProcessBuilder
- groovy_shell
审计技巧
- 查找可用于命令执行的相关关键字如
groovy
、Runtime.getRuntime.exec
、ProcessBuilder
、Class.forName
等,找到对应的地址后跟踪方法调用栈,最后找他的入口点即客户端传参获取地点进行分析
0x02 漏洞防御
命令执行漏洞的防御需要结合实际场景,没有很通用的防御手段。
- 尽量避免调用shell来执行命令。
- 如果是拼接参数来执行命令,对参数进行严格过滤,比如只允许字母数字。
0x03 参考资料
山石JavaWeb靶场的代码执行相关页面,具体代码见com.hillstone.controller.command