Welcome to Our Website

Java De-serialization 이해

위에서 볼 수 있듯이 코드는”스레드의 예외”main”java 오류를 제공합니다.랭.ClassCastException:testserialization.ExploitDeser 는 testserialization 에 캐스팅 할 수 없습니다.종업원”은 유형 캐스팅이 적절하지 않다는 것을 의미하지만 코드는 여전히 실행됩니다. DeserializeDemo 클래스의 readObject 함수는 ExploitDeser 클래스의 readObject 의 사용자 지정 구현을 실행할 수 있습니다.,

이것은 무엇입은 안전하지 않은 직렬화,여기에는 있지만 유형 주물러 경우에도 직렬화된 데이터의 사용자 정의 클래스로 사용자 정의의 구현 readObject 이 입력으로 제공,그것을 가져 실행으로 다음과 같다.

이것은 무엇인가에 의해 수행 가젯 체인에 의해 사용 ysoserial 및 기타 자바 직렬화 착취 도구들을 위한 체인의 클래스로는 땅으로 사용자 정의의 구현 readObject 을 실행할 수 있는 시스템 레벨의 코드의 일부로 제공됩 사용자 입력이 있습니다.,

Remediation

이제 우리는 Deserialization 이 무엇인지,그리고 그것이 어떻게 악용되는지를 살펴 보았습니다.

정화 우리는 하려고 여기에 대해 논의하는”Look-ahead 클래스의 유효성 검사”어디에 우리는 화이트 클래스 목록 하는 우리가 얻고 싶 deserialize. 예를 들면. 우리의 시나리오에서는 직원 클래스 객체 데이터 만 직렬화 해제 할 수 있기를 기대하며 나머지 경우에는 직렬화를 허용하지 않아야합니다.,

이렇게,무엇을 기본적으로 이 방법 않은,그것을 무시 기능”resolveClass”의 일부인”ObjectInputStream”(시 사용 직렬화)등을 수행한 흰색의 목록 이 목록의 classess 해야 하는 deserialize.

이제 우리는 이론이 끝났으므로 구현에 뛰어들 수 있습니다.,

를 만들 수 있습니다 새로운 클래스”LookAheadObjectInputStream”을 확장하십시 ObjectInputSteam 클래스는 그래서 우리는 무시할 수 있는 회원 기능 resolveClass:

위의 코드:라인.

if (!desc.getName().equals(Employee.class.getName())) {

은 기본적으로 찾고 있는 경우에는 직렬화 콘텐츠를 포함하는 개체의 직원이 다른 클래스 제공 오류”무단으로 직렬화 시도”하지 않도록 합니다.,

이제 최종 수정을 위한 코드”DeserializedDemo”은 다음과 같습니다:

정 DeserializeDemo class

위 코드에서 관찰하고 강조 표시된 코드를 호출하는 대신 ObjectInputStream 클래스,LookAheadObjectInputStream 클래스가 호출되는 무시 resolveClass 방법 중 런타임과를 실행합니다.

이제 악의적 인 것을 지나칠 수 있습니다.,ser 만들어진 파일 이전에 입력으로 직렬화를 관찰 출력:

에 오류가 실행의 직렬화된 데이터의 사용자 정의 등

위에,이 시간에 사용자 정의의 구현 readObject 에서 사용자 지정 클래스”ExploitDeser”하지 않는 실행되는 동안 직렬화., 대신 우리는 우리와 함께 제공된 사용자 지정 오류 메시지”무단으로 직렬화 시도”하에서 설정한 재정의 resolveClass 기능에 LookAheadObjectInputStream 클래스입니다.

이것은 안전하지 않은 역 직렬화를 방지하기 위해 look-ahead 클래스 유효성 검사 방법을 사용하는 매우 간단한 예입니다. 이 아이디어를 둘러싼 광범위한 구현은”serialKiller”라이브러리입니다. 링크 아래에서 발견 할 수 있습니다:

따라서,이로 간주 될 수있는 하나의 솔루션을 완화하는 안전하지 않은 직렬화에 java.,

나는 여전히 나중에 블로깅 할 다른 완화 방법을 조사하고 있습니다.

여러분의 소중한 의견을 제공해주십시오. 그때까지 해킹과 학습을 유지하십시오….

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다