Хакнуть Госуслуги – можно, если очень нужно

[ Версия для печати ]
Добавить в Telegram Добавить в Twitter Добавить в Вконтакте Добавить в Одноклассники
Страницы: (4) [1] 2 3 ... Последняя »  К последнему непрочитанному [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]
VampirBFW
15.01.2019 - 16:41
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
172
Это небольшая история – пример применения технических навыков в обход системы в своих целях.

Краткая предыстория такова – я белорус, живу в Санкт-Петербурге, и решил я заменить имеющиеся у меня российские водительские права. Узнав о скидке в 30% при замене через сайт Госуслуг, я, как алчный белорус, решил сразу этим воспользоваться.

Хакнуть Госуслуги – можно, если очень нужно
 
[^]
Yap
[x]



Продам слона

Регистрация: 10.12.04
Сообщений: 1488
 
[^]
VampirBFW
15.01.2019 - 16:41
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Сразу скажу, противозаконного ничего совершено не было, иначе бы эта статья не появилась.

Зашёл на Госуслуги, выбрал в меню заявлений «Замена водительского удостоверения».

Заполняю все поля, жму «Отправить», и бац – ошибка. “Поле обязательно для заполнения”.



Хакнуть Госуслуги – можно, если очень нужно
 
[^]
VampirBFW
15.01.2019 - 16:42
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Белорусские паспорта имеют, в отличие от российских, серию из двух латинских букв.

Очевидно, что серия не подхватилась из данных Личного кабинета в заявление по этой причине. В чём я и убедился, открыв в браузере Панель разработчика, и увидев маску этого текстового поля: mask = “00 00”.

Хакнуть Госуслуги – можно, если очень нужно
 
[^]
VampirBFW
15.01.2019 - 16:42
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
А поле-то это – read-only. И обязательно для заполнения! И мою серию "PP" в него мне никак не ввести.

Сначала я, как добропорядочный пользователь, попытался решить эту проблему цивилизованно.

Моя переписка с поддержкой Госуслуг длилась пару недель, и опишу её лишь вкратце. Мои предложения сводились либо к снятию атрибута read-only у поля серии паспорта, либо к удалению маски из цифр и корректному подхватыванию из Личного кабинета. Сначала я просто объяснял поддержке суть проблемы, на что ушло немало времени. Потом я получал стандартные ответы о чистке куков, кэша браузера, и т.д. Потом я получил ответ о том, что доработка невозможна, потому что форму заявления предоставляет МВД, и поэтому и обращаться надо в МВД. Потом, в ответ на мою настойчивость, я получил письмо о том, что я иностранный гражданин и вообще не имею права пользоваться данной услугой.

Тут уже было дело принципа, я решил идти до конца и продолжал атаковать саппорт, а сам в это время подумал – почему бы не попробовать заполнить это поле вручную. Я ведь не ввожу чужие данные. Напротив, я делаю, чтобы то, что работает неправильно, работало правильно.

Итак, я открываю Заявление, открываю в браузере Панель разработчика, нахожу нужный элемент, стираю в нём все атрибуты, относящиеся к маске и read-only, и пробую ввести в него серию:


Хакнуть Госуслуги – можно, если очень нужно
 
[^]
VampirBFW
15.01.2019 - 16:42
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Па-пам! Цифры в поле вводятся, а буквы –нет.

Я даже попробовал стереть все атрибуты, которые имеет этот элемент, и попробовать ввести туда буквы. Не сработало. Из чего я сделал вывод, что ввод символов в поля обрабатывается где-то в Javascript.

Я – программист desktop-приложений, я не вебщик, и не обладаю серьёзными навыками отладки веб-скриптов (как и какими-то инструментами для отладки, кроме Панели разработчика). И увидев, какой объём кода использует эта страница, я было решил не тратить время, но меня выручило одно обстоятельство. На вкладке Console я увидел, что при вводе любого символа в текстовые поля он логируется.

Хакнуть Госуслуги – можно, если очень нужно
 
[^]
VampirBFW
15.01.2019 - 16:42
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Я перешёл на указанную ссылку скрипта pages-min-9fa87087e7.js и увидел следующий код (предварительно отформатировав его кнопкой { } для удобочитаемости).

window.addEventListener("keyup", function(e) {
e.which <= 90 && 48 <= e.which && (i += e.key.toLowerCase(),
n.forEach(function(e) {
console.log(i),
-1 != i.indexOf(e) && (r = !1,
l(),
i = "")
}));
if (13 === e.keyCode) {
s++;
var t = new Date;
t - a <= o && 3 === s && (r = !1,
l(),
t = s = 0),
window.setTimeout(function() {
s = 0
}, o),
a = t
}
});

Ага. Мы здесь добавляем объекту window обработчик события keyup с анонимной функцией, в которой расположена логика обработки ввода, в том числе и логирования в консоль. Значит, вся обработка ввода осуществляется обработчиками событий.

Встала следующая проблема – как же их отключить. Мне-то надо не просто отладить скрипт, а ввести в input значение. Даже если я найду нужную часть скрипта, нужный обработчик, что мне это даст? Можно было бы использовать метод removeEventListener(), но у нас используется анонимная функция, и у нас нет имени нужного обработчика.

Погуглив, я понял, что единственный путь к решению – это динамически клонировать элемент, вследствие чего в нём (а точнее, в его клоне) будут убраны все обработчики событий, по аналогии с:

var el = document.getElementById('mydiv'),
elClone = el.cloneNode(true);

el.parentNode.replaceChild(elClone, el);

Этот код я решил поместить прямо в onkeyup моего input’а. Таким образом, код элемента приобрёл следующий вид:

<input
id="form.FormStep2.Panel11.Panel_IGdoc.Panel1.idDocumentSerie"
type="text"
ng-model="inp"
ng-trim="false"
ng-model-options="{ updateOn: 'default blur', debounce: { 'default': debounceTime, 'blur': 0 } }"
tabindex="-1"
ng-blur="onBlurHandler(model.value, $event)"
ng-focus="onFocusHandler($event)"
ng-keydown="inputKeyup($event)"
class="PGU-FieldTextInputBasic field-padded -metrika-nokeys ng-valid ng-isolate-scope ng-valid-maxlength ng-dirty ng-valid-parse ng-touched"
change="changeByUser()"
model="item"
idinp="form.FormStep2.Panel11.Panel_IGdoc.Panel1.idDocumentSerie"
style=""
onkeyup="
document.getElementById('form.FormStep2.Panel11.Panel_IGdoc.Panel1.idDocumentSerie').value='PP';
var el = document.getElementById('form.FormStep2.Panel11.Panel_IGdoc.Panel1.idDocumentSerie'), elClone = el.cloneNode(true);
el.parentNode.replaceChild(elClone, el);
"
>

Я попробовал ввести любой символ – как и ожидалось, отработал обработчик onkeyup, и значение input’а изменилось на PP. Ура!

Это сообщение отредактировал VampirBFW - 15.01.2019 - 16:43
 
[^]
VampirBFW
15.01.2019 - 16:43
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Но при нажатии на «Отправить» меня по-прежнему ждала неудача. Input по-прежнему подсвечивался красным и не пропускал проверку корректности дальше.

Хакнуть Госуслуги – можно, если очень нужно
 
[^]
VampirBFW
15.01.2019 - 16:44
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Из такого поведения я сделал единственно возможный вывод – данные ошибки закэшировалась где-то, возможно в какой-нибудь глобальной переменной. Где именно – у меня не было ни времени, ни желания разбираться, и я попробовал просто обновить страницу, изменить код элемента нашего input’а, как было указано выше, и попробовать ещё раз пройти эту проверку. И на этот раз всё получилось.

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

Резюме из данной истории каждый может сделать самостоятельно. Я – не веб-программист, как уже указал выше. Возможно, эту проблему можно было решить гораздо быстрее и проще. Но суть-то не в этом. Лично меня удивляет, что на одном из крупнейших официальных государственных порталов есть возможность подмены данных. Пусть даже это оказалось для меня как нельзя кстати.

Это же можно спокойно обработать проверкой в бэк-энде, как это теоретически и должно делаться. Ведь в теории и в каком-нибудь онлайн-банке возможна такая же примитивная инъекция данных.

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

Пруф

Как обычно, сайт которым пользуются большая часть населения страны не имеет проверки корректности обратной заполняемости форм. Ловкусть рук и можно любое отделение нахуй послать.

