# Padding Oracle {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** πŸ’¬ [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %} ## 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](https://defuse.ca/images/cbc\_encryption.png) To decrypt CBC the **opposite** **operations** are done: ![https://defuse.ca/images/cbc\_decryption.png](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 When an application decrypts encrypted data, it will first decrypt the data; then it will remove the padding. During the cleanup of the padding, if an **invalid padding triggers a detectable behaviour**, you have a **padding oracle vulnerability**. The detectable behaviour can be an **error**, a **lack of results**, or a **slower response**. If you detect this behaviour, you can **decrypt the encrypted data** and even **encrypt any cleartext**. ### How to exploit You could use [https://github.com/AonCyberLabs/PadBuster](https://github.com/AonCyberLabs/PadBuster) to exploit this kind of vulnerability or just do ``` sudo apt-get install padbuster ``` Π©ΠΎΠ± ΠΏΠ΅Ρ€Π΅Π²Ρ–Ρ€ΠΈΡ‚ΠΈ, Ρ‡ΠΈ Π²Ρ€Π°Π·Π»ΠΈΠ²ΠΈΠΉ ΠΊΡƒΠΊΡ– сайту, Π²ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ спробувати: ```bash perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" ``` **ΠšΠΎΠ΄ΡƒΠ²Π°Π½Π½Ρ 0** ΠΎΠ·Π½Π°Ρ‡Π°Ρ”, Ρ‰ΠΎ **base64** Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡ”Ρ‚ΡŒΡΡ (Π°Π»Π΅ доступні ΠΉ Ρ–Π½ΡˆΡ–, ΠΏΠ΅Ρ€Π΅Π²Ρ–Ρ€Ρ‚Π΅ мСню Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΈ). Π’ΠΈ Ρ‚Π°ΠΊΠΎΠΆ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ **Π·Π»ΠΎΠ²ΠΆΠΈΠ²Π°Ρ‚ΠΈ Ρ†Ρ–Ρ”ΡŽ Π²Ρ€Π°Π·Π»ΠΈΠ²Ρ–ΡΡ‚ΡŽ для ΡˆΠΈΡ„Ρ€ΡƒΠ²Π°Π½Π½Ρ Π½ΠΎΠ²ΠΈΡ… Π΄Π°Π½ΠΈΡ…. Наприклад, ΡƒΡΠ²Ρ–Ρ‚ΡŒ, Ρ‰ΠΎ вміст cookie Ρ” "**_**user=MyUsername**_**", Ρ‚ΠΎΠ΄Ρ– Π²ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·ΠΌΡ–Π½ΠΈΡ‚ΠΈ ΠΉΠΎΠ³ΠΎ Π½Π° "\_user=administrator\_" Ρ– ΠΏΡ–Π΄Π²ΠΈΡ‰ΠΈΡ‚ΠΈ ΠΏΡ€ΠΈΠ²Ρ–Π»Π΅Ρ— Π² Π΄ΠΎΠ΄Π°Ρ‚ΠΊΡƒ. Π’ΠΈ Ρ‚Π°ΠΊΠΎΠΆ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ Ρ†Π΅, Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡŽΡ‡ΠΈ `paduster`, Π²ΠΊΠ°Π·ΡƒΡŽΡ‡ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -plaintext**: ```bash perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator" ``` Π―ΠΊΡ‰ΠΎ сайт Π²Ρ€Π°Π·Π»ΠΈΠ²ΠΈΠΉ, `padbuster` Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ спробує Π·Π½Π°ΠΉΡ‚ΠΈ, ΠΊΠΎΠ»ΠΈ Π²ΠΈΠ½ΠΈΠΊΠ°Ρ” ΠΏΠΎΠΌΠΈΠ»ΠΊΠ° заповнСння, Π°Π»Π΅ Π²ΠΈ Ρ‚Π°ΠΊΠΎΠΆ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΊΠ°Π·Π°Ρ‚ΠΈ повідомлСння ΠΏΡ€ΠΎ ΠΏΠΎΠΌΠΈΠ»ΠΊΡƒ, Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡŽΡ‡ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ **-error**. ```bash perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding" ``` ### ВСорія Π£ **Ρ€Π΅Π·ΡŽΠΌΠ΅**, Π²ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡Π°Ρ‚ΠΈ Ρ€ΠΎΠ·ΡˆΠΈΡ„Ρ€ΠΎΠ²ΡƒΠ²Π°Ρ‚ΠΈ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Ρ– Π΄Π°Π½Ρ–, Π²Π³Π°Π΄ΡƒΡŽΡ‡ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ– значСння, які ΠΌΠΎΠΆΠ½Π° використовувати для створСння всіх **Ρ€Ρ–Π·Π½ΠΈΡ… заповнСнь**. ΠŸΠΎΡ‚Ρ–ΠΌ Π°Ρ‚Π°ΠΊΠ° Π½Π° заповнСння Oracle ΠΏΠΎΡ‡Π½Π΅ Ρ€ΠΎΠ·ΡˆΠΈΡ„Ρ€ΠΎΠ²ΡƒΠ²Π°Ρ‚ΠΈ Π±Π°ΠΉΡ‚ΠΈ Π· кінця Π½Π° ΠΏΠΎΡ‡Π°Ρ‚ΠΎΠΊ, Π²Π³Π°Π΄ΡƒΡŽΡ‡ΠΈ, якС Π±ΡƒΠ΄Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅ значСння, Ρ‰ΠΎ **ΡΡ‚Π²ΠΎΡ€ΡŽΡ” заповнСння 1, 2, 3 Ρ‚ΠΎΡ‰ΠΎ**. ![](<../.gitbook/assets/image (561).png>) Π£ΡΠ²Ρ–Ρ‚ΡŒ, Ρ‰ΠΎ Ρƒ вас Ρ” дСякий Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠΉ тСкст, який Π·Π°ΠΉΠΌΠ°Ρ” **2 Π±Π»ΠΎΠΊΠΈ**, сформовані Π±Π°ΠΉΡ‚Π°ΠΌΠΈ Π· **E0 Π΄ΠΎ E15**.\ Π©ΠΎΠ± **Ρ€ΠΎΠ·ΡˆΠΈΡ„Ρ€ΡƒΠ²Π°Ρ‚ΠΈ** **останній** **Π±Π»ΠΎΠΊ** (**E8** Π΄ΠΎ **E15**), вСсь Π±Π»ΠΎΠΊ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· "Π΄Π΅ΡˆΠΈΡ„Ρ€ΡƒΠ²Π°Π½Π½Ρ Π±Π»ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΡˆΠΈΡ„Ρ€Ρƒ", Π³Π΅Π½Π΅Ρ€ΡƒΡŽΡ‡ΠΈ **ΠΏΡ€ΠΎΠΌΡ–ΠΆΠ½Ρ– Π±Π°ΠΉΡ‚ΠΈ I0 Π΄ΠΎ I15**.\ ΠΠ°Ρ€Π΅ΡˆΡ‚Ρ–, ΠΊΠΎΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΌΡ–ΠΆΠ½ΠΈΠΉ Π±Π°ΠΉΡ‚ **XOR'ΠΈΡ‚ΡŒΡΡ** Π· ΠΏΠΎΠΏΠ΅Ρ€Π΅Π΄Π½Ρ–ΠΌΠΈ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠΌΠΈ Π±Π°ΠΉΡ‚Π°ΠΌΠΈ (E0 Π΄ΠΎ E7). ΠžΡ‚ΠΆΠ΅: * `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`** **ΠŸΡ€ΠΎΠ΄ΠΎΠ²ΠΆΡƒΠΉΡ‚Π΅ Ρ†Π΅ΠΉ Π»Π°Π½Ρ†ΡŽΠ³, ΠΏΠΎΠΊΠΈ Π½Π΅ Ρ€ΠΎΠ·ΡˆΠΈΡ„Ρ€ΡƒΡ”Ρ‚Π΅ вСсь Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠΉ тСкст.** ### ВиявлСння вразливості ЗарСєструйтСся Ρ‚Π° ΡƒΠ²Ρ–ΠΉΠ΄Ρ–Ρ‚ΡŒ Π· Ρ†ΠΈΠΌ ΠΎΠ±Π»Ρ–ΠΊΠΎΠ²ΠΈΠΌ записом.\ Π―ΠΊΡ‰ΠΎ Π²ΠΈ **Π²Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Π±Π°Π³Π°Ρ‚ΠΎ Ρ€Π°Π·Ρ–Π²** Ρ– Π·Π°Π²ΠΆΠ΄ΠΈ ΠΎΡ‚Ρ€ΠΈΠΌΡƒΡ”Ρ‚Π΅ **ΠΎΠ΄ΠΈΠ½ Ρ– Ρ‚ΠΎΠΉ ΠΆΠ΅ cookie**, ΠΉΠΌΠΎΠ²Ρ–Ρ€Π½ΠΎ, Π² Π΄ΠΎΠ΄Π°Ρ‚ΠΊΡƒ Ρ” **Ρ‰ΠΎΡΡŒ** **Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅**. **Cookie, Ρ‰ΠΎ ΠΏΠΎΠ²Π΅Ρ€Ρ‚Π°Ρ”Ρ‚ΡŒΡΡ, ΠΏΠΎΠ²ΠΈΠ½Π΅Π½ Π±ΡƒΡ‚ΠΈ ΡƒΠ½Ρ–ΠΊΠ°Π»ΡŒΠ½ΠΈΠΌ** Ρ‰ΠΎΡ€Π°Π·Ρƒ, ΠΊΠΎΠ»ΠΈ Π²ΠΈ Π²Ρ…ΠΎΠ΄ΠΈΡ‚Π΅. Π―ΠΊΡ‰ΠΎ cookie **Π·Π°Π²ΠΆΠ΄ΠΈ** **ΠΎΠ΄ΠΈΠ½ Ρ– Ρ‚ΠΎΠΉ ΠΆΠ΅**, ΠΉΠΌΠΎΠ²Ρ–Ρ€Π½ΠΎ, Π²Ρ–Π½ Π·Π°Π²ΠΆΠ΄ΠΈ Π±ΡƒΠ΄Π΅ дійсним, Ρ– Π½Π΅ Π±ΡƒΠ΄Π΅ способу ΠΉΠΎΠ³ΠΎ Π°Π½ΡƒΠ»ΡŽΠ²Π°Ρ‚ΠΈ. Π’Π΅ΠΏΠ΅Ρ€, якщо Π²ΠΈ спробуєтС **ΠΌΠΎΠ΄ΠΈΡ„Ρ–ΠΊΡƒΠ²Π°Ρ‚ΠΈ** **cookie**, Π²ΠΈ ΠΏΠΎΠ±Π°Ρ‡ΠΈΡ‚Π΅, Ρ‰ΠΎ ΠΎΡ‚Ρ€ΠΈΠΌΡƒΡ”Ρ‚Π΅ **ΠΏΠΎΠΌΠΈΠ»ΠΊΡƒ** Π²Ρ–Π΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ.\ АлС якщо Π²ΠΈ BF заповнСння (Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡŽΡ‡ΠΈ padbuster, Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄), Π²ΠΈ Π·ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚Ρ€ΠΈΠΌΠ°Ρ‚ΠΈ Ρ–Π½ΡˆΠΈΠΉ cookie, дійсний для Ρ–Π½ΡˆΠΎΠ³ΠΎ користувача. Π¦Π΅ΠΉ сцСнарій, ΠΉΠΌΠΎΠ²Ρ–Ρ€Π½ΠΎ, Π²Ρ€Π°Π·Π»ΠΈΠ²ΠΈΠΉ Π΄ΠΎ padbuster. ### Посилання * [https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation](https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation) {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** πŸ’¬ [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}