Jump to content
torpila123

Cum să obții programatic date de pe mfinante

Recommended Posts

Salutare!

Acum 2 zile m-am apucat s? lucrez la o aplica?ie pentru iOS care s? afi?eze informa?ii despre o firm? anume, foarte util? pentru detectarea "firmelor fantom?" sau ob?inerea datelor despre o anumit? societate comercial?. Nu este chiar un tutorial de "hacking", pentru c? datele sunt publice ?i pot fi accesate de pe site-ul ministerului de finante. Problema apare în momentul în care dore?ti s? ob?ii aceste date în mod programatic, deoarece site-ul ministerului nu ofer? un API pentru programatori, ba chiar mai r?u, prezint? un captcha la solicitarea datelor.

Screenshot:

cElrBRB.png

Desigur, primul meu gând a fost un captcha solver, dar nu este o solu?ie prea practic?. A?a c? m-am mai jucat pu?in, am mai întrebat pe diverse site-uri ?i am descoperit o alternativ?. Inspectând sursa paginii mfinante[punct]ro/agenticod.html

observ?m c? formularul este procesat de pagina infocodfiscal.html iar parametrul pentru cif cod. Surpriza a ap?rut în momentul în care am descoperit c? cif-ul poate fi transmis ?i prin GET, iar în acest caz captcha-ul, nu mai este necesar. A?adar, datele pentru o firm? pot fi ob?inute accesând mfinante[punct]ro/infocodfiscal.html?cod=cifulfirmei.

R?mâne o singur? problem? - în momentul în care vrem s? facem un request folosind cURL, suntem redirec?iona?i c?tre o pagin? care ne aten?ioneaz? c? trebuie s? avem javascript activat. Folosind o extensie pentru chrome, cum ar fi Postman, observ?m c? se mai transmit câ?iva parametrii prin POST:


'TS018732dc_id' => 3,
'TS018732dc_cr' => 'SESSIONID',
'TS018732dc_76' => 0,
'TS018732dc_86' => 0,
'TS018732dc_md' => 1,
'TS018732dc_rf' => 0,
'TS018732dc_ct' => 0,
'TS018732dc_pd' => 0

Parametrul TS018732dc_cr con?ine ID-ul de sesione, îl putem l?sa la varianta din Postman, datele vor fi afi?ate chiar dac? sesiunea a expirat. Asta e tot! Acum putem accesa pagina prin cURL ?i extrage datele folosind un DOM parser, gen DOMDocument dac? folosim php. Lista de bilan?uri poate fi ob?inut? dintr-un comment de deasupra op?iunilor pentru a nu fi nevoi?i s? pars?m fiecare op?iune. Dup? ce a?i ob?inut datele, aceste pot fi serializate în format JSON, XML sau orice alt format dori?i pentru a fi accesate de site-ul sau aplica?ia voastr?. Dac? dori?i s? pute?i c?uat dup? numele firmei, va trebui s? desc?rca?i ni?te csv-uri de pe data[punct]gov[punct]ro, ?terge?i toate coloanele în afar? de numele firmei ?i cif ?i le b?ga?i într-o baz? de date.

Sper c? v-a fost util acest tutorial!

Edited by torpila123
  • Upvote 2
  • Downvote 1
Link to comment
Share on other sites

@torpila123

salut si bine ai venit! nu stiu daca esti utilizator nou sau unul vechi cu user nou.

poti arunca o privire si la https://www.anaf.ro/RpiTva/index.jsp ? crezi ca exista o varianta sa poti face bypass si la asta?

Mersi de urare, sunt utilizator nou. Nu este nevoie s?-?i ba?i capul cu site-ul de ANAF, po?i folosi sistemul VIES de la Comisia European? care are un API dr?gu? în SOAP ?i po?i verifica orice pl?titor de TVA din orice stat membru. VIES

Link to comment
Share on other sites

De 5 ani (muie TVA) .

Am verificat ?i eu acum ni?te CIF-uri, într-adev?r, unele le g?se?te invalide, o sulu?ie ar fi s? folose?ti tot site-ul de finan?e, au o rubric? "Taxa pe valoarea adaugata (data luarii in evidenta): ", po?i verifica dac? valoarea este o dat? valid?, dac? nu atunci returnezi null sau ceva.

Scriptul meu returneaz? a?a:

zEn3efI.png

Evident, înc? nu e complet, de aia bilan?urile apar inconsistent.

Link to comment
Share on other sites

Codul meu fiscal zice ca nu exista .

Asta pentru ca nu esti in Registrul Operatorilor Intracomunitari. Pe VIES apar doar cei inregistratati in registru. Poti sa fii platitor de TVA si sa nu fii inregistrat acolo. Insa daca faci tranzactii cu altii din UE si nu esti in registru amenzile sunt extrem de mari (cred ca incep de pe la 10.000 de ron)

Mai este si openapi.ro insa datele nu sunt de actualitate

Link to comment
Share on other sites

Salutare!

Surpriza a ap?rut în momentul în care am descoperit c? cif-ul poate fi transmis ?i prin GET, iar în acest caz captcha-ul, nu mai este necesar. A?adar, datele pentru o firm? pot fi ob?inute accesând mfinante[punct]ro/infocodfiscal.html?cod=cifulfirmei.

R?mâne o singur? problem? - în momentul în care vrem s? facem un request folosind cURL, suntem redirec?iona?i c?tre o pagin? care ne aten?ioneaz? c? trebuie s? avem javascript activat. Folosind o extensie pentru chrome, cum ar fi Postman, observ?m c? se mai transmit câ?iva parametrii prin POST:


'TS018732dc_id' => 3,
'TS018732dc_cr' => 'SESSIONID',
'TS018732dc_76' => 0,
'TS018732dc_86' => 0,
'TS018732dc_md' => 1,
'TS018732dc_rf' => 0,
'TS018732dc_ct' => 0,
'TS018732dc_pd' => 0

