조금 늦게 작성하지만.. Apache Struts2 취약점 분석 두번째 포스트입니다. 

취약점 테스트 과정부터, 왜 취약점이 발생하는지 적어보겠습니다.



지난번에 eclipse 까지 설치했습니다. 이제 Apache Struts2 공격코드를 다운받고, 실제 테스트를 진행해봅니다.



https://www.exploit-db.com/exploits/41570/




Eclipse를 키고 Windows - Preference 클릭




Server - Runtime Environmments - Add - Apache Tomcat v7.0 선택 - Next 




Browse - 설치된 Tomcat 7.0 선택 후 확인 - Next




File - Import




WAR file - Next




Run As - Run on Server




만약 제대로 안뜨면, Windows 작업 관리자를 키고 


Tomcat7을 서비스 중지 시킨 후 다시 실행해보세요!!








공격 코드를 실행하면 위 사진과 같이 명령이 실행된 것을 볼 수 있습니다. 





이제 여기부터는 왜 해당 취약점이 발생하는지, 분석한 내용을 적도록 하겠습니다. 


먼저 공격코드부터 살펴보도록 하겠습니다. 




페이로드의 가장 첫줄에는 "multipart/form-data"라는 문구가 들어갑니다.


왜 이렇게 적었는지, 취약점 발생 부분을 살펴보시면 알 수 있습니다.


(아래에 나옵니다)


그리고 해당 페이로드를 Content-Type에 저장합니다. 


HTTP Request Header의 Content-Type이 변조되어 발생하는 것 같습니다.





해당 공격코드를 실행하면, Content-Type에 페이로드가 그대로 들어가는 것을 확인 할 수 있습니다.



그럼, 왜 Content-Type에 들어간 내용이 실행되고 명령 결과를 출력하는지, 알아보겠습니다.








여기서, 왜 공격코드 맨 앞줄에 multipart/form-data 를 입력했는지 알 수 있습니다.


if 문을 통과하기 위해서, content-type을 맞춰준것입니다.










페이로드가 들어간 루틴을 쭉쭉 따라가다보면, 결국 findText라는 함수를 만나게 됩니다.


참고 : https://struts.apache.org/maven/struts2-core/apidocs/com/opensymphony/xwork2/util/LocalizedTextUtil.html


이 함수를 찾아보니까 이 함수는 여러 기능 이외에도 OGNL표현식으로 들어올 경우 


이를 실행하는 기능도 있습니다. 해당 부분에 때문에 명령이 실행되었다고 보시면 될 것 같습니다.




읽어주셔서 감사합니다.


  1. 2019.01.16 12:51

    비밀댓글입니다

    • 2019.02.03 12:14

      비밀댓글입니다


 안녕하세요! 오늘은 얼마전 KUCIS 영남권 발표에서 다뤘던 Apache Struts2 취약점[CVE-2017-5638]에 대한 내용을 적어보려합니다. 2017년 3월, 오픈소스 Apache Struts2 취약점을 이용한 공격이 다수 확산되었습니다. 2013년에도, Apache Struts2 공격 툴에 의한 공격으로 대기업, 게임사, 통신사, 금융사, 인터넷기업 등에서 사이트 접속 장애 및 정보유출 피해가 발생했습니다. 당시 한국인터넷진흥원에서도 역시 Apache Struts2 보안 취약점을 악용한 신종 해킹 주의 및 업데이트를 권고했었습니다.






*Apache Struts2 취약점 개요


최근 Apache Struts2 취약점을 이용하여 원격 코드 실행이 가능한 취약점 (CVE-2017-5638)이 발견되었다. 

해당 취약점은 Jakarta Multipart 파서를 기반으로 한 파일 업로드를 수행할 때 

HTTP Request Header의 Content-Type을 변조해 원격 코드 실행을 가능하게 한다. 

중국 해커 집단이 해당 취약점을이용한 공격을 시행할 예정이라는기사가 보도되면서더욱 더 이슈가 되었다.



 HTTP Request Header입니다. 여기서 Content-Type을 변조하여 원격 코드를 실행하는 취약점입니다.

Content-Type에 OGNL 표현식을 사용함으로써 해당 부분이 실행되어 원격 코드가 실행되었습니다.



*Apache Struts2란?


 Java EE(Java Platform, Enterprise Edition) 웹 애플리케이션을 개발하기 위한 오픈 소스 프레임워크.




*OGNL 표현식이란?


Object Graph Navigation Language의 약어. 

자바에서 지원되는 전체 범위보다 간단한 표현식을 사용하여 속성을 가져오고 설정을 허용하도록 한다. 

자바 클래스의 메소드를 실행하는 Java 용 EL(오픈소스 표현 언어).  

OGNL 스크립트를 사용하여 JAVA 클래스 메소드 실행과 간단한 배열 조작이 가능하다.


%{       }      =     <%       %>

 OGNL                        JSP     







*Apache Struts2 취약점 분석 환경 구축



1. Java 설치


http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html



홈페이지에서 Java Downloads 클릭!




Java SE Downloads 클릭



Accept License Agreement 선택 후, 운영체제에 맞는 것 선택!




환경변수를 설정해야합니다.


제어판 - 시스템 및 보안 - 시스템 - 고급시스템 설정 




시스템변수를 추가합니다.

변수 이름에는 JAVA_HOME

변수 값에는 Java가 설치된 경로를 위와같이 입력합니다.

변수 값에 맨마지막 ; 는 빼주셔야합니다.





시스템 변수 편집합니다.

변수 값에 ;%JAVA_HOME%\bin; 입력 후 확인을 누릅니다.






javac 명령어를 통해 설치를 확인합니다.




2. Apache Tomcat 설치


https://tomcat.apache.org/download-70.cgi



홈페이지에 접속 후 다운로드를 받습니다.




다운로드 받은 파일에서 Tomcat Setup을 실행합니다.





3. Eclipse 설치


http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/neon3




홈페이지에 들어가서 파일을 다운로드 받고 설치합니다. 





4. Struts2 설치




이제 분석을 위한 환경구축은 끝났습니다.


[CVE-2017-5638] Apache Struts2 취약점 분석(2)에서는 


실제 분석을 했던 순서대로 이야기를 해보겠습니다.


취약점이 발생하는 원인에 대해서도 살펴보겠습니다!!!





끝! 다음편으로~

+ Recent posts