![]() |
Здравствуйте. Поставил DVWA, тренируюсь.
На 2-х уровнях безопасности провел инъекцию, на 3-м стоит сабж. Как я понял обойти его можно, даже нужно. Только как? PHP код:
|
тебя обманули.
|
Таки нет. По твоему это не проходимый квест?)
|
по-моему тебя обманули.
stripslashes($id); это шикарно |
http://php.net/manual/en/function.mysql-real-escape-string.php
Цитата:
magic_quotes_gpc - это единственная проблема у mysql-real-escape-string и она уходит в прошлое, потому что никто не включает эту опцию |
phpdreamer
Если ты считаешь что этот код уязвим, покажи реализацию плз. Та цитата, которую ты привёл, говорит о том, что при MQ=on НАДО убирать слеши, и тут они убираются. Но это не секурити проблема. Да, данные заэскейпяться дважды, но скуль ты не проведёшь, т.к. бекслеши тоже заэскейпятся. Это можно было-бы проделать при mysql_escape_string которая не учитывает кодировку, но тут... Да и это вобщем-то не всё. Даже если мы прорываем mysql_real_escape_string дальше идёт is_numeric, так что... Вобщем у кого есть реальзация баги, было-бы интересно взглянуть, но я склоняюсь к тому, что разрабы курнули |
http://www.dvwa.co.uk/
Тренировачная площадка для хакера. 3 уровня сложности. Легкий и средний прошел, но тяжелый не выходит... |
Цитата:
|
ТС, верный ответ на твой вопрос - никак.
|
stripslashes и mysql_real_escape_string тут вообще никакой роли не играют, проверка входных данных осуществляется функцией is_numeric, а его ты не пройдешь никак
|
Навряд ли конечно, но может будет полезно, is_numeric() пропускает хекс
PHP код:
|
Цитата:
PHP код:
откуда такая инфа ? |
У меня 0x756e696f6e2073656c656374 возвращает true.
Тестилось на Apache/2.2.8 (Win32) PHP/5.2.6 -------- инфа взята с бложека разора, http://raz0r.name/mysli/phpids-za-i-protiv/ вычитано в коментах |
Допустим, is_numeric обошли. Как из кавычек в запросе выйти?
|
Цитата:
а текст пропускать не может |
Konqi, почему тогда 0x756e696f6e2073656c656374 у меня тоже возвращает true ?
--------- Протестировал еще на PHP Version 5.2.17 (linux) тоже вернуло true |
Windows NT/ php 5.1.6 - false
Linux / 5.2.6 - true Linux / 5.2.17 - true хм =\ p.s если вернемся к теме, то ясно становится, если даже is_numeric Поможет обойти фильтр, то вес запрос все равно в hex виде не отправишь в бд, база операторы в хекс виде не поймет, так что с этим все равно облом, но тему is_numeric стоит исследовать.. |
PHP код:
Код:
Str: union select 1 from table#PHP код:
Код:
Str: union select 1 from table# |
а вообще если разобрать код из первого поста:
PHP код:
|
is_numeric() разумеется пропускает 0xlalala, потому что это ЧИСЛО.
И даже если переменная в запросе не будет обрамлена кавычками (id=$id) то всё равно инъекции не будет, база такое гавно не схавает А если бы это было возможно, то все WAFы сосали бы сразу, т.к. по этой логике можно сразу весь запрос переводить в HEX и не парится ) PS Об этом свойстве is_numeric примерно раз в год все вспоминают\открывают заново и начинаются движения и исследования, которые ничем не кончаются, и снова забвение на год ) |
Expl0ited, спасибо, очень подробно и доступно описано!
Но у меня вопрос, отдельно is_numeric() как-то обойти возможно? Если использовать хекс? Тоесть как минимум нужно написать unhex(), а это уже не число. |
Цитата:
|
Мм, а не подскажете, как нащет стринговых запросов?
Как защищаются от инъекций в них, и как проводят? |
Всё это можно найти здесь: /thread43966.html
В большинстве случаев достаточно фильтровать кавычки. |
Цитата:
Нужно грамотно работать с типами данных. (int) intval() is_numeric() для числовых mysql_real_escape_string() для строковых Всё. PS Только не нужно мне показывать intval в условиях и кривые реализации в коде. Я всё это знаю. Если один раз прочитать мануалы к 3-м функциям и делать правильно, скулей не будет ) |
KolosJey
Expl0ited именно эти функции имел ввиду, так как вопрос был следующим "а не подскажете, как нащет стринговых запросов?" |
Konqi
"Фильтрация кавычек" подразумевает именно фильтрацию. Возможно я что то не так понял, но для меня совершенно однозначно понятие "фильтрация" не вяжется с функцией mysql_real_escape_string. Она ничего не фильтрует. И если я так понял пост Expl0ited'а, то думаю кто то запросто мог его понять так-же. |
KolosJey
в случий стринговых запросов (входящие данные типа стринг), думаю ни один разумный кодер не будет фильтрировать запрос через регулярку или вхождение в строке, понятно же что самый оптимальный и правильный вариант это экранирование ковычек |
Цитата:
Цитата:
PHP код:
|
| Время: 15:09 |