Почему пункты Group by & HAVING не работают? - PullRequest
0 голосов
/ 28 сентября 2018

Я тестировал свое приложение для SQL-инъекций атак, вот исходный код:

<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables 
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);

// connectivity 


$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

    if($row)
    {
    echo "<font size='5' color= '#99FF00'>";
    echo 'Your Login name:'. $row['username'];
    echo "<br>";
    echo 'Your Password:' .$row['password'];
    echo "</font>";
    }
    else 
    {
    echo '<font color= "#FFFF00">';
    print_r(mysql_error());
    echo "</font>";  
    }
}
    else { echo "Please input the ID as parameter with numeric value";}

?>

и URL-адрес, как это:

http://localhost:8080/sqli-labs-master/Less-1/?id=1 

когда я ставлю ('), это выдает мне такую ​​ошибку:

 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 ''1'' LIMIT 0,1' at line 1 

, поэтому, когда я хочу извлечь имя столбца с помощью HAVING AND GROUP BY , это не работает.я пытаюсь это:

http://localhost:8080/sqli-labs-master/Less-1/?id=1' HAVING 1=1 -- -

и ничего не происходит.так почему я не могу получить имена столбцов через HAVING и внедрение на основе ошибок ...

1 Ответ

0 голосов
/ 28 сентября 2018

Если я вас правильно понимаю, вы пытаетесь извлечь имя столбца, вызвав ошибку, не указав все имена столбцов в предложении владения или группировки по.

Для SQL Server это должно работать.

В MySQL есть опция ONLY_FULL_GROUP_BY , и если она не включена, вы не получите сообщение об ошибке.Версия 5.7.5 включает режим ONLY_FULL_GROUP_BY по умолчанию, поэтому я предполагаю, что вы используете старую версию MySQL.

Для вашей атаки вы, вероятно, хотите сначала включить ONLY_FULL_GROUP_BY, а затем вызвать error 1055 - однако, это работает, только если у пользователя есть необходимые разрешения для этого.

При наличии необходимых разрешений что-то подобное может работать (не проверено):

http://localhost:8080/sqli-labs-master/Less-1/?id=1%27%3B%20SET%20GLOBAL%20sql_mode%20%3D%20%27ONLY_FULL_GROUP_BY%27%20--%20-
http://localhost:8080/sqli-labs-master/Less-1/?id=1%27%20GROUP%20BY%201%20--%20-
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...