Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte PHP-Deserialisierungsanalyse der Zeichenflucht

Detaillierte PHP-Deserialisierungsanalyse der Zeichenflucht

WBOY
WBOYnach vorne
2022-04-14 12:06:495601Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über PHP, das hauptsächlich die damit verbundenen Probleme der Deserialisierung von Zeichen-Escape-Zeichenfolgen nach der PHP-Serialisierung vorstellt, was zu einer Änderung der Länge der Zeichenfolge führt Dann schauen wir uns das gemeinsam an. Ich hoffe, es wird für alle hilfreich sein.

Detaillierte PHP-Deserialisierungsanalyse der Zeichenflucht

Empfohlene Studie: „PHP-Video-Tutorial

Wesentliches: Geschlossen
Kategorie: Mehr Zeichen, weniger Zeichen
Gemeinsame Punkte:

  1. Die Zeichenfolge nach der PHP-Serialisierung wurde ersetzt oder geändert, was zu einer Zeichenfolgenlänge führte Änderungen
  2. werden immer zuerst serialisiert und dann ersetzt und geändert

Klassifizierung

Zeichen erhöhen sich

  • Idee:
    Gemäß dem Zeichenfolgenformat und den Eigenschaften nach der Serialisierung wird die Anzahl der Zeichen identifiziert. Die Länge bis später erkannt werden
    Wenn Sie ein Attribut ändern möchten, müssen Sie es ersetzen, was durch die eingehende Zeichenfolge gesteuert werden kann
    Sie müssen die vorherigen doppelten Anführungszeichen schließen und dann die Zeichen übergeben, die später erstellt werden sollen
    Aber zu diesem Zeitpunkt , es unterscheidet sich von der vorherigen Zeichenfolge. Die Länge stimmt nicht überein und die Konstruktion ist ungültig
    Lösung: Drücken Sie entsprechend der Längenänderung des Ersatzzeichens die konstruierte Zeichenfolge aus dem Längenbereich und werden Sie zum nächsten Teil
    (verwenden Sie die Länge Transformation beim Ersetzen, um die Lücken in der eingefügten Zeichenfolge zu füllen)
  • Tipps:
  1. Beurteilen Sie, dass nach dem Filtern jedes Zeichen die Anzahl der Zeichen hat)
  2. Beispiel:
  3. Ziel: Ändern Sie einen Wert im Objekt Beispielsweise muss das Alter auf 20 geändert werden.
    <?php function filter($string){
        $filter = &#39;/p/i&#39;;
        return preg_replace($filter,&#39;WW&#39;,$string);
    }
    $username = &#39;purplet&#39;;
    $age = "10";
    $user = array($username,$age);
    
    var_dump(serialize($user));
    echo "<pre class="brush:php;toolbar:false">";
    $r = filter(serialize($user));
    var_dump($r);
    var_dump(unserialize($r));
    ?>
    . Der folgende Teil kann als Vorlage aufgezeichnet werden ww, das heißt, jedes Mal wird ein weiteres Zeichen hinzugefügt
  • Dies führt zu Lesefehlern bei der Längenzuordnung und Ausgabefehlern während der Deserialisierung
  • Erwägen Sie also die Konstruktion von Zeichen-Escapes durch die Art der Längenlesung

    Um 10 auf 20 zu ändern, bestimmen Sie zunächst die Zeichenfolge, die später erstellt werden soll:

    var_dump(serialize($user));    # 序列化
    echo "<pre class="brush:php;toolbar:false">";
    $r = filter(serialize($user)); # 替换后序列化
    var_dump($r);
    var_dump(unserialize($r));     # 打印反序列化

    Bestimmen Sie die Länge: 16 (das heißt, die eingehende Zeichenfolge benötigt 16 weitere Zeichen, um diese Zeichen in das nächste Attribut einzufügen)
    Jedes Mal gibt es 1 Zeichen mehr, also werden 16 p benötigtDetaillierte PHP-Deserialisierungsanalyse der Zeichenflucht Daher , Eingabe:

    Ergebnisausgabe:



    Zeichenreduzierung
    Detaillierte PHP-Deserialisierungsanalyse der ZeichenfluchtWert-Escape

    Wertfilterung, der vorherige Wert enthält den letzten Schlüssel und Wert (bis zur linken Klammer) )Detaillierte PHP-Deserialisierungsanalyse der Zeichenflucht

    Beispiel

    Ziel: Alter ändern bis 20 Alter: Konstruieren des Escape-Codes

      Auf A folgt die eingehende Alterszeichenfolge

    , die diese 13 Zeichen belegen soll

    Alle 2 p ändert sich in 1 w, was einem Escape-Bit entspricht. Geben Sie also 13*2=26 p ein, die Zeichenlänge wird als 26 markiert, was zu 13 w wird, und die nächsten 13 Zeichen belegen die verbleibenden 13 Bits

    Beobachten Sie die Länge des Anführungszeichens nach dem Ende des ersten Parameters bis zur letzten rechten Klammer (Zielzeichenfolge) n

    Beobachten Sie jedes Ersetzungsinkrement x

    Verwenden Sie n/x Ersetzungszeichen und erstellen Sie den Code. Übergeben Sie das serialisierte Objekt zu A Wie viele Zeichen werden durch n ersetzt? : „
    PHP-Video-Tutorial

    Detaillierte PHP-Deserialisierungsanalyse der Zeichenflucht第一步

    Das obige ist der detaillierte Inhalt vonDetaillierte PHP-Deserialisierungsanalyse der Zeichenflucht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen