목차
1. 서문
3. SoapFormatter deserialization
3.1 Deserialization 원리 및 사용법
코드 감사 관점에서 취약한 EntryPoint를 찾아 XML로 전달하고, 역직렬화할 수도 있습니다. 이 방법도 매우 일반적입니다. . 이 지점은 XXE 취약점을 유발할 수도 있습니다. 예를 들어 다음 코드는
운영 및 유지보수 안전 SoapFormatter 역직렬화 취약점 예시 분석

SoapFormatter 역직렬화 취약점 예시 분석

May 14, 2023 am 09:07 AM
soapformatter

1. 서문

NetDataContractSerializer는 DataContractSerializer와 마찬가지로 WCF(Windows Communication Foundation) 메시지로 전송된 데이터를 직렬화 및 역직렬화하는 데 사용됩니다. 둘 사이에는 중요한 차이점이 있습니다. NetDataContractSerializer에는 CLR이 포함되어 있으며 추가 정보를 추가하고 CLR 유형에 대한 참조를 저장하여 유형 정밀도를 지원하는 반면 DataContractSerializer는 그렇지 않습니다. 따라서 NetDataContractSerializer는 직렬화 및 역직렬화 측면에서 동일한 CLR 유형이 사용되는 경우에만 사용할 수 있습니다. 개체를 직렬화하려면 WriteObject 또는 Serialize 메서드를 사용하고, XML 스트림을 역직렬화하려면 ReadObject 또는 Deserialize 메서드를 사용하세요. 일부 시나리오에서는 악의적인 XML 스트림을 읽으면 역직렬화 취약점이 발생하여 원격 RCE 공격이 발생합니다. 이 기사의 저자는 이를 원칙 및 코드 감사의 관점에서 소개하고 재현했습니다.

2. SoapFormatterSerialization

SoapFormatter 클래스에 의해 구현된 IFormatter 인터페이스는 .NET 개체와 SOAP 스트림 간 변환에 매우 편리할 수 있는 핵심 Serialize 메서드를 정의하며 데이터를 XML 파일로 저장할 수 있습니다. 공무원은 두 가지 건설 방법을 제공합니다.

SoapFormatter 역직렬화 취약점 예시 분석

문제를 설명하기 위해 이전 사례를 사용하겠습니다. 먼저 TestClass 개체를 정의합니다.

세 개의 멤버를 정의하고 정적 메서드 ClassMethod를 구현하여 프로세스를 시작합니다. 직렬화는 각각 개체 인스턴스를 생성하여 멤버에 값을 할당합니다.

SoapFormatter 역직렬화 취약점 예시 분석

일반적으로 직렬화는 직렬화된 SOAP 스트림을 얻는 데 사용되며 원래 어셈블리는 XML 네임스페이스를 사용하여 유지됩니다. 아래 그림의 TestClass 클래스는 xmlns를 사용하여 생성되어 a1 네임스페이스에 집중합니다.

<envelope>

<body>

<testclass>

<classname>360</classname>

<name>Ivan1ee</name>

<age>18</age>

</testclass>

</body>


</envelope>
로그인 후 복사

3. SoapFormatter deserialization

3.1 Deserialization 원리 및 사용법

SoapFormatter 클래스 deserialization 프로세스는 SOAP 메시지 스트림을 객체로 변환하는 것입니다. 새 객체 생성 이는 Deserialize의 여러 오버로드된 메서드를 호출하여 구현됩니다. 정의를 확인하고 IRemotingFormatter 및 IFormatter 인터페이스가 구현되었는지 확인하세요.

SoapFormatter 역직렬화 취약점 예시 분석

IRemotingFormatter 인터페이스 정의를 살펴보고 IFormatter도 상속하는지 확인하세요.

SoapFormatter 역직렬화 취약점 예시 분석

저자가 새 객체를 생성합니다. Deserialize 메서드를 호출하는 구체적인 구현 코드는 다음을 참조하세요.

SoapFormatter 역직렬화 취약점 예시 분석

TestClass 클래스의 Name 멤버 값은 deserialization 후에 가져옵니다.

SoapFormatter 역직렬화 취약점 예시 분석

3.2 공격 벡터 - ActivitySurrogateSelector

SoapFormatter 클래스 정의의 생성자 외에도 SurrogateSelector 속성이 프록시 직렬화의 장점입니다. 유형의 인스턴스를 역직렬화하기 위해 프록시 객체에 의해 사용자 정의된 메서드가 호출됩니다. 다음과 같이 정의된 ISurrogateSelector 인터페이스를 확인하세요.


SoapFormatter 역직렬화 취약점 예시 분석

직렬화 프록시 유형은 System.Runtime.Serialization.ISerializationSurrogate 인터페이스를 구현해야 하기 때문에 ISerializationSurrogate는 Framework ClassLibrary에 다음과 같이 정의됩니다.


