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

13 KiB

Padding Oracle

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

{% embed url="https://websec.nl/" %}

CBC - Cipher Block Chaining

In CBC mode the previous encrypted block is used as IV to XOR with the next block:

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

To decrypt CBC the opposite operations are done:

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

Notice how it's needed to use an encryption key and an IV.

Message Padding

As the encryption is performed in fixed size blocks, padding is usually needed in the last block to complete its length.
Usually PKCS7 is used, which generates a padding repeating the number of bytes needed to complete the block. For example, if the last block is missing 3 bytes, the padding will be \x03\x03\x03.

Let's look at more examples with a 2 blocks of length 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

Note how in the last example the last block was full so another one was generated only with padding.

Padding Oracle

рдЬрдм рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдЧрд╛; рдлрд┐рд░ рдпрд╣ рдкреИрдбрд┐рдВрдЧ рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛ред рдкреИрдбрд┐рдВрдЧ рдХреА рд╕рдлрд╛рдИ рдХреЗ рджреМрд░рд╛рди, рдпрджрд┐ рдПрдХ рдЕрдорд╛рдиреНрдп рдкреИрдбрд┐рдВрдЧ рдПрдХ рдкрд╣рдЪрд╛рдирдиреЗ рдпреЛрдЧреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреА рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкреИрдбрд┐рдВрдЧ рдУрд░реЗрдХрд▓ рднреЗрджреНрдпрддрд╛ рд╣реИред рдкрд╣рдЪрд╛рдирдиреЗ рдпреЛрдЧреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдПрдХ рддреНрд░реБрдЯрд┐, рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдХрдореА, рдпрд╛ рдПрдХ рдзреАрдореА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рдХрд┐рд╕реА рднреА рд╕реНрдкрд╖реНрдЯ рдкрд╛рда рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

How to exploit

You could use https://github.com/AonCyberLabs/PadBuster to exploit this kind of vulnerability or just do

sudo apt-get install padbuster

рдХрд┐рд╕реА рд╕рд╛рдЗрдЯ рдХреЗ рдХреБрдХреА рдХреА рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

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

Encoding 0 рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ base64 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдорджрдж рдореЗрдиреВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ)ред

рдЖрдк рдЗрд╕ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирдП рдбреЗрдЯрд╛ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдХреБрдХреА рдХреА рд╕рд╛рдордЧреНрд░реА "user=MyUsername" рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ "_user=administrator_" рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕реЗ paduster рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ -plaintext рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

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

рдпрджрд┐ рд╕рд╛рдЗрдЯ рдХрдордЬреЛрд░ рд╣реИ padbuster рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ рдХрд┐ рдкреИрдбрд┐рдВрдЧ рддреНрд░реБрдЯрд┐ рдХрдм рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк -error рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рднреА рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рд╕рд┐рджреНрдзрд╛рдВрдд

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЖрдк рд╕рднреА рд╡рд┐рднрд┐рдиреНрди рдкреИрдбрд┐рдВрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рд╕рд╣реА рдорд╛рдиреЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдХрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░, рдкреИрдбрд┐рдВрдЧ рдСрд░реЗрдХрд▓ рдЕрдЯреИрдХ рдЕрдВрдд рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ рд╕рд╣реА рдорд╛рди рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реБрдП рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛ рдЬреЛ 1, 2, 3, рдЖрджрд┐ рдХреА рдкреИрдбрд┐рдВрдЧ рдмрдирд╛рддрд╛ рд╣реИред

рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдЯреЗрдХреНрд╕реНрдЯ рд╣реИ рдЬреЛ 2 рдмреНрд▓реЙрдХреНрд╕ рдореЗрдВ рдлреИрд▓рд╛ рд╣реБрдЖ рд╣реИ рдЬреЛ E0 рд╕реЗ E15 рддрдХ рдХреЗ рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдмрдирд╛ рд╣реИред
рдЕрдВрддрд┐рдо рдмреНрд▓реЙрдХ (E8 рд╕реЗ E15) рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреВрд░рд╛ рдмреНрд▓реЙрдХ "рдмреНрд▓реЙрдХ рд╕рд┐рдлрд░ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдордзреНрдпрд╡рд░реНрддреА рдмрд╛рдЗрдЯреНрд╕ I0 рд╕реЗ I15 рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдордзреНрдпрд╡рд░реНрддреА рдмрд╛рдЗрдЯ рдХреЛ рдкрд┐рдЫрд▓реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдмрд╛рдЗрдЯреНрд╕ (E0 рд╕реЗ E7) рдХреЗ рд╕рд╛рде XORed рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ:

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

рдЕрдм, рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЖрдк E7 рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ рдЬрдм рддрдХ C15 0x01 рди рд╣реЛ, рдЬреЛ рдПрдХ рд╕рд╣реА рдкреИрдбрд┐рдВрдЧ рднреА рд╣реЛрдЧреАред рддреЛ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ: \x01 = I15 ^ E'7

рддреЛ, E'7 рдХреЛ рдЦреЛрдЬрдХрд░, I15 рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ: I15 = 0x01 ^ E'7

рдЬреЛ рд╣рдореЗрдВ C15 рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7

C15 рдХреЛ рдЬрд╛рдирдХрд░, рдЕрдм C14 рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рдкреИрдбрд┐рдВрдЧ \x02\x02 рдХреЛ рдмреНрд░реВрдЯ-рдлреЛрд░реНрд╕ рдХрд░рддреЗ рд╣реБрдПред

рдпрд╣ BF рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрдЯрд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ E''15 рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдорд╛рди 0x02 рд╣реИ: E''7 = \x02 ^ I15 рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ E'14 рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ C14 рдХреЛ 0x02 рдХреЗ рдмрд░рд╛рдмрд░ рдмрдирд╛рддрд╛ рд╣реИред
рдлрд┐рд░, C14 рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╣реА рдХрджрдо рдЙрдард╛рдПрдВ: C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6

рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ рдЬрдм рддрдХ рдЖрдк рдкреВрд░реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рди рдХрд░ рд▓реЗрдВред

рднреЗрджреНрдпрддрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛

рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдФрд░ рдЦрд╛рддрд╛ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕ рдЦрд╛рддреЗ рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВред
рдпрджрд┐ рдЖрдк рдХрдИ рдмрд╛рд░ рд▓реЙрдЧ рдЗрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рдХреБрдХреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрднрд╡рддрдГ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреБрдЫ рдЧрд▓рдд рд╣реИред рдХреБрдХреА рд╣рд░ рдмрд╛рд░ рд▓реЙрдЧ рдЗрди рдХрд░рддреЗ рд╕рдордп рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдХреБрдХреА рд╣рдореЗрд╢рд╛ рдПрдХ рд╕реА рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрднрд╡рддрдГ рд╣рдореЗрд╢рд╛ рдорд╛рдиреНрдп рд╣реЛрдЧреА рдФрд░ рдЗрд╕реЗ рдЕрдорд╛рдиреНрдп рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЕрдм, рдпрджрд┐ рдЖрдк рдХреБрдХреА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред
рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдкреИрдбрд┐рдВрдЧ рдХреЛ BF рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП padbuster рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП) рддреЛ рдЖрдк рдПрдХ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рдХреБрдХреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдкрд░рд┐рджреГрд╢реНрдп padbuster рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИред

рд╕рдВрджрд░реНрдн

{% embed url="https://websec.nl/" %}

{% hint style="success" %} AWS рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ:HackTricks Training AWS Red Team Expert (ARTE)
GCP рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
{% endhint %}