
Apache Solr Poc CVE-2017-3164 CVE-2017-12629
이 폴더에는 Apache Solr CVE-2017-3164 및 CVE-2017-12629에 대한 예시 익스플로잇이 포함되어 있습니다.
교육 목적으로만, 그리고 Apache Solr 서버 소유자의 완전한 허가를 받아 사용해야 합니다.
Apache Solr 서버의 IP 또는 DNS 이름과 컬렉션 이름을 알아야 합니다.
Apache Solr 버전 1.3부터 7.6(포함)에서 서버 측 요청 위조(SSRF) 취약점이 발생합니다. "shards" 매개변수에 해당하는 화이트리스트 메커니즘이 없기 때문에, 서버에 접근할 수 있는 원격 공격자가 Solr가 도달 가능한 모든 URL에 HTTP GET 요청을 수행하도록 할 수 있습니다.
이 SSRF는 매우 강력한데, GET 요청을 보내기만 하면 대상에 POST 요청을 보내기 때문입니다. 또한 POST 요청 본문을 GET 요청과 함께 URL 매개변수로 제공할 수 있습니다.
Apache Solr 7.1 이전 버전과 Apache Lucene 7.1 이전 버전에서, XXE를 악용하고 Config API add-listener 명령을 사용하여 RunExecutableListener 클래스에 도달함으로써 원격 코드 실행이 발생합니다. Elasticsearch는 Lucene을 사용하지만 이 취약점에 영향을 받지 않습니다. XML 외부 엔터티 확장 취약점은 XML Query Parser에서 발생하며, 기본적으로 deftype=xmlparser 매개변수를 사용하는 모든 쿼리 요청에 대해 사용 가능하며, /upload 요청 핸들러로 악성 데이터를 업로드하거나 ftp 래퍼를 사용한 Blind XXE로 Solr 서버의 임의 로컬 파일을 읽는 데 악용될 수 있습니다. 또한 두 번째 취약점은 영향을 받는 모든 Solr 버전에서 사용 가능한 RunExecutableListener를 사용한 원격 코드 실행과 관련이 있습니다.
저는 이 RCE를 악용하기로 선택했지만, Apache Solr에는 SSRF로 악용할 수 있는 많은 RCE 취약점이 있습니다. 또한 Solr 서버가 접근할 수 있는 다른 서버(예: Redis 명령을 제공하고 Redis 서버에서 리버스 셸을 획득)도 쉽게 악용할 수 있습니다.
이 파일을 공용 웹 서버에 호스팅한 후 대상 사용자에게 이메일로 보낼 수 있습니다. 대상이 웹페이지를 로드하면 JavaScript가 자동으로 Apache Solr 서버를 익스플로잇합니다.
포트 번호는 ?n= URL 매개변수에 제공해야 합니다. 이렇게 하면 여러 대상에게 이메일을 보내고 각 대상에 대해 고유한 리스너를 가질 수 있습니다.