
Este sou eu, escrevendo um script para iterar os parâmetros de uma solicitação POST para gov.tr, sentado em frente à fronteira com a Croácia.
Como tudo começou
Minha esposa e eu viajamos pelo mundo e trabalhamos remotamente. Recentemente, mudamos da Turquia para a Croácia (o melhor ponto para ligar na Europa). Para não entrar em quarentena na Croácia, você precisa ter um certificado de análise negativa para covid, feito o mais tardar 48 horas antes da entrada.
Descobrimos que é relativamente lucrativo (2.500 rublos) e rapidamente (todos os resultados chegam em 5 horas) eles fazem um teste no aeroporto de Istambul, de onde acabamos de decolar.
Chegamos ao aeroporto 7 horas antes da partida, encontramos um ponto de teste. Fazem tudo de forma caótica: você sobe, entrega o passaporte, paga, pega 2 adesivos com código de barras, vai ao laboratório móvel, onde tira um desses adesivos de você para identificar sua análise. Depois de sair, eles te dizem: vá a este site: enabiz.gov.tr/PcrTestSonuc , digite seu código de barras e os últimos 4 dígitos do seu passaporte, depois de um tempo terá um resultado.
Mas se você inserir os dados logo após a análise, a página apresenta um erro.
Mesmo assim, pensamentos de UX “excelente” rastejaram em minha cabeça, em que, com qualquer erro do operador que martelou nos dados do passaporte, não há como descobrir seu resultado.
Antes da partida
Chega a hora da partida, dirijo nos meus dados e vejo que já há documentos para eles, embora ainda não haja resultado do teste.
Percebe-se até que os testes chegaram ao laboratório há uma hora e meia. Mas a entrada de dados de minha esposa ainda gera um erro de que nenhum registro foi encontrado. E o mais importante, você não será capaz de simplesmente perguntar o que está errado, porque passamos no teste na área antes do controle de passaportes.
No embarque, eles exigiram de nós os resultados dos testes, mas, felizmente, conseguimos convencer o representante do aeroporto de que eles apareceriam em breve (mostrou-lhes os códigos de barras) e, como último recurso, entraríamos em quarentena.
Assim que entrei no avião, segundo meu código, apareceu a informação de que meu teste deu negativo.
Na chegada
E é aqui que começa a diversão! Assim que chegamos e nos conectamos ao WiFi local, descobrimos que o registro de minha esposa ainda não estava no banco de dados. E na própria fronteira, eles abordaram os documentos com muito cuidado: o guarda de fronteira fez um teste para coronavírus e os levou para uma sala separada para verificar sua realidade. Decidimos que contaríamos nossa verdadeira história como ela é e descobriríamos quais opções temos.
Enquanto estávamos na fila, decidi verificar os dados corretos (meus) e incorretos, como a página de validação reage.
Acontece que ela estava enviando uma solicitação de postagem para www.enabiz.gov.tr/PcrTestSonuc/GetPcrRaporVerifyWithKimlik , com os seguintes parâmetros:
barkodNo = XX
kimlikNo = YY
kimlikTipi = 2,
onde barkodNo é o número do código de barras,kimlikNo - número do passaporte, kimlikTipi - parâmetro fixo igual a 2 (se você preencher apenas os dois primeiros campos). Nenhum tokens estava visível. A solicitação deu 1 para os parâmetros corretos (meus dados) e 0 para os errados.
Do carteiro tentei iterar mais de 40 combinações (de repente, houve um erro de um caractere), mas não deu em nada.
Naquele momento, abordamos o guarda de fronteira, ele ouviu nossa história e ofereceu a quarentena. Mas obviamente não queríamos ficar sentados no apartamento por 14 dias, então pedimos para esperar um pouco na zona de trânsito para tentar resolver o problema em algumas horas. O guarda de fronteira entrou em nossa posição, foi ver se podíamos sentar na zona branca e, com o consentimento do chefe, disse: “tá bom, só umas duas horas”.
Comecei a procurar o número de telefone de quem estava fazendo o teste Corona, e ao mesmo tempo decidi testar uma hipótese maluca: se esse sistema tem uma UX tão terrível, então o sistema de segurança não deve ser bom, embora o gov.tr.
Como resultado, atendendo às chamadas, escrevi um pequeno script que iterou em todos os números de 0000 a 9999 no campo kimlikNo. barkodNo tínhamos no adesivo, então não poderia estar errado.
Imagine minha surpresa quando, mesmo depois de 500 solicitações contínuas, eu não fui banido e o script continuou a funcionar a uma velocidade de 20 solicitações por segundo do WiFi do aeroporto.
As ligações não tiveram muito sucesso: fui redirecionado de um departamento ĸ para outro. Mas logo o script produziu o cobiçado valor 6505, que não era nada parecido com os 4 dígitos reais do passaporte.
Depois de enviar o documento, descobriu-se que claramente não havia o passaporte da minha esposa (esses números nem mesmo indicam estrangeiros russos), mas todos os outros dados (incluindo nome, sobrenome e data de nascimento) estão corretos.
O mais interessante é que os códigos de barras também não são aleatórios, mas vão quase um por um. Assim, em teoria, eu poderia encontrar contatos que conseguissem o número do passaporte de minha esposa e, em geral, bombear sem problemas os dados privados de outras pessoas.
Mas eram 9h e uma noite sem dormir, eu estava atrasado para uma reunião online e estava feliz que eles nos deixaram passar sem quarentena, então comecei minha jornada pela Europa.