SoapFormatter 역직렬화 취약점 예시 분석

SoapFormatter 역직렬화 취약점 예시 분석

SoapFormatter 역직렬화 취약점 예시 분석

코드는 유형 파서의 IsSerialized 속성이 사용 가능한지 여부를 결정합니다. 사용 가능한 경우 직접 기본 클래스가 반환되며, 파생 클래스인 System.Workflow.ComponentModel이 반환됩니다. Serialization.ActivitySurrogateSelector를 얻은 후 Activator에 전달하여 인스턴스를 생성한 다음 반환합니다. GetObjectData 메서드 본문에서 직렬화된 데이터를 완전히 제어하려면 다음과 같이 정의된 Serialization.ISeralized 인터페이스를 구현해야 합니다.

SoapFormatter 역직렬화 취약점 예시 분석

자세한 소개는 ".NET 고급 코드 감사 강의 2 Json.Net 응답 직렬화 취약점"을 참조하세요. 사용자 정의 역직렬화 클래스를 구현할 때 공격자가 제공하는 PocClass 클래스를 생성자 메서드를 통해 읽습니다.


SoapFormatter 역직렬화 취약점 예시 분석

다음 그림에서는 ISerialized 인터페이스를 구현하기 위한 PayloadClass 클래스를 정의한 다음 GetObjectData 메서드에서 바이트 유형 데이터를 수신하기 위한 일반 List 컬렉션을 선언합니다.

SoapFormatter 역직렬화 취약점 예시 분석

List 컬렉션에 PocClass 개체를 추가하고 선언합니다. IEnumerable 컬렉션 map_type을 사용하는 제네릭은 어셈블리에 의해 반영된 Type을 수신하고 IEnumerable 유형을 반환합니다. 마지막으로 Activator.CreateInstance를 사용하여 인스턴스를 생성하고 이를 e3에 저장합니다. 이때는 열거 컬렉션의 반복자입니다. .

SoapFormatter 역직렬화 취약점 예시 분석위 그림은 페이징 제어 데이터 소스에 변수 e3을 채웁니다.

SoapFormatter 역직렬화 취약점 예시 분석

또한 System.Runtime.Remoting.Channels.AggregateDictionary에서 반환된 유형을 확인하세요. IDictionary를 지원하고 Object DesignerVerb를 인스턴스화하고 원하는 대로 값을 할당합니다. 이 클래스는 주로 MenuCommand 클래스 속성 속성의 값을 채우는 데 사용되며 마지막으로 해시 테이블의 자격을 갖춘 버킷에 값을 할당합니다.

SoapFormatter 역직렬화 취약점 예시 분석

다음으로 컬렉션을 사용하여 데이터 소스 DataSet을 추가합니다. DataSet 및 DataTable 개체는 데이터를 직렬화하고 원격 처리를 지원할 수 있는 System.ComponentModel.MarshalByValueComponent 클래스에서 상속됩니다. 원격 처리를 지원하는 NET 개체입니다. 바이너리 형식으로 처리되고 유지되는 개체입니다.

SoapFormatter 역직렬화 취약점 예시 분석

아래와 같이 DataSet.RemotingFormat 속성 값을 SerializationFormat.Binary로 변경하고 DataSet.CaseSensitive 속성을 false 등으로 변경한 다음 BinaryFormatter를 호출하여 List 컬렉션을 직렬화합니다.

SoapFormatter 역직렬화 취약점 예시 분석

RemotingFormat 속성이 Binary로 지정되므로 BinaryFormatter 포맷터가 도입되고 SurrogateSelector 에이전트 속성이 사용자 정의 MySurrogateSelector 클래스로 지정됩니다. 직렬화 후 SOAP-XML을 얻은 다음 SoapFormatter 개체의 Deserialize 메서드를 사용하여 읽은 파일 콘텐츠의 스트림 데이터를 구문 분석하면 계산기가 성공적으로 팝업됩니다. CVE-2017-8565(Windows PowerShell 원격 코드 실행) 취약점)이 패치되었으며 익스플로잇이 성공하지 못했기 때문에 여기에서는 이에 대해 깊이 논의하지 않겠습니다. 관심 있는 친구들은 스스로 연구할 수 있습니다. 패치에 대한 자세한 내용은 https://support.microsoft.com/zh-cn/help/4025872/windows-powershell-remote-code-execution-vulnerability

4를 참조하세요.4.코드 감사

SoapFormatter 역직렬화 취약점 예시 분석

4.1

SoapFormatter 역직렬화 취약점 예시 분석XML Load SoapFormatter 역직렬화 취약점 예시 분석

코드 감사 관점에서 취약한 EntryPoint를 찾아 XML로 전달하고, 역직렬화할 수도 있습니다. 이 방법도 매우 일반적입니다. . 이 지점은 XXE 취약점을 유발할 수도 있습니다. 예를 들어 다음 코드는

