2015-08-30 1 views
-1

Я пытаюсь создать страницу входа, чтобы продемонстрировать атаку smull sql injection. Ниже PHP код, который принимает входные данные от login.html:Ошибка синтаксиса sql при создании демонстрации для SQL-инъекции

<?php 
define('DB_HOST', 'localhost'); 
define('DB_NAME', 'sql-injection'); 
define('DB_USER','root'); 
define('DB_PASSWORD',''); 
[email protected]_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("Failed to connect to MySQL: " . mysql_error()); 
$db=mysql_select_db(DB_NAME,$con) or die("Failed to connect to MySQL: " . mysql_error()); 
/* $ID = $_POST['user']; $Password = $_POST['pass']; */ 

function SignIn() 
{ 
session_start(); //starting the session for user profile page 

if(!empty($_POST['user']) and !empty($_POST['pass'])) //checking the username and password which is coming from Sign-In.html, are they empty or have some text 
{  

     $query = mysql_query("SELECT * FROM UserName where userName = '$_POST[user]'") or die(mysql_error()); 

     $row = mysql_fetch_array($query) or die(mysql_error()); 

     if(!empty($row['userName']) AND !empty($row['pass'])) 
     { 
       if ($_POST['pass'] == $row['pass']) 
       { 
        echo "SUCCESSFULLY LOGIN TO USER PROFILE PAGE..."; 
       } 
       else 
       { 
        echo "SORRY... YOU ENTERD WRONG ID AND PASSWORD... PLEASE RETRY..."; 
       } 

     } 
     else 
     { 
        echo "The db is corrupt"; 
     } 
} 
else{ 
    echo "The username and password fields cant be empty"; 
} 
} 
if(isset($_POST['submit'])) 
{ 

SignIn(); 

} 

?> 

БД имеет одну таблицу имя пользователя с колоннами

UsernameID userName pass 
1   mrboolnew mrbool123 

я пытаюсь войти в это поле пользователя:

Y';UPDATE username SET userName='mrboolnew1' WHERE userName = 'mrboolnew';

, но я получаю ошибку ниже:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE username SET userName='mrboolnew1' WHERE userName = 'mrboolnew';'' at line 1

Может кто-то помочь мне с запросом на инъекцию. Спасибо заранее.

+0

['mysql_query() отправляет ** уникальный ** запрос (несколько запросов не поддерживаются)'] (http://php.net/manual/en/function.mysql-query.php) Точный SQL-инъекция не будет работать с ['mysql_query()'] (http://php.net/manual/en/function.mysql-query.php), поскольку это разрешает ** 1 ** запрос, а не несколько запросов. После того, как он встретит полуточку - ';' - это будет ошибка. ['Строка запроса не должна заканчиваться точкой с запятой ...'] (http://php.net/manual/en/function.mysql-query.php) – Sean

ответ

6

Вы добавили защиту для защиты от инъекционных атак, возможно, даже не зная. mysql_query() отправляет только один запрос в базу данных (см. here). Точки с запятой не допускаются; а также несколько запросов.

Вам придется приложить больше усилий, чтобы ввести свой собственный код.

+0

они пытаются сознательно ввести? Кажется, я, возможно, не понял вопроса –

+0

@ Fred-ii-. , , Название - «создание демо-версии для SQL-инъекций», поэтому инъекция кажется преднамеренной. Я не буду давать советы о том, как сделать * эту работу, но есть очевидный недостаток в подходе, который принимает OP. –

+0

Gotcha; Ок Гордон, тогда я не понял вопроса. Название более ясное, чем сам вопрос *, или это просто я * haha ​​ –

Смежные вопросы