hacktricks/crypto-and-stego/padding-oracle-priv.md

8.4 KiB

Oracle ya Padding

Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalamu na htARTE (Mtaalamu wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

CBC - Cipher Block Chaining

Katika modi ya CBC block iliyotangulia iliyofichwa hutumiwa kama IV ya XOR na block inayofuata:

https://defuse.ca/images/cbc_encryption.png

Kufichua CBC operesheni za kinyume hufanywa:

https://defuse.ca/images/cbc_decryption.png

Tambua jinsi inavyohitajika kutumia ufunguo wa kufichua na IV.

Kupangilia Ujumbe

Kwa kuwa kufichua kunafanywa katika blocks za saizi iliyowekwa, padding mara nyingi inahitajika katika block ya mwisho ili kukamilisha urefu wake.
Kawaida PKCS7 hutumiwa, ambayo inazalisha padding inayorudia idadi ya bytes inayohitajika kukamilisha block. Kwa mfano, ikiwa block ya mwisho inakosa bytes 3, padding itakuwa \x03\x03\x03.

Tuangalie mifano zaidi na blocks 2 zenye urefu wa 8bytes:

byte #0 byte #1 byte #2 byte #3 byte #4 byte #5 byte #6 byte #7 byte #0 byte #1 byte #2 byte #3 byte #4 byte #5 byte #6 byte #7
P A S S W O R D 1 2 3 4 5 6 0x02 0x02
P A S S W O R D 1 2 3 4 5 0x03 0x03 0x03
P A S S W O R D 1 2 3 0x05 0x05 0x05 0x05 0x05
P A S S W O R D 0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08

Tambua jinsi katika mfano wa mwisho block ya mwisho ilikuwa kamili hivyo nyingine ilizalishwa tu na padding.

Oracle ya Padding

Wakati programu inafichua data iliyofichwa, kwanza itaifichua data; kisha itaondoa padding. Wakati wa kusafisha padding, ikiwa padding isiyo halali inachochea tabia inayoweza kugundulika, una udhaifu wa oracle ya padding. Tabia inayoweza kugundulika inaweza kuwa kosa, ukosefu wa matokeo, au jibu polepole.

Ukigundua tabia hii, unaweza kufichua data iliyofichwa na hata kuficha cleartext yoyote.

Jinsi ya kutumia

Unaweza kutumia https://github.com/AonCyberLabs/PadBuster kudukua aina hii ya udhaifu au tu fanya

sudo apt-get install padbuster

Ili kujaribu kama kuki ya tovuti ina mapungufu unaweza kujaribu:

perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="

Ukodishaji 0 maana yake base64 inatumika (ingawa nyingine zinapatikana, angalia menyu ya msaada).

Unaweza pia kutumia udhaifu huu kwa kuficha data mpya. Kwa mfano, fikiria maudhui ya kuki ni "mtumiaji=JinaLanguLaMtumiaji", basi unaweza kubadilisha kuwa "_mtumiaji=msimamizi_" na kuinua mamlaka ndani ya programu. Unaweza pia kufanya hivyo ukitumia paduster ukielekeza kipengele cha -plaintext:

perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator"

Ikiwa tovuti ina kasoro, padbuster itajaribu kiotomatiki kugundua wakati kosa la padding linatokea, lakini unaweza pia kuashiria ujumbe wa kosa kwa kutumia parameter -error.

perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding"

Nadharia

Kwa muhtasari, unaweza kuanza kufichua data iliyofichwa kwa kudhani thamani sahihi ambayo inaweza kutumika kuunda paddings tofauti. Kisha, shambulio la padding oracle litianza kufichua herufi kutoka mwisho hadi mwanzo kwa kudhani ni thamani sahihi ambayo inaunda padding ya 1, 2, 3, nk.

Fikiria una maandishi yaliyofichwa ambayo yanachukua vikundi 2 vilivyoundwa na herufi kutoka E0 hadi E15.
Ili kufichua kikundi cha mwisho (E8 hadi E15), kikundi nzima hupitia "ufichuaji wa block cipher" ukizalisha herufi za kati I0 hadi I15.
Hatimaye, kila herufi ya kati ina XORed na herufi zilizofichwa hapo awali (E0 hadi E7). Hivyo:

  • C15 = D(E15) ^ E7 = I15 ^ E7
  • C14 = I14 ^ E6
  • C13 = I13 ^ E5
  • C12 = I12 ^ E4
  • ...

Sasa, Inawezekana kurekebisha E7 hadi C15 iwe 0x01, ambayo pia itakuwa padding sahihi. Hivyo, katika kesi hii: \x01 = I15 ^ E'7

Hivyo, kwa kupata E'7, ni inawezekana kuhesabu I15: I15 = 0x01 ^ E'7

Ambayo inaruhusu sisi kuhesabu C15: C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7

Kwa kujua C15, sasa ni inawezekana kuhesabu C14, lakini wakati huu kwa kubadilisha padding \x02\x02.

BF hii ni ngumu kama ile ya awali kwa kuwa inawezekana kuhesabu **E''15 ambayo thamani yake ni 0x02: E''7 = \x02 ^ I15 hivyo ni muhimu tu kupata E'14 ambayo inazalisha C14 sawa na 0x02.
Kisha, fanya hatua sawa kufichua C14: C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6

Fuata mnyororo huu hadi ufichue maandishi yote yaliyofichwa.

Kugundua udhaifu

Jisajili na akaunti na ingia kwa akaunti hiyo.
Ikiwa unaingia mara nyingi na daima unapata cookie ile ile, kuna uwezekano kitu kibaya katika programu. Cookie inayotumwa inapaswa kuwa ya kipekee kila wakati unapoingia. Ikiwa cookie ni ile ile daima, itakuwa inawezekana daima kuwa halali na hakutakuwa na njia ya kuitengua.

Sasa, ikiwa jaribu kurekebisha cookie, utaona unapata kosa kutoka kwa programu.
Lakini ikiwa unatumia BF ya padding (kutumia padbuster kwa mfano) unaweza kupata cookie nyingine halali kwa mtumiaji tofauti. Hali hii inaweza kuwa na uwezekano mkubwa wa kuwa na udhaifu wa padbuster.

Marejeo

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks: