Как сломать по ИП

Письмом Министерства строительства и жилищно-коммунального хозяйства РФ от 01.07.2019 N 23537-СН/04 «Об индивидуальном приборе учета» (далее — Письмо Минстроя РФ от 01.07.2019 N 23537-СН/04) разъяснен порядок определения платы за коммунальные ресурсы при выходе из строя приборов, входящих в состав индивидуального прибора учета (далее — ИПУ).

ИПУ является не только один измерительный прибор, но и совокупность средств измерения и дополнительного оборудования, установленных в жилом или нежилом помещении в многоквартирном доме (п.2 Правил предоставления коммунальных услуг собственникам и пользователям помещений в многоквартирных домах и жилых домов, утвержденных постановлением Правительства Российской Федерации от 06.05.2011 N 354 (далее — Правила).
Следовательно, в состав ИПУ могут входить:
— несколько измерительных устройств, которые учитывают объем коммунального ресурса в каждой комнате жилого или нежилого помещения;
— дополнительное оборудование, обеспечивающее работу нескольких измерителей в единой цепи.

Как взл@мать только по IP адресу! | Кибербезопасность | Dimon Dev

ИПУ считается вышедшим из строя, если сломался или закончился срок эксплуатации хотя бы у одного из измерителей.

В случае выхода из строя измерителей или дополнительного оборудования ИПУ расчет за коммунальную услугу должен производиться исходя из (пп.»а» п.59 Правил):
— среднемесячного объема потребления коммунального ресурса за первые 3 месяца;
— норматива потребления коммунальной услуги в последующем.

Акт о вводе в эксплуатацию ИПУ, состоящего из нескольких измерителей, составляется на прибор в целом, а не на каждый измеритель в отдельности.

Таким образом, в случае наличия в жилом или нежилом помещении многоквартирного дома ИПУ, состоящего из нескольких измерителей и дополнительного оборудования, вам необходимо проверить работоспособность и соблюдение межповерочного интервала каждого измерителя.

В случае неисправности одного или нескольких вычислителей в составе ИПУ плату за коммунальный ресурс необходимо начислять по среднемесячным показаниям.

Письмо Минстроя РФ от 01.07.2019 N 23537-СН/04 официально не опубликовано.

Напоминаем, что письма министерств и ведомств не являются нормативными актами. Содержащаяся в них информация не подлежит обязательному исполнению.

При разрешении спорных ситуаций рекомендуем вам руководствоваться нормами закона.

Источник: cntd.ru

[Квест] Как хакнуть форму? Sql инъекции.

Эта статья является статьёй-квестом. Мы желаем вам успехов в его прохождении. Итоги вашего прохождения будут опубликованы позже (следите за новостями в соц. сетях), а также всем прошедшим в дальнейшем будет выслан инвайт для регистрации на сайте.

Ставьте лайки, делитесь с друзьями и коллегами, репостите в соц.сетях.

Как вычислить человека по ip

Все программисты читали или по крайней мере слышали о методах взлома безопасности веб-сайта. Или даже столкнулись с этой проблемой. С другой стороны, бесконечна фантазия тех, кто хочет сломать сайт, поэтому все узкие места должны быть хорошо защищены. Вот почему я хотел бы начать серию коротких статей, где будут представлены основные методы и приемы взлома веб-сайтов.

В первой статье я хотел бы описать и разъяснить некоторые общие методы взлома одного из самых уязвимых частей сайта — форм. Я буду подробно останавливаться на том, как использовать эти методы и как предотвратить атаки, а также расскажу о тестировании безопасности.

SQL инъекции

SQl-инъекция — это такая техника, когда злоумышленник вводит команды SQL в input поле на веб-странице. Этим imput`ом может быть что угодно — текстовое поле в форме, параметры _GET и _POST, cookies и т. д. Этот метод был весьма эффективным до появления фреймворков в мире PHP. Но этот способ взлома может быть по-прежнему опасен, если вы не используете ORM или какие-либо еще расширения для data object. Почему? Из-за способа передачи параметров в SQL запрос.

Читайте также:  Является ли человек ИП

«Слепые» инъекции

Давайте начнем с классического примера SQL-statement`а, возвращающего пользователя по его логину и хешу от пароля (страница входа)

Пример 1

mysql_query(‘SELECT id, login FROM users WHERE login = ? and password = hash(?)’);

Я подставил вопросительные знаки в выражение из-за различных вариаций этого решения. Первый вариант, на мой взгляд, самый уязвимый:

Пример 1а

mysql_query(‘SELECT id, login FROM users WHERE login = «‘ . $login . ‘» and password = hash(«‘ . $password . ‘»)’);

В этом случае в коде нет проверки на ввод неправильных данных. Значения передаются прямо из формы ввода в SQL запрос. В самом лучшем случае пользователь введет здесь свои логин и пароль. Что случится в худшем случае?

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

» OR 1=1; —

Первая кавычка может быть и одинарной, поэтому одной попыткой взлома можно не обойтись. В конце стоят точка с запятой и два дефиса, чтобы всё, что идёт после превратилось в комментарий. В результате будет выполнен следующий SQL запрос:

SELECT id, login FROM users WHERE login = “;” OR 1=1 LIMIT 0,1; – and password = hash(“;Some password”)

Он вернет первого пользователя из базы данных и, возможно, залогинится под ним в приложении. Хорошим ходом будет добавить LIMIT, чтобы входить под каждым отдельным пользователем. Это единственное, что нужно, чтобы пройти по каждому значению.

Более серьезные способы

В предыдущем примере всё не так уж страшно. Возможности в админской панели управления всегда имеют ограничения и потребуется реально много работы, чтобы поломать сайт. А вот атака через SQL инъекции может привести к куда большим повреждениям системы. Задумайтесь, сколько приложений создаются с главной таблицей ‘users’ , и что будет, если злоумышленник введет такой код в незащищённую форму:

My favorite login’; DROP TABLE users; —

Таблица ‘users’ будет удалена. Это одна из причин почаще делать бэкапы баз данных.

_GET параметры

Все параметры, заполненные через форму, передаются на сервер одним из двух методов — GET или POST. Наиболее распространенный параметр, передаваемый через GET — id. Это одно из самых уязвимых мест для атак, при этом неважно, какого вида урл вы используете — ` http://example.com/users/?id=1 `, или ` http://example.com/users/1 `, или ` http://. /. /post/35 `.

Что произойдет, если мы подставим в урл следующий код?

http://example.com/users/?id=1 AND 1=0 UNION SELECT 1,concat(login,password), 3,4,5,6 FROM users WHERE —

Вероятно, такой запрос вернет нам логин пользователя и. хеш от его пароля. Первая часть запроса `AND 1=0` превращает то, что перед ним в false, соответственно никаких записей не будет получено. А вторая часть запроса вернет данные в виде prepared data.

А так как первым параметром идет id, следующим будет логин пользователя и хеш его пароля и еще сколько-то параметров. Существует множество программ, с помощью брутфорса декодирующих такой пароль, как в примере. А так как пользователь может использовать один и тот же пароль для разных сервисов, можно получить доступ и к ним.

И вот что любопытно: от такого способа атаки совершенно невозможно защититься методами вроде `mysql_real_escape_string`, `addslashes` и.т. д. В принципе, нет способа избежать такой атаки, поэтому, если параметры будут передаваться так:

Читайте также:  ИП виды деятельности электромонтажные работы

‘SELECT id, login, email, param1 FROM users WHERE . addslashes($_GET[‘id’]);’

проблемы не исчезнут.

Экранирование символов в строке

Когда я был новичком в программировании, мне было тяжело работать с кодировками. Я не понимал, в чем между ними различие, зачем использовать UTF-8, когда нужно UTF-16, почему база данных постоянно устанавливает кодировку в latin1. Когда я наконец начал всё это понимать, то обнаружил, что проблем станет меньше, если хранить всё в одном стандарте кодирования. Разбираясь со всем этим, я заметил также и проблемы безопасности, возникающие при преобразовании из одной кодировки в другую.

Проблем, описанных в большинстве предыдущих примеров, можно избежать, используя одинарные кавычки в запросах. Если вы используете addslashes() , атаки через SQL-инъекции, построенные на использовании одинарных кавычек, экранируемых обратным слэшем, потерпят неудачу. Но такая атака может пройти, если просто подставить символ с кодом 0xbf27 , addslashes() преобразует его в символ с кодом 0xbf5c27 – а это вполне валидный символ одинарной кавычки. Другими словами, `뼧` пройдет через addslashes() , а потом маппинг MySQL конвертирует его в два символа 0xbf (¿) и 0x27 (‘).

«SELECT * FROM users WHERE login = ‘»; . addslashes($_GET[‘login’]) . «;'»;

Этот пример можно хакнуть, передав 뼧 or 1=1; — в поле логина в форме. Движок SQL сгенерит конечный запрос так:

SELECT * FROM users WHERE login = ‘¿’ OR 1=1; —

И вернет первого пользователя из БД.

Защита

Как же защитить приложение? Есть куча способов, применение которых не сделает приложение совсем неуязвимым, но хотя бы повысит его защищенность.

Использование mysql_real_escape_string

Функция addslashes() ненадежна, так как не предусматривает многие случаи взлома. У mysql_real_escape_string нет таких проблем

Использование MySQLi

Это расширение для MySQL умеет работать со связанными параметрами:

$stmt = $db->prepare(‘update uets set parameter = ? where $name, $id); $stmt->execute();

Использование PDO

Длинный способ подстановки параметров:

$dbh = new PDO(‘mysql:dbname=testdb;host=127.0.0.1’, $user, $password); $stmt = $dbh->prepare(‘INSERT INTO REGISTRY (name, value) VALUES (:name, :value)’); $stmt->bindParam(‘:name’, $name); $stmt->bindParam(‘:value’, $value); // insert one row $name = ‘one’; $value = 1; $stmt->execute();
$dbh = new PDO(‘mysql:dbname=testdb;host=127.0.0.1’, $user, $password); $stmt = $dbh->prepare(‘UPDATE people SET name = :new_name WHERE array(‘new_name’ => $name, ‘id’ => $id) );

Использование ORM

Используйте ORM и PDO и связывайте (используйте bind) параметры. Избегайте SQL в коде, если вы видите в коде SQL, значит, с ним что-то не так.

ORM позаботится о безопасности в самых узких местах в коде и о валидации параметров.

Выводы

Цель этой серии не предоставить полное руководство по взлому сайтов, а обеспечить безопасность приложения и предотвращение атак из любого источника. Я постарался написать эту статью не только для программистов — они должны быть в курсе любых угроз в коде и знать пути, как предотвратить их, но также и для инженеров по качеству — потому, что их работа заключается в том, чтобы отследить и сообщить такие моменты.

php security sql injection
2017-11-02 irul Поделиться:

Последние посты

  • 2023-02-03Новая мажорная версия Flysystem
  • 2020-12-31Конечные автоматы для Eloquent
  • 2020-12-30Создаём REST API с помощью Laravel Orion
  • 2020-12-29При разработке локально используйте queue:listen вместо queue:work
  • 2020-12-28Laravel Desktop Notifier

Источник: phpprofi.ru

Обход авторизации с помощью SQL-инъекции

SQL-инъекции — один из распространённых способов взлома сайтов (веб-приложений) и программ, работающих с базами данных. Метод основан на внедрении в запрос произвольного SQL-кода. В статье покажу, как работает обход авторизации с помощью SQL-инъекции и поделюсь шпаргалкой.

Читайте также:  Компенсация за использование личного имущества УСН

Обход авторизации с помощью SQL-инъекции

Авторизация на сайте работает следующим образом:

  1. Сайт (веб-приложение) запрашивает имя пользователя и пароль.
  2. Сайт делает запрос к базе данных: «У нас есть пользователь с именем «User »и паролем« user»?».
  3. Если в базе данных указано, что данные для входа верны, тогда сайт позволит войти пользователю User.

Пример простого PHP кода с авторизацией:

$ username = $ _POST [ ‘username’ ] ; // Имя пользователя
$ password = $ _POST [ ‘password’ ] ; // Пароль

$ query = «select username, password from users where username=’.$username.’ and password=’.$password.’ limit 0,1» ; // команда для запроса

$ result = mysql_query ( $ query ) ; // запрос
$ rows = mysql_fetch_array ( $ result ) ; // получение данных
if ( $ rows ) // Проверка на верность данных
echo «Login successful» ;
// Create Session or Set Cookies
echo «login data invalid» ;

Уязвимости в коде

При попытке авторизации код получает данные введенные пользователем и помещает их прямо в SQL команду. Он не проверяет, какой тип данных представлен. Вот используемый SQL-запрос.

SELECT username , password FROM users WHERE username = ‘$username’ AND password = ‘$password’ LIMIT 0 , 1 ;

Для поиска уязвимости в коде проведем фаззинг.

Фаззинг — это передача сайту случайных данных. Длинные целые числа / строки и т.п. Мы знаем, для того чтобы сломать SQL зарос, нужно ввести апостроф или двойные кавычки. «.

Попробуем ввести имя пользователя user и пароь pass ‘ » . Для кода данный запрос будет выглядеть следующим образом:

SELECT username , password FROM users WHERE username = ‘user’ AND password = ‘pass’ ‘ LIMIT 0 , 1 ;

Что соответственно приводит к SQL ошибке:

You have an error in your SQL syntax ; check the manual that corresponds to your MariaDB server version for the right syntax to use near

‘test’ » at line 1

Скрипт принимает наши данные и помещает их в кавычки. Если я введу в качестве пароля test , то sql запрос будет содержать password = ‘test’ :

SELECT username , password FROM users WHERE username = ‘user’ AND password = ‘test’ LIMIT 0 , 1 ;
Это уже не вызовет ошибку.

Но после данной строки есть еще и другой код. (‘LIMIT 0,1)

Таким образом, соответствие правилам SQL синтаксиса это неверно. Это заставило сервер выдать ошибку. Подумайте, что будет, если я добавлю эту строку в качестве ввода.

test ‘ or 1 = 1 —

Запрос будет иметь вид:

SELECT username , password FROM users WHERE username = ‘user’ AND password = ‘test’ or 1 = 1 —‘ LIMIT 0 , 1 ;

В SQL — — или — + в качестве символа для комментария. поэтому, если мы хотим что-то прокомментировать или заблокировать какую-то часть кода, мы можем использовать это. В этом запросе все последующее — игнорируется.

SELECT username , password FROM users WHERE username = ‘user’ AND password = ‘test’ or 1 = 1

Но что будет если к SQL-запросу добавить такую строку:

Что интересно в операторе OR, так это то, что он проверяет два логических оператора и, если один из них или оба верны, он вернет true.

поэтому, если пароль похож на строковый тест или 1 = 1, он вернет true. Поскольку 1 всегда равен 1 (как не странно), этот запрос игнорирует неправильный пароль. Так мы смогли обойти проверку пароля.

Но, а что, если мы не знаем ни пароля, ни имени пользователя?

Рейтинг
( Пока оценок нет )
Загрузка ...
Бизнес для женщин