>운영 및 유지보수 >안전 >Struts2-057 RCE 취약점 예제 분석의 두 가지 버전

Struts2-057 RCE 취약점 예제 분석의 두 가지 버전

WBOY
WBOY앞으로
2023-05-15 18:46:061587검색

머리말

Apache Strust2는 2018년 8월 22일 최신 보안 게시판을 발표했습니다. Apache Struts2에는 고위험 원격 코드 실행 취약점(S2-057/CVE-2018-11776)이 있습니다. 이 취약점은 보안 연구원에 의해 발견되었습니다. Man YueMo가 발견한 Semmle 보안 연구 팀의 정보입니다.

이 취약점은 Struts2 개발 프레임워크에서 XML 구성을 정의하기 위해 네임스페이스 기능을 사용할 때 네임스페이스 값이 설정되지 않고 상위 계층 액션 구성(Action Configuration) 또는 와일드카드에 설정되어 있지 않기 때문에 발생합니다. 네임스페이스가 사용되며 이로 인해 원격 코드가 실행될 수 있습니다. 마찬가지로 url 태그에 value와 action 값을 설정하지 않고 상위 액션을 설정하지 않거나 와일드카드 네임스페이스를 사용하는 경우에도 작성자의 자체 실행 이후 원격 코드 실행이 발생할 수 있습니다. 구축된 환경에서는 취약점이 성공적으로 재현되었으며 echo 명령을 실행할 수 있습니다. !

Vulnerability Exploitation

작성자가 사용하는 환경은 Strust2 버전 2.3.20 및 Strust2입니다. 2.3.34 취약점을 악용하는 방법에는 수치 계산, 팝업 계산기, 명령 에코 등 대략 세 가지가 있습니다.

2.1 수치 계산

숫자 계산은 비교적 간단합니다. URL에 %{100+200}을 지정하면 점프하여 계산 결과를 얻을 수 있습니다.


Struts2-057 两个版本RCE漏洞实例分析

2.2 팝업 계산기

버전 2.3.20 POC는 다음과 같습니다.

Struts2-057 两个版本RCE漏洞实例分析Struts2-057 两个版本RCE漏洞实例分析

2.3.3 버전 4의 참조 POC는 다음과 같습니다.


Struts2-057 两个版本RCE漏洞实例分析Struts2-057 两个版本RCE漏洞实例分析

2.3 명령 echo

두 버전 모두 com.opensymphony.xwork2.dispatcher.HttpServletResponse 객체를 사용합니다. print 명령 실행 후 에코 데이터

버전 2.3.20의 POC는 다음과 같습니다.

Struts2-057 两个版本RCE漏洞实例分析버전 2.3.34의 POC는 다음과 같습니다.

Struts2-057 两个版本RCE漏洞实例分析공격 후 효과는 다음과 같습니다.

Struts2-057 两个版本RCE漏洞实例分析

취약점 분석

분석 중 취약점이 발생하기 전에 struts.xml 파일을 구성해야 합니다. 이 파일은 대부분 struts2의 핵심 구성 파일입니다.

Struts2-057 两个版本RCE漏洞实例分析

주의해야 할 두 가지가 있습니다. 첫 번째는 mapper.alwaysSelectFullNamespace = true로 구성되어야 하며, 그렇지 않으면 이 구성의 목적은 NameSpace가 실행될 수 없음을 설정하는 것입니다. 두 번째 결과 태그에서 반환된 유형은 항상 "redirectAction 또는 chain"을 선택합니다. 두 구성 옵션의 값은 작업을 전달하거나 리디렉션할 수 있습니다. 유형에 대한 자세한 내용은 그림을 참조하세요. 아래

Struts2-057 两个版本RCE漏洞实例分析

구성을 마친 후 동적 분석을 시작합니다. 취약점은

struts2-core.jar!/org/apache/struts2/dispatcher/ServletActionRedirectResult.class

Struts2-057 两个版本RCE漏洞实例分析에 있습니다. this.namespace 멤버의 값은 getNamespace() 메서드에서 가져온 다음 이를 통해 URI 문자열을 반환합니다. getUriFromActionMapping();

Struts2-057 两个版本RCE漏洞实例分析getUriFromActionMapping을 통해 얻은 값을 tmpLocation 변수에 할당한 후 표현식이 setLocation 메소드에 들어갑니다.

Struts2-057 两个版本RCE漏洞实例分析

그런 다음 super.execute 메소드를 통해 ServletActionResult가 호출되고, ConditionalParse 메소드가 호출됩니다. 실행 메소드 본문에는 ONGL 실행의 핵심 메소드인translateVariables가 호출됩니다.

Struts2-057 两个版本RCE漏洞实例分析얻은 매개변수 값은 TranslateVariables() 메서드로 전달되며, 이는 궁극적으로 OnglTextPaser에서 OGNL 표현식이 실행되도록 합니다.

Struts2-057 两个版本RCE漏洞实例分析

Struts2-057 两个版本RCE漏洞实例分析계산기 팝업 후 얻은 lastFinalLocation 값은 현재 실행 후 핸들입니다. 이 값은 계산기 팝업 후 주소 표시줄에 나타나는 URI인 응답 점프의 작업 주소로 사용됩니다. the browser

Struts2-057 两个版本RCE漏洞实例分析 to 팝업 계산기의 분석은 여기까지입니다. 다음으로, 명령 실행 에코 결과를 기반으로 한 분석을 살펴보겠습니다. 기본적으로 프로세스는 위와 동일합니다. lastFinalLocation에서 반환된 값은 NULL이며, 이로 인해 제출 후 작업이 수행되지 않았다는 오류가 발생합니다. 302 점프는 여전히 현재 작업이고 반환된 값은 200

Struts2-057 两个版本RCE漏洞实例分析Struts2-057 两个版本RCE漏洞实例分析원칙을 알고 나서 동료가 Python을 사용하여 exp 감지 스크립트를 구현하십시오.

Struts2-057 两个版本RCE漏洞实例分析

방어 조치

1.   프레임워크 버전을 최신 공식 버전으로 업그레이드하세요. 코드 보안

3.   IDS 규칙 수준의 경우 숫자 계산 및 글머리 기호 계산기를 사용합니다. 반환된 상태 코드는 모두 302이며 위치 점프 필드에는 명령 에코인 경우 반환된 상태 코드가 포함됩니다. 200이고 명령 결과가 출력됩니다.

위 내용은 Struts2-057 RCE 취약점 예제 분석의 두 가지 버전의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제