이런 종류의 오염 지점 취약점 공격 비용은 매우 낮습니다. 공격자는 들어오는 문자열 매개 변수 소스만 제어하면 역직렬화 취약점 공격을 쉽게 구현하고 계산기를 띄울 수 있습니다.

4.2 파일 읽기


SoapFormatter 역직렬화 취약점 예시 분석이것은 애플리케이션에서 가져온 코드 조각이며, DeserializeSOAP 메서드에 전달된 경로 변수가 제어 가능한지 여부에만 주의하면 됩니다.

위 내용은 SoapFormatter 역직렬화 취약점 예시 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

운영 및 유지 보수 보안 감사 시스템은 어떤 범주에 속합니까? 운영 및 유지 보수 보안 감사 시스템은 어떤 범주에 속합니까? Mar 05, 2025 pm 03:59 PM

이 기사에서는 운영 보안 감사 시스템 조달을 검토합니다. 전형적인 범주 (하드웨어, 소프트웨어, 서비스), 예산 할당 (Capex, Opex, Project, Training, 비상 사태) 및 적절한 정부 계약 차량 (GSA SCH에 대해 자세히 설명합니다.

운영 및 유지 보수 요원의 직무 안전 책임은 무엇입니까? 운영 및 유지 보수 요원의 직무 안전 책임은 무엇입니까? Mar 05, 2025 pm 03:51 PM

이 기사는 DevOps 엔지니어, 시스템 관리자, IT 운영 직원 및 유지 보수 직원에 대한 중요한 보안 책임을 자세히 설명합니다. SDLC (DevOps)의 모든 단계에 보안을 통합하여 강력한 액세스 C를 구현하는 것을 강조합니다. C

운영 및 유지 보수 안전 엔지니어는 무엇을합니까? 운영 및 유지 보수 안전 엔지니어는 무엇을합니까? Mar 05, 2025 pm 04:00 PM

이 기사는 DevOps, 보안 및 IT 운영 엔지니어의 역할과 필요한 기술을 탐구합니다. 그것은 매일의 작업, 경력 경로 및 각각에 필요한 기술 및 소프트 기술을 자세히 설명하여 자동화의 중요성이 증가 함을 강조합니다.

운영 및 유지 보수 보안 감사 시스템 및 네트워크 보안 감사 시스템의 차이 운영 및 유지 보수 보안 감사 시스템 및 네트워크 보안 감사 시스템의 차이 Mar 05, 2025 pm 04:02 PM

이 기사는 OPSEC (Operations Security) 및 NETEC (Network Security) 감사 시스템을 대조합니다. OPSEC는 내부 프로세스, 데이터 액세스 및 직원 행동에 중점을두고 NETSEC는 네트워크 인프라 및 통신 보안을 중심으로합니다. 열쇠

운영 및 유지 보수 보안이란 무엇입니까? 운영 및 유지 보수 보안이란 무엇입니까? Mar 05, 2025 pm 03:54 PM

이 기사에서는 DevSecops를 검토하여 보안을 소프트웨어 개발 라이프 사이클에 통합합니다. 보안 아키텍처, 자동화, 취약성 관리 및 사고 대응을 포함한 DevOps 보안 엔지니어의 다각적 역할에 대해 자세히 설명합니다.

안전 운영 및 유지 보수 직원의 전망은 무엇입니까? 안전 운영 및 유지 보수 직원의 전망은 무엇입니까? Mar 05, 2025 pm 03:52 PM

이 기사는 성공적인 보안 운영 경력을위한 필수 기술을 검토합니다. 기술 전문 지식 (네트워크 보안, SIEM, 클라우드 플랫폼), 분석 기술 (데이터 분석, 위협 인텔리전스) 및 소프트 스킬 (공동 공동)의 필요성을 강조합니다.

운영 및 유지 보수 보안이란 무엇입니까? 운영 및 유지 보수 보안이란 무엇입니까? Mar 05, 2025 pm 03:58 PM

DevOps는 CI/CD 파이프 라인 내에서 보안 검사를 자동화하여 인프라를 제어 개선을위한 코드로 사용하고 개발 및 보안 팀 간의 협업을 육성하여 운영 보안을 향상시킵니다. 이 접근법은 취약점을 가속화합니다

운영 및 유지 보수 보안의 주요 작업 운영 및 유지 보수 보안의 주요 작업 Mar 05, 2025 pm 03:53 PM

이 기사는 O & M (Operational and Maintenance) 보안을 자세히 설명하며 취약성 관리, 액세스 제어, 보안 모니터링, 데이터 보호 및 물리적 보안을 강조합니다. Proacti를 포함한 주요 책임 및 완화 전략

See all articles