Basic .Net deserialization (ObjectDataProvider gadget, ExpandedWrapper, and Json.Net)
Hierdie pos is toegewy aan die begrip van hoe die gadget ObjectDataProvider uitgebuit word om RCE te verkry en hoe die Serialiseringsbiblioteke Json.Net en xmlSerializer misbruik kan word met daardie gadget.
ObjectDataProvider Gadget
Vanuit die dokumentasie: die ObjectDataProvider-klas wikkel en skep 'n objek wat jy as 'n bindende bron kan gebruik. Ja, dit is 'n vreemde verduideliking, so laat ons kyk wat hierdie klas het wat so interessant is: Hierdie klas maak dit moontlik om 'n willekeurige objek te wikkel, gebruik MethodParameters om willekeurige parameters in te stel, en dan MethodName te gebruik om 'n willekeurige funksie van die willekeurige objek wat gedeclareer is met die willekeurige parameters te roep. Daarom sal die willekeurige objek 'n funksie uitvoer met parameters terwyl dit gedeserialiseer word.
Hoe is dit moontlik
Die System.Windows.Data-naamruimte, gevind binne die PresentationFramework.dll by C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF
, is waar die ObjectDataProvider gedefinieer en geïmplementeer word.
Deur dnSpy te gebruik, kan jy die kode van die klas wat ons belangstel, inspekteer. In die onderstaande afbeelding sien ons die kode van PresentationFramework.dll --> System.Windows.Data --> ObjectDataProvider --> Method name
Soos jy kan sien, wanneer MethodName
ingestel word, word base.Refresh()
geroep, laat ons kyk wat dit doen:
Ok, laat ons voortgaan om te sien wat this.BeginQuery()
doen. BeginQuery
word oorskryf deur ObjectDataProvider
en dit is wat dit doen:
Let daarop dat aan die einde van die kode this.QueryWorke(null)
geroep word. Laat ons kyk wat dit uitvoer:
Let daarop dat hierdie nie die volledige kode van die funksie QueryWorker
is nie, maar dit wys die interessante deel daarvan: Die kode roep this.InvokeMethodOnInstance(out ex);
dit is die lyn waar die gestelde metode uitgevoer word.
As jy wil nagaan dat deur net die MethodName** in te stel dit uitgevoer sal word**, kan jy hierdie kode hardloop:
Merk op dat jy C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationFramework.dll as verwysing moet byvoeg om System.Windows.Data
te laai
ExpandedWrapper
Deur die vorige uitbuiting te gebruik, sal daar gevalle wees waar die object as 'n ObjectDataProvider instansie gedeserializeer word (byvoorbeeld in DotNetNuke kwesbaarheid, deur XmlSerializer te gebruik, is die object gedeserializeer deur GetType
). Dan, sal daar geen kennis van die objektype wat ingesluit is in die ObjectDataProvider instansie wees (Process
byvoorbeeld). Jy kan meer inligting oor die DotNetNuke kwesbaarheid hier vind.
Hierdie klas maak dit moontlik om die objektype van die objekte wat ingesluit is in 'n gegewe instansie te spesifiseer. Dus kan hierdie klas gebruik word om 'n bronobjek (ObjectDataProvider) in 'n nuwe objektype in te sluit en die eienskappe wat ons benodig te voorsien (ObjectDataProvider.MethodName en ObjectDataProvider.MethodParameters). Dit is baie nuttig vir gevalle soos die een wat voorheen aangebied is, omdat ons in staat sal wees om _ObjectDataProvider_ binne 'n ExpandedWrapper instansie te verpak en wanneer dit gedeserializeer word sal hierdie klas die OjectDataProvider objek skep wat die funksie aangedui in MethodName sal uitvoer.
Jy kan hierdie wrapper toets met die volgende kode:
Json.Net
Op die ampertlike webwerf word aangedui dat hierdie biblioteek toelaat om enige .NET objek te serializeer en deserialiseer met Json.NET se kragtige JSON serializer. Dus, as ons die ObjectDataProvider gadget kon deserialiseer, kon ons 'n RCE veroorsaak deur net 'n objek te deserialiseer.
Json.Net voorbeeld
Eerstens, laat ons 'n voorbeeld sien van hoe om 'n objek te serializeer/deserializeer met behulp van hierdie biblioteek:
Misbruik van Json.Net
Deur ysoserial.net te gebruik, het ek die uitbuiting geskep:
In hierdie kode kan jy die uitbuiting toets, hardloop dit net en jy sal sien dat 'n sakrekenaar uitgevoer word:
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Werk jy in 'n cybersekuriteitsmaatskappy? Wil jy jou maatskappy geadverteer sien in HackTricks? of wil jy toegang hê tot die nuutste weergawe van die PEASS of HackTricks aflaai in PDF? Kyk na die INSKRYWINGSPLANNE!
Ontdek Die PEASS-familie, ons versameling eksklusiewe NFT's
Sluit aan by die 💬 Discord-groep of die telegram-groep of volg my op Twitter 🐦@carlospolopm.
Deel jou haktruuks deur PR's in te dien by die hacktricks-opslag en hacktricks-cloud-opslag.
Last updated