Oyun Bitti: CanYouPwnMe > Kevgir-1
Selam, hafta sonu biraz zaman geçirdim ve VulnHub'da yayınlanan Kevgir boot2root sanal makinesine hızlıca göz gezdirdim. Bu konu, sanal makinedeki bazı harici/dahili güvenlik açıklarının madde madde yazımıdır. Kapsamayacağım vektörler olduğundan eminim ama =>[Δt - iş]*0xc0ff33, vaktimi harcayabileceğim tek şeydi hehehe. Keyfini Çıkarın.
Kaynaklar:
+ CanYouPwnMe - buradan
+ Kevgir VulnHub - buradan
Harici:
Nmap:
Tomcat 8080 Portu:
Benim küçümsediğimi düşünebilirsiniz ancak ne zaman belli belirsiz Tomcat'ten söz edilse, hemen default creds => war file aklıma geliyor. Bu olay, bu durumda çok uzak sayılmaz! 8080'e bir göz atmak, bize Tomcat için varsayılan yükleme ön sayfasını sunar.
Yönetici paneline göz atmak bir kimlik doğrulama pop-upı ile sonuçlanır, bu durumda kimlik bilgileri tomcat/tomcat'tir.
Girişimiz doğrulandıktan sonra, bir war file konuşlandırarak bir JSP shell yükleyebiliriz.
Burada özel bir şey yok, msfvenom ile sadece bir payload oluşturabiliriz. JSPyi, "Jar tf" yi çalıştırdığımızda gerçekten görebiliriz.
Geriye kalan yapılacak tek şey, payloadımızı Tomcat sunucusuna dağıtmak.
Bir kez konuşlandırıldıktan sonra, bir shell'i geri almak için jsp'yi bükebiliriz!
Joomla 8081 Portu:
Joomlanın bu sürümünü Google'da aradığınızda, CVE-2008-3681'e karşı savunmasız olduğu hemen ortaya çıkar. Bu, parola sıfırlama tokeni alanındaki bir giriş doğrulama sorunudur.
Token doğrulama sorgusu şuna benzer:
Anladığım kadarıyla, token alanına tek bir alıntı koyarak, Joomla'nın onu veritabanındaki ilk etkin kullanıcıyla (büyük olasılıkla yönetici ile) eşleştirdiği bir tür karışıklık var. Daha fazla bilgi gerekmediğinden dolayı, Yöneticinin Joomla için olan şifresini hemen değiştirebiliriz.
İşlemi gerçekleştirdiğimizde Joomla yönetici paneline giriş yapabiliriz.
Hemen hemen bir CMS'ye erişmek shell anlamına gelir. Joomla, PHP üzerinde çalışır ve bu yüzden sadece mesele bazı PHP kodlarını enjekte edecek bir yer bulmaktır. Ben, şablon yöneticisini kullanarak "Milkyway" şablonunu değiştirmeyi seçtim.
Payload için Kali'deki webshells paketinde bulunan "php-reverse-shell.php" yi kullandım ama msfvenom ile bir şeyler de üretebilirsiniz.
FTP 25 Portu:
Sırada FTP var. Anonim erişim yok, bu yüzden zayıf kimlik bilgilerini kontrol etmek için hydra'yı çalıştırdım.
Yönetici kullanıcı için FTP klasörü, kullanıcının ana klasörüyle eşlenmiş görünüyor. Ayrıca, sunucunun zayıf bir şekilde kilitlendiğine, kullanıcıların işletim sistemini çaprazlamasına izin verdiğine ve esas olarak işletim sistemi kullanıcı hesabının erişebildiği dosyalara okuma/yazma erişimi sağladığına da dikkat edin.
Kullanıcının muhtemelen uzaktan oturum açmasına izin verildiği için kimlik bilgilerinin de aynı olacağını düşündüm!
Bu bize kullanışlı, tamamen işlevsel bir shell sağlar.
NFS 2049 Portu:
Standart açık NFS paylaşımı. Bu durumda, webroot yedeklemesine sahip bir arşiv var.
Zip arşivinin korunduğu ortaya çıktı, ancak şifreyi kolayca brute force ile kırabiliriz.
Muhtemelen webroot'ta bulacağımız oldukça ilginç şeyler vardır ama bunu doğru şekilde kontrol edecek zamanımız yok. Birkaç hızlı yinelemeli grep, aşağıdaki şifreyi ortaya çıkardı.
Redis 6379 Portu:
Yani Redis, daha önce hiç bakmadığım için oldukça ilginçti. Redis bir bellek içi veri deposudur; dizeler, karmalar, listeler, kümeler, aralık sorguları ile sıralanmış kümeler, bit eşlemler, hiper günlükler ve yarıçap sorguları ile jeo-uzamsal dizinler gibi veri yapılarını destekler. Yerleşik çoğaltma, Lua komut dosyası oluşturma, LRU çıkarma, farklı işlemler ve farklı disk üzerinde kalıcılık düzeylerine sahiptir. Burada bazı örnek kullanım durumlarını görebilirsiniz. Açıkça görülüyor ki, insanlar buna ihtiyaç duyuyor gibi, ancak aynı zamanda çevrimiçi olarak baktığınızda bunun varsayılan olarak çok güvensiz olduğunu göreceksiniz!
Redis sunucusuna bağlanırken bir dizeyi bellekte saklayabilir ve bu dizeyle rastgele bir dosya oluşturma/üzerine yazma için bazı hileler kullanabilirsiniz. Pratikte bunun nasıl yapıldığını görmek için bu gönderiye göz atın. Ayrıca, redis root mmkay olarak çalışıyor, yani bu noktada kutunun sahibi sizsiniz.
Hiçbir kimlik doğrulaması yapılmadığından dolayı sunucuya Redis komut satırı istemcisini kullanarak bağlanabilirsiniz.
Redis'ten aldım, ancak yöntem aşağıda açıklanan yerel privesc ile neredeyse aynı olduğu için burada detaya girmeyeceğim. Bununla uğraşma işlemini gayretli okuyucuya bırakıyorum! Söylemek istediğim şey, sshd_config ayarları nedeniyle SSH genel anahtarı yerleştirmek kadar kolay olmadığı.
Jenkins 9000 Portu:
Maalesef burada shell yok. Bunun bir tuzak olup olmadığından emin değilim veya yakından incelemediğim yerlerden birinde bir şeyi kaçırdım. Buradaki zorluk, girişi atlamanız veya geçerli kimlik bilgilerini almanız gerek gibi duruyor, bunu yaptıktan sonra kolayca bir sistem kabuğu elde edebilirsiniz.
Jenkins'in bu sürümü oldukça güncel, bu utanç verici çünkü Java RMI seri kaldırma zaafiyetini gerçekten denemek istedim (Sanal Makineyi kullanmamım nedenlerinden biri). Bununla birlikte, açıklanmamış, sınırlı bir etki, yetkilendirme atlaması keşfettiğimi düşünüyorum, ancak kendim için çalışmasını sağlayamadım (kendime bir not: daha sonra hallet).
Apache Mina sshd 59894 Portu:
Shell'i olmayan bir tane daha port. Bu Java tabanlı bir ssh sunucusu(Eyvah!), Kimlik doğrulama için özel bir anahtar kullanılmalıdır. Burada dikkat edilmesi gereken bir nokta, anahtarların nerede saklandığını öğrenirseniz, genel anahtarınızı eklemek ve bir shell almak için redis'i kullanmak. Yine çaba sarf eden okuyucu için bir alıştırma.
Low priv -> root
Muhtemelen bunu yargılamanın bu makinede yapılandırılan malzeme miktarına bakılırsa birden fazla yolu vardır, ancak tam olarak araştırmak için zaman yok.
SUID Copy:
SUID binary dosyalarının listesine baktığımızda copy komutunun hemen hemen bir başarısızlık durumunu buluyoruz. Bu komut, işletim sisteminde herhangi bir dosya oluşturmamızı ve üzerine yazmamızı sağlar (bahsettiğim gibi redis'e çok benzer).
Unutulmaması gereken birkaç nokta:
(1) Hedefte dosya sahibi root olacak, ancak grup mevcut kullanıcıya ait olacak ve (2) "--no-preserve" kullanımına dikkat edin, korumalı dosyaların bunu okunması gerekiyor .
Bunu kötüye kullanabileceğimiz yollar; gölge dosyasını yeni bir hesapla güncelleyebilmemiz, sudoers'ı değiştirebilmemiz, ssh anahtarını değiştirebilmemiz + sshd_config +i yeniden başlatmamızı ve benzeri yollardır. Sonunda pasif yaklaşımı seçtim ve cron.hourly'den faydalandım.
NetCat:
Netcat kutuda mevcut olduğundan, cron işimiz için açık bir seçimdir. Burada dikkat edilmesi gereken tek şey, bunun "-e" bayrağı olmayan çöp BSD netcat olmasıdır, yine de bu mknod ile bulamayacağımız bir şey değil (cron işinin tekrar devreye girmesini beklemem bir saate mal oldu! ).
SUIDten SUIDe:
Bunların hepsi iyi ve güzel ama tam olarak uygun değil, eğer kabuğumuzu kaybedersek? İkinci bir örnek olarak /tmp içinde setgid&setuid yapan ve /bin sh'yi başlatan çok basit bir C programı oluşturdum. Sonrasında bu cron işi, yeni oluşturulan binary dosyasında suid bayrağını ayarlamak için kullanılır. Bu çok daha kullanışlıdır ve bize kalıcı bir root kabuğu verir!
Unutulmaması gereken önemli bir diğer ayrıntı, "run-parts" ın bir uzantıya sahip hiçbir şeyi çalıştırmayacağıdır ( evt, ciddn ...), bu nedenle scriptinizi cron.hourly içine koyduğunuzda zeki olun.
Oyun Bitti
Vazgeçtim sanırım, yinelememe rağmen bu, kesinlikle tam ayrıntılı bir konu değil. Çok sayıda shell içeren oldukça ilginç bir meydan okuma oldu. Bir şansım olsaydı, kutu biraz daha iyi patchlenmiş olurdu, Java RMI ve redis lua sandbox çıkışı gibi bazı teknikleri denemek isterdim ama gayet eğlenceliydi!
ORİJİNAL KAYNAK: https://www.fuzzysecurity.com/tutorials/26.html
ÇEVİRMEN: Dolyetyus
Selam, hafta sonu biraz zaman geçirdim ve VulnHub'da yayınlanan Kevgir boot2root sanal makinesine hızlıca göz gezdirdim. Bu konu, sanal makinedeki bazı harici/dahili güvenlik açıklarının madde madde yazımıdır. Kapsamayacağım vektörler olduğundan eminim ama =>[Δt - iş]*0xc0ff33, vaktimi harcayabileceğim tek şeydi hehehe. Keyfini Çıkarın.
Kaynaklar:
+ CanYouPwnMe - buradan
+ Kevgir VulnHub - buradan
Harici:
Nmap:
Kod:
[COLOR="Plum"]# I have highlighted some of the interesting ports for clarity
b33f@CanHazShells ~/CTF/Kevgir-vm# nmap -sSV -A -p- -T5 192.168.23.128
Starting Nmap 7.01 ( https://nmap.org ) at 2016-03-28 04:45 BST
Stats: 0:02:13 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan
NSE Timing: About 99.96% done; ETC: 04:47 (0:00:00 remaining)
Nmap scan report for 192.168.23.128
Host is up (0.00031s latency).
Not shown: 65517 closed ports
PORT STATE SERVICE VERSION
25/tcp open ftp vsftpd 3.0.2
|_smtp-commands: SMTP: EHLO 530 Please login with USER and PASS.
80/tcp open http Apache httpd 2.4.7 ((Ubuntu))
|_http-server-header: Apache/2.4.7 (Ubuntu)
|_http-title: Kevgir VM
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100003 2,3,4 2049/tcp nfs
| 100003 2,3,4 2049/udp nfs
| 100005 1,2,3 48513/tcp mountd
| 100005 1,2,3 51426/udp mountd
| 100021 1,3,4 44215/udp nlockmgr
| 100021 1,3,4 58401/tcp nlockmgr
| 100024 1 40917/udp status
| 100024 1 52978/tcp status
| 100227 2,3 2049/tcp nfs_acl
|_ 100227 2,3 2049/udp nfs_acl
139/tcp open netbios-ssn Samba smbd 3.X (workgroup: CANYOUPWNME)
445/tcp open netbios-ssn Samba smbd 3.X (workgroup: CANYOUPWNME)
1322/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 1024 17:32:b4:85:06:20:b6:90:5b:75:1c:6e:fe:0f:f8:e2 (DSA)
| 2048 53:49:03:32:86:0b:15:b8:a5:f1:2b:8e:75:1b:5a:06 (RSA)
|_ 256 3b:03:cd:29:7b:5e:9f:3b:62:79:ed:dc:82:c7:48:8a (ECDSA)
2049/tcp open nfs 2-4 (RPC #100003)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100003 2,3,4 2049/tcp nfs
| 100003 2,3,4 2049/udp nfs
| 100005 1,2,3 48513/tcp mountd
| 100005 1,2,3 51426/udp mountd
| 100021 1,3,4 44215/udp nlockmgr
| 100021 1,3,4 58401/tcp nlockmgr
| 100024 1 40917/udp status
| 100024 1 52978/tcp status
| 100227 2,3 2049/tcp nfs_acl
|_ 100227 2,3 2049/udp nfs_acl
6379/tcp open redis Redis key-value store
8080/tcp open http Apache Tomcat/Coyote JSP engine 1.1
| http-methods:
|_ Potentially risky methods: PUT DELETE
|_http-open-proxy: Proxy might be redirecting requests
|_http-server-header: Apache-Coyote/1.1
|_http-title: Apache Tomcat
8081/tcp open http Apache httpd 2.4.7 ((Ubuntu))
| http-robots.txt: 14 disallowed entries
| /administrator/ /cache/ /components/ /images/
| /includes/ /installation/ /language/ /libraries/ /media/
|_/modules/ /plugins/ /templates/ /tmp/ /xmlrpc/
|_http-server-header: Apache/2.4.7 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
9000/tcp open http Jetty winstone-2.9
| http-robots.txt: 1 disallowed entry
|_/
|_http-server-header: Jetty(winstone-2.9)
|_http-title: Dashboard [Jenkins]
38940/tcp open mountd 1-3 (RPC #100005)
45523/tcp open unknown
48513/tcp open mountd 1-3 (RPC #100005)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100003 2,3,4 2049/tcp nfs
| 100003 2,3,4 2049/udp nfs
| 100005 1,2,3 48513/tcp mountd
| 100005 1,2,3 51426/udp mountd
| 100021 1,3,4 44215/udp nlockmgr
| 100021 1,3,4 58401/tcp nlockmgr
| 100024 1 40917/udp status
| 100024 1 52978/tcp status
| 100227 2,3 2049/tcp nfs_acl
|_ 100227 2,3 2049/udp nfs_acl
52978/tcp open status 1 (RPC #100024)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100003 2,3,4 2049/tcp nfs
| 100003 2,3,4 2049/udp nfs
| 100005 1,2,3 48513/tcp mountd
| 100005 1,2,3 51426/udp mountd
| 100021 1,3,4 44215/udp nlockmgr
| 100021 1,3,4 58401/tcp nlockmgr
| 100024 1 40917/udp status
| 100024 1 52978/tcp status
| 100227 2,3 2049/tcp nfs_acl
|_ 100227 2,3 2049/udp nfs_acl
53937/tcp open mountd 1-3 (RPC #100005)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100003 2,3,4 2049/tcp nfs
| 100003 2,3,4 2049/udp nfs
| 100005 1,2,3 48513/tcp mountd
| 100005 1,2,3 51426/udp mountd
| 100021 1,3,4 44215/udp nlockmgr
| 100021 1,3,4 58401/tcp nlockmgr
| 100024 1 40917/udp status
| 100024 1 52978/tcp status
| 100227 2,3 2049/tcp nfs_acl
|_ 100227 2,3 2049/udp nfs_acl
58401/tcp open nlockmgr 1-4 (RPC #100021)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100003 2,3,4 2049/tcp nfs
| 100003 2,3,4 2049/udp nfs
| 100005 1,2,3 48513/tcp mountd
| 100005 1,2,3 51426/udp mountd
| 100021 1,3,4 44215/udp nlockmgr
| 100021 1,3,4 58401/tcp nlockmgr
| 100024 1 40917/udp status
| 100024 1 52978/tcp status
| 100227 2,3 2049/tcp nfs_acl
|_ 100227 2,3 2049/udp nfs_acl
59894/tcp open ssh Apache Mina sshd 0.8.0 (protocol 2.0)
1 service unrecognized despite returning data. If you know the service/version, please submit the
following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port45523-TCP:V=7.01%I=7%D=3/28%Time=56F8A8FB%P=i586-pc-linux-gnu%r(DNS
SF:VersionBindReq,36,"Unrecognized\x20protocol:\x20\0\x06\x01\0\0\x01\0\0\
SF:0\0\0\0\x07version\x04bind\0\0\x10\0\x03\n")%r(DNSStatusRequest,24,"Unr
SF:ecognized\x20protocol:\x20\0\0\x10\0\0\0\0\0\0\0\0\0\n");
MAC Address: 00:0C:29:EE:24:AA (VMware)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.0
Network Distance: 1 hop
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
|_nbstat: NetBIOS name: CANYOUPWNME, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb-os-discovery:
| OS: Unix (Samba 4.1.6-Ubuntu)
| Computer name: canyoupwnme
| NetBIOS computer name: CANYOUPWNME
| Domain name:
| FQDN: canyoupwnme
|_ System time: 2016-03-28T06:47:31+03:00
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
|_smbv2-enabled: Server supports SMBv2 protocol
TRACEROUTE
HOP RTT ADDRESS
1 0.31 ms 192.168.23.128
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 148.68 seconds[/COLOR]
Tomcat 8080 Portu:
Benim küçümsediğimi düşünebilirsiniz ancak ne zaman belli belirsiz Tomcat'ten söz edilse, hemen default creds => war file aklıma geliyor. Bu olay, bu durumda çok uzak sayılmaz! 8080'e bir göz atmak, bize Tomcat için varsayılan yükleme ön sayfasını sunar.
Yönetici paneline göz atmak bir kimlik doğrulama pop-upı ile sonuçlanır, bu durumda kimlik bilgileri tomcat/tomcat'tir.
Girişimiz doğrulandıktan sonra, bir war file konuşlandırarak bir JSP shell yükleyebiliriz.
Burada özel bir şey yok, msfvenom ile sadece bir payload oluşturabiliriz. JSPyi, "Jar tf" yi çalıştırdığımızda gerçekten görebiliriz.
Geriye kalan yapılacak tek şey, payloadımızı Tomcat sunucusuna dağıtmak.
Bir kez konuşlandırıldıktan sonra, bir shell'i geri almak için jsp'yi bükebiliriz!
Joomla 8081 Portu:
Joomlanın bu sürümünü Google'da aradığınızda, CVE-2008-3681'e karşı savunmasız olduğu hemen ortaya çıkar. Bu, parola sıfırlama tokeni alanındaki bir giriş doğrulama sorunudur.
Token doğrulama sorgusu şuna benzer:
Kod:
[COLOR="plum"]$db->setQuery('SELECT id FROM #__users WHERE block = 0 AND activation = '.$db->Quote($token));[/COLOR]
Anladığım kadarıyla, token alanına tek bir alıntı koyarak, Joomla'nın onu veritabanındaki ilk etkin kullanıcıyla (büyük olasılıkla yönetici ile) eşleştirdiği bir tür karışıklık var. Daha fazla bilgi gerekmediğinden dolayı, Yöneticinin Joomla için olan şifresini hemen değiştirebiliriz.
İşlemi gerçekleştirdiğimizde Joomla yönetici paneline giriş yapabiliriz.
Hemen hemen bir CMS'ye erişmek shell anlamına gelir. Joomla, PHP üzerinde çalışır ve bu yüzden sadece mesele bazı PHP kodlarını enjekte edecek bir yer bulmaktır. Ben, şablon yöneticisini kullanarak "Milkyway" şablonunu değiştirmeyi seçtim.
Payload için Kali'deki webshells paketinde bulunan "php-reverse-shell.php" yi kullandım ama msfvenom ile bir şeyler de üretebilirsiniz.
FTP 25 Portu:
Sırada FTP var. Anonim erişim yok, bu yüzden zayıf kimlik bilgilerini kontrol etmek için hydra'yı çalıştırdım.
Yönetici kullanıcı için FTP klasörü, kullanıcının ana klasörüyle eşlenmiş görünüyor. Ayrıca, sunucunun zayıf bir şekilde kilitlendiğine, kullanıcıların işletim sistemini çaprazlamasına izin verdiğine ve esas olarak işletim sistemi kullanıcı hesabının erişebildiği dosyalara okuma/yazma erişimi sağladığına da dikkat edin.
Kullanıcının muhtemelen uzaktan oturum açmasına izin verildiği için kimlik bilgilerinin de aynı olacağını düşündüm!
Kod:
[COLOR="plum"]b33f@CanHazShells ~/CTF/Kevgir-vm# ssh -p 1322 [email protected]
G: ,;
E#, : f#i .Gt t j.
E#t .GE .E#t j#W: Ej EW,
E#t j#K; i#W, t .DD. ;K#f E#, E##j
E#GK#f L#D. EK: ,WK. .G#D. E#t E###D.
E##D. :K#Wfff; E#t i#D j#K; E#t E#jG#W;
E##Wi i##WLLLLt E#t j#f ,K#f ,GD; E#t E#t t##f
E#jL#D: .E#L E#tL#i j#Wi E#t E#t E#t :K#E:
E#t ,K#j f#E: E#WW, .G#D: E#t E#t E#KDDDD###i
E#t jD ,WW; E#K: ,K#fK#t E#t E#f,t#Wi,,,
j#t .D#; ED. j###t E#t E#t ;#W:
,; tt t .G#t E#t DWi ,KK:
;; ,;.
by canyoupwn.me
[email protected]'s password:
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.19.0-25-generic i686)
* ********ation: https://help.ubuntu.com/
System information as of Sun Mar 27 22:34:24 EEST 2016
System load: 0.22 Processes: 113
Usage of /: 30.2% of 6.50GB Users logged in: 0
Memory usage: 28% IP address for eth0: 192.168.23.128
Swap usage: 0%
Graph this data and manage this system at:
https://landscape.canonical.com/
167 packages can be updated.
91 updates are security updates.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
admin@canyoupwnme:~$[/COLOR]
Bu bize kullanışlı, tamamen işlevsel bir shell sağlar.
NFS 2049 Portu:
Standart açık NFS paylaşımı. Bu durumda, webroot yedeklemesine sahip bir arşiv var.
Zip arşivinin korunduğu ortaya çıktı, ancak şifreyi kolayca brute force ile kırabiliriz.
Muhtemelen webroot'ta bulacağımız oldukça ilginç şeyler vardır ama bunu doğru şekilde kontrol edecek zamanımız yok. Birkaç hızlı yinelemeli grep, aşağıdaki şifreyi ortaya çıkardı.
Redis 6379 Portu:
Yani Redis, daha önce hiç bakmadığım için oldukça ilginçti. Redis bir bellek içi veri deposudur; dizeler, karmalar, listeler, kümeler, aralık sorguları ile sıralanmış kümeler, bit eşlemler, hiper günlükler ve yarıçap sorguları ile jeo-uzamsal dizinler gibi veri yapılarını destekler. Yerleşik çoğaltma, Lua komut dosyası oluşturma, LRU çıkarma, farklı işlemler ve farklı disk üzerinde kalıcılık düzeylerine sahiptir. Burada bazı örnek kullanım durumlarını görebilirsiniz. Açıkça görülüyor ki, insanlar buna ihtiyaç duyuyor gibi, ancak aynı zamanda çevrimiçi olarak baktığınızda bunun varsayılan olarak çok güvensiz olduğunu göreceksiniz!
Redis sunucusuna bağlanırken bir dizeyi bellekte saklayabilir ve bu dizeyle rastgele bir dosya oluşturma/üzerine yazma için bazı hileler kullanabilirsiniz. Pratikte bunun nasıl yapıldığını görmek için bu gönderiye göz atın. Ayrıca, redis root mmkay olarak çalışıyor, yani bu noktada kutunun sahibi sizsiniz.
Hiçbir kimlik doğrulaması yapılmadığından dolayı sunucuya Redis komut satırı istemcisini kullanarak bağlanabilirsiniz.
Kod:
[COLOR="plum"]b33f@CanHazShells~/CTF/Kevgir-vm# redis-cli -h 192.168.23.128
192.168.23.128:6379> info
# Server
redis_version:3.0.7
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:aa70bcb321ba8313
redis_mode:standalone
os:Linux 3.19.0-25-generic i686
arch_bits:32
multiplexing_api:epoll
gcc_version:4.8.4
process_id:1108
run_id:9cb3c4971d2483f4cd670ab35592ab3c141dc863
tcp_port:6379
uptime_in_seconds:32460
uptime_in_days:0
hz:10
lru_clock:16298994
config_file:/etc/redis/6379.conf
# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:637816
used_memory_human:622.87K
used_memory_rss:8335360
used_memory_peak:637816
used_memory_peak_human:622.87K
used_memory_lua:24576
mem_fragmentation_ratio:13.07
mem_allocator:jemalloc-3.6.0
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1459139229
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
# Stats
total_connections_received:6
total_commands_processed:3
instantaneous_ops_per_sec:0
total_net_input_bytes:191
total_net_output_bytes:3924
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:58152
migrate_cached_sockets:0
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# CPU
used_cpu_sys:28.76
used_cpu_user:12.86
used_cpu_sys_children:0.03
used_cpu_user_children:0.00
# Cluster
cluster_enabled:0
# Keyspace
db0:keys=1,expires=0,avg_ttl=0[/COLOR]
Redis'ten aldım, ancak yöntem aşağıda açıklanan yerel privesc ile neredeyse aynı olduğu için burada detaya girmeyeceğim. Bununla uğraşma işlemini gayretli okuyucuya bırakıyorum! Söylemek istediğim şey, sshd_config ayarları nedeniyle SSH genel anahtarı yerleştirmek kadar kolay olmadığı.
Jenkins 9000 Portu:
Maalesef burada shell yok. Bunun bir tuzak olup olmadığından emin değilim veya yakından incelemediğim yerlerden birinde bir şeyi kaçırdım. Buradaki zorluk, girişi atlamanız veya geçerli kimlik bilgilerini almanız gerek gibi duruyor, bunu yaptıktan sonra kolayca bir sistem kabuğu elde edebilirsiniz.
Jenkins'in bu sürümü oldukça güncel, bu utanç verici çünkü Java RMI seri kaldırma zaafiyetini gerçekten denemek istedim (Sanal Makineyi kullanmamım nedenlerinden biri). Bununla birlikte, açıklanmamış, sınırlı bir etki, yetkilendirme atlaması keşfettiğimi düşünüyorum, ancak kendim için çalışmasını sağlayamadım (kendime bir not: daha sonra hallet).
Apache Mina sshd 59894 Portu:
Shell'i olmayan bir tane daha port. Bu Java tabanlı bir ssh sunucusu(Eyvah!), Kimlik doğrulama için özel bir anahtar kullanılmalıdır. Burada dikkat edilmesi gereken bir nokta, anahtarların nerede saklandığını öğrenirseniz, genel anahtarınızı eklemek ve bir shell almak için redis'i kullanmak. Yine çaba sarf eden okuyucu için bir alıştırma.
Low priv -> root
Muhtemelen bunu yargılamanın bu makinede yapılandırılan malzeme miktarına bakılırsa birden fazla yolu vardır, ancak tam olarak araştırmak için zaman yok.
SUID Copy:
SUID binary dosyalarının listesine baktığımızda copy komutunun hemen hemen bir başarısızlık durumunu buluyoruz. Bu komut, işletim sisteminde herhangi bir dosya oluşturmamızı ve üzerine yazmamızı sağlar (bahsettiğim gibi redis'e çok benzer).
Unutulmaması gereken birkaç nokta:
(1) Hedefte dosya sahibi root olacak, ancak grup mevcut kullanıcıya ait olacak ve (2) "--no-preserve" kullanımına dikkat edin, korumalı dosyaların bunu okunması gerekiyor .
Bunu kötüye kullanabileceğimiz yollar; gölge dosyasını yeni bir hesapla güncelleyebilmemiz, sudoers'ı değiştirebilmemiz, ssh anahtarını değiştirebilmemiz + sshd_config +i yeniden başlatmamızı ve benzeri yollardır. Sonunda pasif yaklaşımı seçtim ve cron.hourly'den faydalandım.
NetCat:
Netcat kutuda mevcut olduğundan, cron işimiz için açık bir seçimdir. Burada dikkat edilmesi gereken tek şey, bunun "-e" bayrağı olmayan çöp BSD netcat olmasıdır, yine de bu mknod ile bulamayacağımız bir şey değil (cron işinin tekrar devreye girmesini beklemem bir saate mal oldu! ).
SUIDten SUIDe:
Bunların hepsi iyi ve güzel ama tam olarak uygun değil, eğer kabuğumuzu kaybedersek? İkinci bir örnek olarak /tmp içinde setgid&setuid yapan ve /bin sh'yi başlatan çok basit bir C programı oluşturdum. Sonrasında bu cron işi, yeni oluşturulan binary dosyasında suid bayrağını ayarlamak için kullanılır. Bu çok daha kullanışlıdır ve bize kalıcı bir root kabuğu verir!
Unutulmaması gereken önemli bir diğer ayrıntı, "run-parts" ın bir uzantıya sahip hiçbir şeyi çalıştırmayacağıdır ( evt, ciddn ...), bu nedenle scriptinizi cron.hourly içine koyduğunuzda zeki olun.
Oyun Bitti
Vazgeçtim sanırım, yinelememe rağmen bu, kesinlikle tam ayrıntılı bir konu değil. Çok sayıda shell içeren oldukça ilginç bir meydan okuma oldu. Bir şansım olsaydı, kutu biraz daha iyi patchlenmiş olurdu, Java RMI ve redis lua sandbox çıkışı gibi bazı teknikleri denemek isterdim ama gayet eğlenceliydi!
ORİJİNAL KAYNAK: https://www.fuzzysecurity.com/tutorials/26.html
ÇEVİRMEN: Dolyetyus