Apache Strust2는 2018년 8월 22일 최신 보안 게시판을 발표했습니다. Apache Struts2에는 고위험 원격 코드 실행 취약점(S2-057/CVE-2018-11776)이 있습니다. 이 취약점은 보안 연구원에 의해 발견되었습니다. Man YueMo가 발견한 Semmle 보안 연구 팀의 정보입니다.
이 취약점은 Struts2 개발 프레임워크에서 XML 구성을 정의하기 위해 네임스페이스 기능을 사용할 때 네임스페이스 값이 설정되지 않고 상위 계층 액션 구성(Action Configuration) 또는 와일드카드에 설정되어 있지 않기 때문에 발생합니다. 네임스페이스가 사용되며 이로 인해 원격 코드가 실행될 수 있습니다. 마찬가지로 url 태그에 value와 action 값을 설정하지 않고 상위 액션을 설정하지 않거나 와일드카드 네임스페이스를 사용하는 경우에도 작성자의 자체 실행 이후 원격 코드 실행이 발생할 수 있습니다. 구축된 환경에서는 취약점이 성공적으로 재현되었으며 echo 명령을 실행할 수 있습니다. !
작성자가 사용하는 환경은 Strust2 버전 2.3.20 및 Strust2입니다. 2.3.34 취약점을 악용하는 방법에는 수치 계산, 팝업 계산기, 명령 에코 등 대략 세 가지가 있습니다.
숫자 계산은 비교적 간단합니다. URL에 %{100+200}을 지정하면 점프하여 계산 결과를 얻을 수 있습니다.
버전 2.3.20 POC는 다음과 같습니다.
두 버전 모두 com.opensymphony.xwork2.dispatcher.HttpServletResponse 객체를 사용합니다. print 명령 실행 후 에코 데이터
버전 2.3.20의 POC는 다음과 같습니다.
버전 2.3.34의 POC는 다음과 같습니다.
공격 후 효과는 다음과 같습니다.
분석 중 취약점이 발생하기 전에 struts.xml 파일을 구성해야 합니다. 이 파일은 대부분 struts2의 핵심 구성 파일입니다.
주의해야 할 두 가지가 있습니다. 첫 번째는 mapper.alwaysSelectFullNamespace = true로 구성되어야 하며, 그렇지 않으면 이 구성의 목적은 NameSpace가 실행될 수 없음을 설정하는 것입니다. 두 번째 결과 태그에서 반환된 유형은 항상 "redirectAction 또는 chain"을 선택합니다. 두 구성 옵션의 값은 작업을 전달하거나 리디렉션할 수 있습니다. 유형에 대한 자세한 내용은 그림을 참조하세요. 아래
구성을 마친 후 동적 분석을 시작합니다. 취약점은
struts2-core.jar!/org/apache/struts2/dispatcher/ServletActionRedirectResult.class
에 있습니다. this.namespace 멤버의 값은 getNamespace() 메서드에서 가져온 다음 이를 통해 URI 문자열을 반환합니다. getUriFromActionMapping();
getUriFromActionMapping을 통해 얻은 값을 tmpLocation 변수에 할당한 후 표현식이 setLocation 메소드에 들어갑니다.
그런 다음 super.execute 메소드를 통해 ServletActionResult가 호출되고, ConditionalParse 메소드가 호출됩니다. 실행 메소드 본문에는 ONGL 실행의 핵심 메소드인translateVariables가 호출됩니다.
얻은 매개변수 값은 TranslateVariables() 메서드로 전달되며, 이는 궁극적으로 OnglTextPaser에서 OGNL 표현식이 실행되도록 합니다.
계산기 팝업 후 얻은 lastFinalLocation 값은 현재 실행 후 핸들입니다. 이 값은 계산기 팝업 후 주소 표시줄에 나타나는 URI인 응답 점프의 작업 주소로 사용됩니다. the browser
to 팝업 계산기의 분석은 여기까지입니다. 다음으로, 명령 실행 에코 결과를 기반으로 한 분석을 살펴보겠습니다. 기본적으로 프로세스는 위와 동일합니다. lastFinalLocation에서 반환된 값은 NULL이며, 이로 인해 제출 후 작업이 수행되지 않았다는 오류가 발생합니다. 302 점프는 여전히 현재 작업이고 반환된 값은 200
원칙을 알고 나서 동료가 Python을 사용하여 exp 감지 스크립트를 구현하십시오.
1. 프레임워크 버전을 최신 공식 버전으로 업그레이드하세요. 코드 보안
3. IDS 규칙 수준의 경우 숫자 계산 및 글머리 기호 계산기를 사용합니다. 반환된 상태 코드는 모두 302이며 위치 점프 필드에는 명령 에코인 경우 반환된 상태 코드가 포함됩니다. 200이고 명령 결과가 출력됩니다.
위 내용은 Struts2-057 RCE 취약점 예제 분석의 두 가지 버전의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!