Hackear servicios públicos: posible, si es realmente necesario

¡Hola a todos, queridos habravitas!

Esta es una historia corta, un ejemplo de la aplicación de habilidades técnicas para evitar el sistema para sus propios fines.
Moderador: ¡Atención! Este texto es una descripción de las posibilidades con fines experimentales. Le recordamos que repetir tales acciones puede llevar a una violación de la ley.

El breve resumen es que soy bielorruso, vivo en San Petersburgo y decidí reemplazar mi licencia de conducir rusa existente. Al conocer el 30% de descuento al reemplazar a través del sitio web del Servicio Estatal, yo, como ávido bielorruso, decidí aprovecharlo de inmediato.

Debo decir de inmediato que no se cometió nada ilegal, de lo contrario este artículo no habría aparecido.

Fui a los Servicios del Estado, elegí en el menú de la aplicación " Reemplazo de una licencia de conducir " .

Completo todos los campos, hago clic en "Enviar" y bam, un error. "El campo es obligatorio".



Los pasaportes bielorrusos, a diferencia de los rusos, tienen una serie de dos letras latinas.

Obviamente, la serie no se recogió de los datos en Mi cuenta en un estado de cuenta por este motivo. De lo que estaba convencido al abrir el Panel de Desarrollador en el navegador y ver la máscara de este campo de texto: máscara = "00 00" .



Y el campo es de solo lectura . ¡Y asegúrese de completar! Y mi serie de " PP " en ella no puedo entrar.

Al principio, como usuario respetable, intenté resolver este problema de manera civilizada.

Mi correspondencia con el apoyo de los Servicios del Estado duró un par de semanas, y la describiré solo brevemente. Mis sugerencias fueron eliminar el atributo de solo lectura del campo de la serie del pasaporte o eliminar la máscara de los números y recogerla correctamente de Mi cuenta. Al principio, simplemente expliqué la esencia del problema para apoyar, lo que tomó mucho tiempo. Luego obtuve las respuestas estándar sobre la limpieza de cookies, caché del navegador, etc. Luego recibí una respuesta de que la revisión es imposible, porque el formulario de solicitud lo proporciona el Ministerio del Interior y, por lo tanto, es necesario contactar al Ministerio del Interior. Luego, en respuesta a mi perseverancia, recibí una carta que decía que era ciudadano extranjero y que no tenía derecho a usar este servicio en absoluto.

Ya había una cuestión de principios, decidí ir hasta el final y seguí atacando al soporte, y en ese momento pensé: ¿por qué no tratar de llenar este campo manualmente? No ingreso los datos de otras personas. Por el contrario, me aseguro de que lo que no funciona correctamente funciona correctamente.

Entonces, abro la aplicación, abro el Panel de desarrollador en el navegador, encuentro el elemento deseado, borro todos los atributos relacionados con la máscara y solo lectura en él, e intento ingresar una serie en él:



Pa-pam! Se ingresan los números en el campo y no las letras.

Incluso intenté borrar todos los atributos que tiene este elemento e intentar ingresar letras allí. No funcionó. De lo cual concluí que la entrada de caracteres en los campos se procesa en algún lugar de Javascript.

Soy un programador de aplicaciones de escritorio, no soy un desarrollador web, y no tengo habilidades serias de depuración para scripts web (así como algunas herramientas de depuración distintas al Panel de Desarrollador). Y viendo cuánto código usa esta página, decidí no perder el tiempo, pero una circunstancia me ayudó. En la pestaña Consola, vi que cuando ingresas cualquier carácter en los campos de texto, se registra.



Fui al enlace especificado del script pages-min-9fa87087e7.js y vi el siguiente código (después de formatearlo con el botón {} para facilitar la lectura).

            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. !

«» - . Input - .



– -, - . – , , , input’, , . .

, .


. – -, . , . - . , . .

-, . - - .

, , , .

Source: https://habr.com/ru/post/es435548/


All Articles