Exploiting __VIEWSTATE without knowing the secrets
Last updated
Last updated
Jifunze & fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze & fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Usanidi wa bug bounty: jiandikishe kwa Intigriti, jukwaa la bug bounty la premium lililotengenezwa na hackers, kwa hackers! Jiunge nasi kwenye https://go.intigriti.com/hacktricks leo, na uanze kupata zawadi hadi $100,000!
ViewState inatumika kama mekanizma ya kawaida katika ASP.NET kudumisha data ya ukurasa na udhibiti kati ya kurasa za wavuti. Wakati wa uwasilishaji wa HTML ya ukurasa, hali ya sasa ya ukurasa na thamani zinazopaswa kuhifadhiwa wakati wa postback zinahifadhiwa katika nyuzi za base64. Nyuzihizi kisha zinawekwa katika maeneo ya ViewState yaliyofichwa.
Taarifa za ViewState zinaweza kuainishwa kwa mali zifuatazo au mchanganyiko wao:
Base64:
Muundo huu unatumika wakati sifa za EnableViewStateMac
na ViewStateEncryptionMode
zimewekwa kuwa za uongo.
Base64 + MAC (Nambari ya Uthibitishaji wa Ujumbe) Imewezeshwa:
Kuanzishwa kwa MAC kunafanywa kwa kuweka sifa ya EnableViewStateMac
kuwa ya kweli. Hii inatoa uthibitisho wa uaminifu kwa data ya ViewState.
Base64 + Imefichwa:
Uthibitishaji unatumika wakati sifa ya ViewStateEncryptionMode
imewekwa kuwa ya kweli, kuhakikisha usiri wa data ya ViewState.
Picha ni jedwali linaloelezea usanidi tofauti wa ViewState katika ASP.NET kulingana na toleo la mfumo wa .NET. Hapa kuna muhtasari wa maudhui:
Kwa toleo lolote la .NET, wakati MAC na Uthibitishaji vimezimwa, MachineKey haitahitajika, na hivyo hakuna njia inayofaa ya kuibaini.
Kwa matoleo chini ya 4.5, ikiwa MAC imewezeshwa lakini Uthibitishaji haujawezeshwa, MachineKey inahitajika. Njia ya kuibaini MachineKey inaitwa "Blacklist3r."
Kwa matoleo chini ya 4.5, bila kujali ikiwa MAC imewezeshwa au kuzimwa, ikiwa Uthibitishaji umewezeshwa, MachineKey inahitajika. Kuibaini MachineKey ni kazi ya "Blacklist3r - Maendeleo ya Baadaye."
Kwa matoleo 4.5 na juu, mchanganyiko wote wa MAC na Uthibitishaji (iwe zote ni za kweli, au moja ni ya kweli na nyingine ni ya uongo) inahitaji MachineKey. MachineKey inaweza kuibainishwa kwa kutumia "Blacklist3r."
Pia inawezekana kuzima ViewStateMAC kabisa kwa kuweka funguo ya rejista AspNetEnforceViewStateMac
kuwa sifuri katika:
Kutambua Sifa za ViewState
Unaweza kujaribu kutambua ikiwa ViewState ina ulinzi wa MAC kwa kukamata ombi lenye parameter hii kwa kutumia BurpSuite. Ikiwa MAC haijatumika kulinda parameter hiyo unaweza kuitumia kwa kutumia YSoSerial.Net
Wakandarasi wanaweza kuondoa ViewState kutoka kuwa sehemu ya Ombi la HTTP (mtumiaji hatapokea cookie hii). Mtu anaweza kudhani kwamba ikiwa ViewState haipo, utekelezaji wao ni salama kutokana na hatari zozote zinazoweza kutokea zinazohusiana na deserialization ya ViewState. Hata hivyo, hiyo si hali halisi. Ikiwa tuta ongeza ViewState parameter kwenye mwili wa ombi na kutuma payload yetu iliyosajiliwa iliyoundwa kwa kutumia ysoserial, bado tutakuwa na uwezo wa kufikia utendaji wa msimbo kama inavyoonyeshwa katika Case 1.
Ili kuwezesha ViewState MAC kwa ukurasa maalum tunahitaji kufanya mabadiliko yafuatayo kwenye faili maalum la aspx:
Tunaweza pia kufanya hivyo kwa jumla ya programu kwa kuweka kwenye faili la web.config kama inavyoonyeshwa hapa chini:
Kama parameter hii imehifadhiwa na MAC, wakati huu ili kufanikiwa kutekeleza shambulio tunahitaji kwanza funguo iliyotumika.
Unaweza kujaribu kutumia Blacklist3r(AspDotNetWrapper.exe) kutafuta funguo iliyotumika.
Badsecrets ni chombo kingine ambacho kinaweza kubaini machineKeys zinazojulikana. Imeandikwa kwa Python, hivyo tofauti na Blacklist3r, hakuna utegemezi wa Windows. Kwa viewstates za .NET, kuna "python blacklist3r" utility, ambayo ni njia ya haraka zaidi ya kuitumia.
Inaweza kutolewa moja kwa moja na viewstate na generator:
Au, inaweza kuungana moja kwa moja na URL ya lengo na kujaribu kuchonga viewstate kutoka kwa HTML:
Ili kutafuta viewstates zenye udhaifu kwa kiwango kikubwa, pamoja na uainishaji wa subdomain, moduli ya badsecrets
BBOT inaweza kutumika:
Ikiwa umebahatika na funguo imepatikana, unaweza kuendelea na shambulio ukitumia YSoSerial.Net:
Katika hali ambapo _VIEWSTATEGENERATOR
parameter haitumwi na server hu hitaji kutoa --generator
parameter bali hizi:
Katika hii haijulikani kama parameter inalindwa na MAC. Basi, thamani hiyo labda imefungwa na unahitaji Machine Key ili kufunga payload yako ili kutumia udhaifu huo.
Katika kesi hii Blacklist3r moduli iko katika maendeleo...
Kabla ya .NET 4.5, ASP.NET inaweza kubali ___VIEWSTATE
_parameter isiyofungwa kutoka kwa watumiaji hata kama ViewStateEncryptionMode
imewekwa kuwa Daima. ASP.NET inaangalia tu uwepo wa __VIEWSTATEENCRYPTED
parameter katika ombi. Ikiwa mtu atafuta parameter hii, na kutuma payload isiyofungwa, bado itashughulikiwa.
Hivyo basi ikiwa washambuliaji watapata njia ya kupata Machinekey kupitia udhaifu mwingine kama vile file traversal, YSoSerial.Net amri inayotumika katika Kesi 2, inaweza kutumika kufanya RCE kwa kutumia udhaifu wa deserialization wa ViewState.
Ondoa __VIEWSTATEENCRYPTED
parameter kutoka kwa ombi ili kutumia udhaifu wa deserialization wa ViewState, vinginevyo itarudisha kosa la uthibitishaji wa Viewstate MAC na udhaifu utafaulu.
Tunaweza kulazimisha matumizi ya mfumo wa ASP.NET kwa kubainisha parameter iliyo hapa chini ndani ya faili ya web.config kama inavyoonyeshwa hapa chini.
Vinginevyo, hii inaweza kufanywa kwa kubainisha chaguo lililo hapa chini ndani ya parameter ya machineKey
ya faili la web.config.
Kama ilivyo katika awali, thamani imefungwa. Kisha, ili kutuma payload halali, mshambuliaji anahitaji funguo.
Unaweza kujaribu kutumia Blacklist3r(AspDotNetWrapper.exe) kutafuta funguo inayotumika:
Kwa maelezo ya kina zaidi kuhusu IISDirPath na TargetPagePath rejea hapa
Au, kwa kutumia Badsecrets (ikiwa na thamani ya jenereta):
Mara tu funguo halali la Mashine litakapopatikana, hatua inayofuata ni kuunda mzigo wa serialized kwa kutumia YSoSerial.Net
Ikiwa una thamani ya __VIEWSTATEGENERATOR
unaweza kujaribu kutumia parameter --generator
na thamani hiyo na kuacha parameters --path
na --apppath
Kufanikiwa kwa unyakuzi wa udhaifu wa deserialization ya ViewState kutasababisha ombi la nje ya bendi kwa seva inayodhibitiwa na mshambuliaji, ambayo inajumuisha jina la mtumiaji. Aina hii ya unyakuzi inaonyeshwa katika uthibitisho wa dhana (PoC) ambayo inaweza kupatikana kupitia rasilimali iliyo na kichwa "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET". Kwa maelezo zaidi juu ya jinsi mchakato wa unyakuzi unavyofanya kazi na jinsi ya kutumia zana kama Blacklist3r kwa kutambua MachineKey, unaweza kupitia PoC ya Unyakuzi Uliofanikiwa.
Mali ya ViewStateUserKey inaweza kutumika kudhibiti dhidi ya shambulio la CSRF. Ikiwa funguo kama hizo zimewekwa katika programu na tunajaribu kuunda mzigo wa ViewState kwa njia zilizojadiliwa hadi sasa, mzigo hautashughulikiwa na programu. Unahitaji kutumia parameter moja zaidi ili kuunda mzigo kwa usahihi:
Kwa kesi zote za mtihani, ikiwa payload ya ViewState YSoSerial.Net inafanya kazi kwa mafanikio basi seva inajibu na “500 Internal server error” ikiwa na maudhui ya majibu “Taarifa ya hali si halali kwa ukurasa huu na inaweza kuwa imeharibika” na tunapata ombi la OOB.
Angalia maelezo zaidi hapa
Vidokezo vya bug bounty: jiandikishe kwa Intigriti, jukwaa la bug bounty la premium lililotengenezwa na hackers, kwa hackers! Jiunge nasi kwenye https://go.intigriti.com/hacktricks leo, na anza kupata zawadi hadi $100,000!
Jifunze & fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze & fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)