Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2020-1349 — Proof-of-Concept-Exploit für CVE-2020-1349, ein Zero-Click Heap-Überlauf im MIME-Parsing von Outlook 2019, der EIP-Kontrolle durch Heap-Spray und Feng Shui auf Koreanisch Windows 10 x64 erreicht. | Kitploit
Tools/GitHubGitHub/0neb1n/cve-2020-1349
SchwachstellenanalyseExploitationShellcodeE-Mail-SicherheitBinary-Exploitation
GitHub0neb1n/cve-2020-1349

CVE-2020-1349

Proof-of-Concept-Exploit für CVE-2020-1349, ein Zero-Click Heap-Überlauf im MIME-Parsing von Outlook 2019, der EIP-Kontrolle durch Heap-Spray und Feng Shui auf Koreanisch Windows 10 x64 erreicht.

Repository anzeigen
114vor 6 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2020-1349

Diese Schwachstelle tritt in Outlook 2019 (16.0.12624.20424) auf, installiert auf Koreanisch Windows 10 1909 x64, codepage 949.

TLDR;

ex_screen

Ich war nicht in der Lage, ASLR mit dieser Schwachstelle zu umgehen, aber ich habe einen Outlook 2019 32-Bit-Exploit geschrieben, der einen Taschenrechner öffnet, indem er die Adresse einer Systembibliothek verwendet, die beim Booten festgelegt ist. Und diese Schwachstelle ist eine Zero-Click-Schwachstelle. Wenn das Konto eines anderen Mail-Dienstes als des „outlook.com“-Kontos mit Outlook 2019 über IMAP verknüpft ist, wird sie allein durch den Empfang von E-Mails ausgelöst.

Erster Bug

root@kitploit:~
                v26 = IsDBCSLeadByte(*v13);
                v12 = 0;
                if ( v26 )
                {
                  LODWORD(v5) = v5 - 1;
                  *v11++ = *v13++;
                  --v8;
                }
                LODWORD(v5) = v5 - 1;
                *v11++ = *v13++;
                --v8;
                goto LABEL_51;

[OUTLMIME!CloseAllSockets+0x50804 Pseudo code]

Der Absturz tritt auf, und der Teil, in dem die Schwachstelle existiert, ist wie oben dargestellt. Wenn die Zeichenfolge des geparsten To-Headers oder From-Headers Multibyte ist, wird die Variable, die die verbleibenden zu parsenden Zeichenfolgen zählt, um 2 verringert, und es kommt zu einem Integer-Underflow, wenn die Variable 1 ist und um 2 verringert wird.

Zweiter Bug

root@kitploit:~
          if ( v23 != '=' )
          {
            if ( v23 == 34 )
              v15 = 6;
            goto LABEL_48;
          }
          v15 = 1;
        }
        if ( v15 )
          goto LABEL_40;

[OUTLMIME!CloseAllSockets+0x50804 Pseudo code]

root@kitploit:~
LABEL_40:
                v24 = v13[v14];
                if ( v24 )
                {
                  if ( v5 == v14 )
                    goto LABEL_52;
                  if ( v8 != v14 )
                  {
                    v25 = IsDBCSLeadByte(v24);
                    v12 = 0;
                    if ( v25 )
                      ++v14;
                    ++v14;
                  }
                }
                goto LABEL_51;
              }

[OUTLMIME!CloseAllSockets+0x50804 Pseudo code]

root@kitploit:~
LABEL_51:
        if ( v5 <= v14 )
          goto EXIT_0;
      }

[OUTLMIME!CloseAllSockets+0x50804 Pseudo code]

root@kitploit:~
if ( v15 )
        {
          if ( v15 == 1 )
          {
            v15 = 2;
            v21 = v13[v14];
            v22 = v14 + 1;
            if ( v21 != '?' )
              v22 = v14;
            if ( v21 != '?' )
              v15 = v12;
            v14 = v22;
          }

[OUTLMIME!CloseAllSockets+0x50804 Pseudo code]

root@kitploit:~
else if ( v15 > 1 )
          {
            if ( v15 <= 3 )
            {
              v18 = v13[v14];
              v19 = v14 + 1;
              if ( v18 != '?' )
                v19 = v14;
              v14 = v19;
              v20 = v15 + 1;
              if ( v18 != '?' )
                v20 = v15;
              v15 = v20;
            }

[OUTLMIME!CloseAllSockets+0x50804 Pseudo code]

root@kitploit:~
if ( v15 == 4 )
              {
                if ( v13[v14] == '?' )
                  v15 = 5;
LABEL_40:
                v24 = v13[v14];
                if ( v24 )
                {
                  if ( v5 == v14 )
                    goto LABEL_52;
                  if ( v8 != v14 )
                  {
                    v25 = IsDBCSLeadByte(v24);
                    v12 = 0;
                    if ( v25 )
                      ++v14;
                    ++v14;
                  }
                }
                goto LABEL_51;
              }

[OUTLMIME!CloseAllSockets+0x50804 Pseudo code]

root@kitploit:~
if ( v15 == 5 )
              {
                v16 = v14;
                v17 = v14 + 1;
                v30 = v13[v16];
                if ( v30 == '=' )
                {
                  *v11++ = 34;
                  --v8;
                }
                memcpy(v11, v13, v17);
                v13 += v17;
                v11 += v17;
                LODWORD(v5) = v5 - v17;
                v8 -= v17;
                if ( v30 == '=' )
                {
                  *v11++ = 34;
                  --v8;
                }
                v12 = 0;
                v14 = 0;
                v15 = 0;
                goto LABEL_51;
              }

[OUTLMIME!CloseAllSockets+0x50804 Pseudo code]

root@kitploit:~
else
        {
          v23 = v13[v14];
          if ( v23 != '=' )
          {
            if ( v23 == '"' )
              v15 = 6;
            goto LABEL_48;
          }
          v15 = 1;
        }
        if ( v15 )
          goto LABEL_40;

[OUTLMIME!CloseAllSockets+0x50804 Pseudo code]

root@kitploit:~
LABEL_48:
                v26 = IsDBCSLeadByte(*v13);
                v12 = 0;
                if ( v26 )
                {
                  LODWORD(v5) = v5 - 1;
                  *v11++ = *v13++;
                  --v8;
                }
                LODWORD(v5) = v5 - 1;
                *v11++ = *v13++;
                --v8;
                goto LABEL_51;

[OUTLMIME!CloseAllSockets+0x50804 Pseudo code]

Als ich jedoch einen Heap-Overflow mit dem obigen Bug auslöste, konnte ich die Bedingung, die Schleife wieder zu verlassen, nicht erfüllen, sodass ich die partielle Überschreibung nicht so lange durchführen konnte, wie ich wollte. Also musste ich eine Eingabe finden, die eine bestimmte Bedingung erfüllt, um die Schleife zu verlassen. Aus dem gleichen Grund wie oben habe ich den umgebenden Code-Teil streng auditiert und statt den Eingabewert zu finden, der die Schleife verlassen kann, habe ich den Bug gefunden, der zu einer Endlosschleife führt, ohne dass der Index erhöht oder beim Verarbeiten einer speziellen Zeichenfolge geschrieben wird.

EIP-Steuerung

ex_screen

Nach der Durchführung von Heap-Spray und Heap Feng Shui gelang das EIP-Hijacking, indem die vftable des laufenden Objekts in einem anderen Thread überschrieben wurde, der nicht in einer Endlosschleife gefangen war, unter Verwendung des obigen Bugs.

Tool herunterladen