Parametrul TS018732dc_cr con?ine ID-ul de sesione, îl putem l?sa la varianta din Postman, datele vor fi afi?ate chiar dac? sesiunea a expirat. Asta e tot!

Nu am reusit de nici o culoare sa fac un request cURL, ma redirecteaza la pagina sa activez JS-ul. Alte idei ?

thx

Link to comment
Share on other sites

Incepand cu iunie 2017 cei de la mfinante au schimbat modul de "autentificare" si modul de preluare propus de torpila123 (multumesc) nu mai fumctioneaza.

In cookies / REQUEST HEADER au aparut campuri noi si inca nu am reusit sa le nimeresc pe cele corecte.

 

Daca cineva a reusit sa afle noua combinatie pentu a accesa mfinante.ro/infocodfiscal.html il rog daca poate sa-l partajeze si catre noi.

 

Link to comment
Share on other sites

Folositi link-ul, in care introduceti codul fiscal al firmelor pe care vreti sa le verificati. In cazul de fata, codul fiscal introdus/folosit este 4430779

http://www.mfinante.ro/infocodfiscal.html?pagina=domenii&cod=4430779&B1=VIZUALIZARE

 

se inlocuieste in link codul fiscal cu un cod fiscal valid, cum ar fi 19039834

 

http://www.mfinante.ro/infocodfiscal.html?pagina=domenii&cod=19039834&B1=VIZUALIZARE

Edited by Sithalkes
  • Upvote 2
Link to comment
Share on other sites

Mulțumesc pentru noul link.
Ca și cel precedent cred că funcționează doar dacă execuți JavaScript.

Am folosit SoapUI pentru a trimite un REST astfel:

GET http://www.mfinante.ro/infocodfiscal.html?pagina=domenii&cod=4430779&B1=VIZUALIZARE HTTP/1.1
Accept-Encoding: gzip,deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0) Gecko/20100101 Firefox/10.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Content-Type: application/x-www-form-urlencoded
Referer: http://google.ro/','Cookie: __utma=1.2053247208.1325888509.1325888509.1326646749.2; __utmz=1.1325888509.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); itemMarking_forums_items=eJxLtDK0qs60MjS2MLAGUkbmlkaGlgZmZta1XDBbbAaS; cc=ro; __utmb=1.1.10.1326646749; __utmc=1; PHPSESSID=t3kdcc4q1s32fkke5vp65vkhu2; session_id=0ac8d838db333fd503a96089e36a693e
Host: www.mfinante.ro
Connection: Keep-Alive

și răspunsul primit este:

<html>
   <head>
      <meta content="HTML Tidy for Java (vers. 26 Sep 2004), see www.w3.org" name="generator"/>
      <meta content="no-cache" http-equiv="Pragma"/>
      <meta content="-1" http-equiv="Expires"/>
      <meta content="no-cache" http-equiv="CacheControl"/>
      <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
      <link href="data:;base64,iVBORw0KGgo=" rel="shortcut icon"/>
      <script type="text/javascript">(function(){
    var securemsg;
    var dosl7_common;

window["bobcmn"] = "1111101111101020000000220000000520000000025705570d20000009630000000030000019ehttp%3a%2f%2fgoogle.ro%2f'%2c'Cookie%3a%20__utma%3d1.2053247208.1325888509.1325888509.1326646749.2%3b%20__utmz%3d1.1325888509.1.1.utmcsr%3d(direct)|utmccn%3d(direct)|utmcmd%3d(none)%3b%20itemMarking_forums_items%3deJxLtDK0qs60MjS2MLAGUkbmlkaGlgZmZta1XDBbbAaS%3b%20cc%3dro%3b%20__utmb%3d1.1.10.1326646749%3b%20__utmc%3d1%3b%20PHPSESSID%3dt3kdcc4q1s32fkke5vp65vkhu2%3b%20session_id%3d0ac8d838db333fd503a96089e36a693e300000006/TSPD/300000008TSPD_101300000004http200000000200000000";

window.OIv=!!window.OIv;try{(function(){try{var jj,Jj,Lj=1,sj=1,Sj=1,ij=1,Ij=1,OJ=1,zJ=1,SJ=1;for(var iJ=0;iJ</script>
      <title/>
   </head>
   <body>
      JL;if(O)return Sl(!1);O=oL&amp;&amp;LL+ZL&lt;_L.length;++jo)iL(_L[jo]);Sl(!1!==window.OIv);(function(){var J={decrypt:function(J){try{return JSON.parse(function(J){J=J.split("l");var O="";for(var Z=0;ZJ}function L(J){var O=arguments.length,Z=[];for(var S=1;S>b>>0}; })();
      <script src="/TSPD/08b919fd7aab200007385e7684345fd6173ee30fc7b77b98ee1fb050736414c5d27389175fce1d7c?type=8" type="text/javascript"/>
      <script type="text/javascript">(function(){
    var securemsg;
    var dosl7_common;

window["blobfp"] = "1111111110112000003e825d0550f830000004a406ac5882f87d615005a93e4d900001c204f52683a4c8e8f07d229401083012caa72fb71e0300000020http://re.security.f5aas.com/re/";


})();</script>
      <script src="/TSPD/08b919fd7aab200007385e7684345fd6173ee30fc7b77b98ee1fb050736414c5d27389175fce1d7c?type=11" type="text/javascript"/>
      <noscript>Please enable JavaScript to view the page content.</noscript>
   </body>
</html>

Este cineva are un exemplu funcțional a unui apel REST fără a executa JavaScript și dacă dorește să-l posteze aici. Mulțumesc anticipat.

Edited by Stefan99
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...