Это сообщение отредактировал VampirBFW - 15.01.2019 - 16:55

Хакнуть Госуслуги – можно, если очень нужно
 
[^]
Ангина
15.01.2019 - 16:46 [ показать ]
-167
dekokt
15.01.2019 - 16:47
60
Статус: Online


Ярила

Регистрация: 10.06.14
Сообщений: 7677
Беги, дядь Мить...
 
[^]
LuckyEB
15.01.2019 - 16:47
3
Статус: Online


Ярила

Регистрация: 10.10.07
Сообщений: 5713
Цитата (VampirBFW @ 15.01.2019 - 16:44)
Дорогие посетители ресурса, мне было бы очень интересно получить мнения тех, кто уже сталкивался с подобными случаями, а также примеры из практики.

Как бы "дорогие посетители ресурса" не посетили тебя лично, а то учишь народ нипайми чему ...
 
[^]
ДокторЯр
15.01.2019 - 16:47
33
Статус: Offline


правда, которая не нравится дебилам

Регистрация: 5.08.10
Сообщений: 4619
А вот кто поломал Госуслуги! Вот из-за кого я сегодня полдня туда зайти не могу и оплатить свой просрАченный транспортный налог без комиссии! deg.gif poke.gif no.gif
 
[^]
СусанИванин
15.01.2019 - 16:47
100
Статус: Offline


Матершинник

Регистрация: 18.10.11
Сообщений: 580
Ахуеть... Скажите, это, стало быть, любую стенку можно так убрать? ©
 
[^]
ehsimatsur
15.01.2019 - 16:48
5
Статус: Offline


Хохмач

Регистрация: 16.08.13
Сообщений: 798
Надо в закладки кинуть. У меня машины на детей и у них нет паспортов. Из-за этого в МРЭО хрен попадешь. Серия из двух букв. Не застрахуешь машины на сайте тоже.
 
[^]
mrPitkin
15.01.2019 - 16:48 [ показать ]
-63
horse1911
15.01.2019 - 16:48
21
Статус: Offline


Приколист

Регистрация: 6.12.16
Сообщений: 349
Цитата (VampirBFW @ 15.01.2019 - 16:42)
Я перешёл на указанную ссылку скрипта pages-min-9fa87087e7.js и увидел следующий код (предварительно отформатировав его кнопкой { } для удобочитаемости).

window.addEventListener("keyup", function(e) {
e.which <= 90 && 48 <= e.which && (i += e.key.toLowerCase(),
n.forEach(function(e) {
console.log(i),
-1 != i.indexOf(e) && (r = !1,
l(),
i = "")
}));
if (13 === e.keyCode) {
s++;
var t = new Date;
t - a <= o && 3 === s && (r = !1,
l(),
t = s = 0),
window.setTimeout(function() {
s = 0
}, o),
a = t
}
});

Ага. Мы здесь добавляем объекту window обработчик события keyup с анонимной функцией, в которой расположена логика обработки ввода, в том числе и логирования в консоль. Значит, вся обработка ввода осуществляется обработчиками событий.

Встала следующая проблема – как же их отключить. Мне-то надо не просто отладить скрипт, а ввести в input значение. Даже если я найду нужную часть скрипта, нужный обработчик, что мне это даст? Можно было бы использовать метод removeEventListener(), но у нас используется анонимная функция, и у нас нет имени нужного обработчика.

Погуглив, я понял, что единственный путь к решению – это динамически клонировать элемент, вследствие чего в нём (а точнее, в его клоне) будут убраны все обработчики событий, по аналогии с:

var el = document.getElementById('mydiv'),
elClone = el.cloneNode(true);

el.parentNode.replaceChild(elClone, el);

Этот код я решил поместить прямо в onkeyup моего input’а. Таким образом, код элемента приобрёл следующий вид:

