NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Jak vytvořit web s SQLinjection

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Šimon Lakosil:23.1.2018 17:36

Ahojte, jsem student IT v Praze a strašně mě zajímá ethical hacking.
Chtěl bych si vlastní program v pythonu, který by tahal pomocí náchylného parametru všechny údaje o databázi. (data, tables ...)
Proto bych si rád vytvořil web, na kterém bych to mohl zkoušet. Tento web bude samozřejmě v PHP.
Potíž je v tom, že mi to vždycky místo nějakých dat hodí nějaký pdo error.
Error vypadá následovně.

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''' at line 1 in C:\xampp\htdocs\sqli\index.php:12 Stack trace: #0 C:\xampp\htdocs\sqli\index.php(12): PDO->query('SELECT * FROM u...') #1 {main} thrown in C:\xampp\htdocs\sqli\index.php on line 12

Do parametru 'param' hážu ' OR 1 = 1 -- avšak když zadám třeba 'test', tak to normálně jde.
Co jsem procházel zdejší tutoriály, tak by to mělo jít.

Můj kód v index.php

require_once('Db.php');

$db = new Db();

if (isset($_GET['param'])) {
    // ' OR 1 = 1 --
    echo $_GET['param'];
    echo '<br>';
    $parameter = $_GET['param'];
    $stmt = $db::$connection->query("SELECT * FROM users WHERE name = '" . $parameter . "'");
    print_r($stmt->fetchAll());
}

Třída Db vypadá následovně.

class Db
{

    public static $connection;

    protected $host = '127.0.0.1';
    protected $db   = '_testbench_';
    protected $user = 'root';
    protected $pass = '';
    protected $charset = 'utf8mb4';

    public function __construct()
    {
        $dsn = "mysql:host={$this->host};dbname={$this->db};charset={$this->charset}";
        $opt = [
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_EMULATE_PREPARES   => false,
        ];

        self::$connection = new PDO($dsn, $this->user, $this->pass, $opt);
    }
}

Mohli byste mi prosím poradit, co s tím ? Díky

 
Odpovědět
23.1.2018 17:36
Avatar
Odpovídá na Šimon Lakosil
Martin Štěpánek :23.1.2018 22:49

Nejsem si vůbec jistý, ale jediné co mě napadá, že PDO by z právě bezpečnostních důvodů ti nebralo komentář, ale nezdá se mi to moc pravděpodobné.
Zkus třeba:

' OR 1 = 1 OR name = '

EDIT: Abys zjistil, jestli to není tím komentářem...

Editováno 23.1.2018 22:50
Nahoru Odpovědět
23.1.2018 22:49
Všechno jde naprogramovat, chce to jen čas a chuť...
Avatar
Odpovídá na Šimon Lakosil
Martin Štěpánek :23.1.2018 22:53

https://phpdelusions.net/…tion_example
Zkus jako komentář použít # místo -- :-)

Nahoru Odpovědět
23.1.2018 22:53
Všechno jde naprogramovat, chce to jen čas a chuť...
Avatar
Odpovídá na Šimon Lakosil
Neaktivní uživatel:5.2.2018 21:42

Použij mysql_query a máš to hotové :D

Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět
5.2.2018 21:42
Neaktivní uživatelský účet
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.