<input
id="form.FormStep2.Panel11.Panel_IGdoc.Panel1.idDocumentSerie"
type="text"
ng-model="inp"
ng-trim="false"
ng-model-options="{ updateOn: 'default blur', debounce: { 'default': debounceTime, 'blur': 0 } }"
tabindex="-1"
ng-blur="onBlurHandler(model.value, $event)"
ng-focus="onFocusHandler($event)"
ng-keydown="inputKeyup($event)"
class="PGU-FieldTextInputBasic field-padded -metrika-nokeys ng-valid ng-isolate-scope ng-valid-maxlength ng-dirty ng-valid-parse ng-touched"
change="changeByUser()"
model="item"
idinp="form.FormStep2.Panel11.Panel_IGdoc.Panel1.idDocumentSerie"
style=""
onkeyup="
document.getElementById('form.FormStep2.Panel11.Panel_IGdoc.Panel1.idDocumentSerie').value='PP';
var el = document.getElementById('form.FormStep2.Panel11.Panel_IGdoc.Panel1.idDocumentSerie'), elClone = el.cloneNode(true);
el.parentNode.replaceChild(elClone, el);
"
>

Я попробовал ввести любой символ – как и ожидалось, отработал обработчик onkeyup, и значение input’а изменилось на PP. Ура!

Прочитал и случайно сатану вызвал pray.gif maniac.gif pop.gif
 
[^]
besedkin
15.01.2019 - 16:48
27
Статус: Offline


Ярила

Регистрация: 17.01.11
Сообщений: 5034
Ну вот-теперь сайт переделывать начнут и опять будем пешком ходить по всем инстанциям.

Хакнуть Госуслуги – можно, если очень нужно
 
[^]
ЗлойПрапор
15.01.2019 - 16:48
60
Статус: Online


Ветеран Ледового попоища

Регистрация: 11.02.12
Сообщений: 1020
А в наши выборы там никак процентовку поменять нельзя вместо 76%? rolleyes.gif
 
[^]
AdventL
15.01.2019 - 16:48
4
Статус: Offline


Ярила

Регистрация: 20.08.18
Сообщений: 1976
Попал ты, парень alik.gif
 
[^]
Uzbek666
15.01.2019 - 16:48
7
Статус: Offline


эксперт по всем вопросам

Регистрация: 19.03.18
Сообщений: 2541
так для оформления заявления нужна подтвержденная запись, то есть все-равно надо идти в мфц там или еще куда, так там бы и без этих танцев с бубном сделали учетку сразу.
 
[^]
dva2
15.01.2019 - 16:49
27
Статус: Offline


Приколист

Регистрация: 7.09.10
Сообщений: 321
Цитата (VampirBFW @ 15.01.2019 - 16:44)
Как обычно, сайт которым пользуются большая часть населения страны не имеет проверки корректности обратной заполняемости форм. Ловкусть рук и можно любое отделение нахуй послать.

Какое нахуй отделение куда ты пошлешь? Сайт госуслуги не выдает документов и денег. Ну запихал ты им свое заявление - и что? С этим заявлением работает чиновник, который увидев в твоем заявлении что то, что ему не понравится - просто его нахуй пошлет. Вот и весь результат хакинга.
 
[^]
doubletrue
15.01.2019 - 16:49
2
Статус: Offline


Приколист

Регистрация: 13.07.18
Сообщений: 229
За тобой уже выехали, милый мой бульбяш.
 
[^]
Jammardu
15.01.2019 - 16:50
5
Статус: Offline




Регистрация: 19.01.12
Сообщений: 4608
VampirBFW ошибки есть везде. Система слишком инерциальна, чтобы сразу реагировать на такие "косяки".
 
[^]
gooddie
15.01.2019 - 16:52
-2
Статус: Offline


Шутник

Регистрация: 26.10.12
Сообщений: 52
Есть те кто сумел таки на них зарегаться?? респект
 
[^]
QuartZz
15.01.2019 - 16:52
10
Статус: Offline


42

Регистрация: 19.10.10
Сообщений: 2983
Вот оно как бывает, вроде и криминала нет, а статью найти при желании - легко. Срочно заказывай кувшин из Интернета, может }{0ТТ@БЬ)Ч отмажет.)

Не, так-то молодец, знания и руки на месте, только инстинкт самосохранения отбит напрочь...
 
[^]
Понравился пост? Еще больше интересного в Телеграм-канале ЯПлакалъ!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) Просмотры темы: 35230
0 Пользователей:
Страницы: (4) [1] 2 3 ... Последняя » [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]


 
 



Активные темы






Наверх