Salam hər vaxtınız xeyir dəyərli oxucular, bu gün İrəli səviyyə Enumeration başlığı altında SMTP protokulunun ətraflı bir Enumeration yerinə yetirəcəyik.Əvvəlcə nəzəri sonra isə Metasploitable maşının köməyi ilə əməliyyatları praktiki olaraq görəcəyik.
Telegram kanalına qoşularaq bu və digər mövzular üzrə quizlərdə iştirak edə bilərsiniz!
Telegram (Kanal): https://t.me/xakeraz_official
Elektron Poçt Protokolları
Biz Penetration testlərində qarşılaşacağımız və bilməli olduğumuz 3 əsas elektron poçt protokolu vardır. Bunlar aşağıdakılardır:
- SMTP (Simple Mail Transfer Protocol) – Elektron məktubların göndərilməsi üçün istifadə olunan sadə protokoldur.TCP protokolu üzərində 25 portundan istifadə edir, SSL olaraq şifrələmə yerinə yetirərsə 456 portundan istifadə edir.
- POP3 (Post Office Protocol V3) – Elektron məktubların əldə edilməsi üçün istifadə olunan protokoldur və 110 portundan istifadə edir.POP3 SSL şifrələməsi yerinə yetirərsə 995 portundan istifadə edir.
- İMAP4 (İnternet Message Access Protocol V4) – Elektron məktubların və poçtun idarə edilməsi protokoludur, məktubları və serverin düzgün saxlanmasından və məktubların idarə edilməsinə cavabdhdir.Adi halda TCP üzərində 445 SSL şifrələmə yerinə yetirərsə 993 portundan istifadə olunur.
SMTP (Port 25)
Həmişə olduğu kimi zəifliyi Metasploitable maşınında axtaracayıq, axtarışa və məlumat yığma mərhələsinə keçmədən nə axtardığımız bilək.
- Hədəf sistemdə olan servisin VRFY kommandasını təsdiqlədiyini yoxlamaq , bu istifadəçilərin skan edilməsi üçün vacibdir.
- Həmin servisin versiyasına uyğun exploit (istismar) olduğunu yoxlamaq.
SMTP Nmap ilə skan edilməsi
Hədəf sistemdə olan SMTP servisin haqqında müəyyən təzəhür əldə etmək üçün sadə skandan istifadə etdim.
└─# nmap -T4 -p25 -sV -sC 192.168.10.36
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-26 01:13 +04
Nmap scan report for 192.168.10.36
Host is up (0.00064s latency).
PORT STATE SERVICE VERSION
25/tcp open smtp Postfix smtpd
|_ssl-date: 2025-03-25T21:14:10+00:00; +10s from scanner time.
| sslv2:
| SSLv2 supported
| ciphers:
| SSL2_DES_192_EDE3_CBC_WITH_MD5
| SSL2_RC4_128_WITH_MD5
| SSL2_RC2_128_CBC_EXPORT40_WITH_MD5
| SSL2_DES_64_CBC_WITH_MD5
| SSL2_RC4_128_EXPORT40_WITH_MD5
|_ SSL2_RC2_128_CBC_WITH_MD5
|_smtp-commands: metasploitable.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN
Nmap skanı nəticələrinə əsasən bu fikirə gələ bilərik:
- Biz hədəf servisin VRFY kommandasını dəstəklədiyini gördük, bu o deməkdir ki biz istifadəçiləri skan edə biləcəyik.
- SMTP serverinin versiyasını əldə etdik.
Nmap ilə SMTP servisin ətraflı skan edilməsi
İndi isə bütün nmap skriptlərindən istifadə edərək SMTP barədə mümkün bütün məlumatları əldə edəcəyik.
└─# nmap -T4 -p25 -sV --script=smtp* 192.168.10.36
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-26 01:20 +04
Nmap scan report for 192.168.10.36
Host is up (0.00068s latency).
PORT STATE SERVICE VERSION
25/tcp open smtp Postfix smtpd
|_smtp-open-relay: Server doesn't seem to be an open relay, all tests failed
|_smtp-commands: metasploitable.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN
| smtp-enum-users:
|_ Method RCPT returned a unhandled status code.
| smtp-vuln-cve2010-4344:
|_ The SMTP server is not Exim: NOT VULNERABLE
MAC Address: 00:0C:29:50:35:26 (VMware)
Service Info: Host: metasploitable.localdomain
Nmap skanına əsasən bu nəticələrə gələ bilərik:
- Nmap hədəf servisin istifadəçilərin siyahısını əldə edə bilmir (Nmap bu hücumda RCPT metodundan istifadə edir.)
- Görə bilərikki, hədəf servis smtp-vuln-cve2010-4344 zəifliyi yoxdur.
İstifadəçilərin Skan Edilməsi
Nmap ilə skanlarımızda nmap hədəf servisin istifadəçi məlumatlarını əldə edə bilməmişdi.Gördüyünüz kimi nmap hər zaman bizim işimizi görməyə bilər.
Birinci nmap skanından bildiyimiz kimi VRFY kommandası hədəf servisdə istifadəçilərin skan edilməsi üçün istifadə olunurdu.Biz netcat ilə hədəfə qoşulub bunu praktiki yerinə yetirəcəyik.Hədəf servisə daxil olub iki istifadəçini axtaracayıq:
- servisdə olmayan rose13 istifadəçisini
- servisdə olan root istifadəçisini
┌──(root㉿kali)-[~]
└─# nc 192.168.10.36 25
220 metasploitable.localdomain ESMTP Postfix (Ubuntu)
VRFY 13rose
550 5.1.1 <13rose>: Recipient address rejected: User unknown in local recipient table
VRFY root
252 2.0.0 root
^C
İstifadə etdyimiz metodologiya manueldir,yəni özümüz bir-bir yoxlayırıq.Bu isə professional sayılmır, buna görədə bu işi avtomatikləşdirmək lazımdır.Avtomatik skan əməliyyatı üçün Metasploit alətinin smtp_enum modulundan istifadə edə bilərik:
msf6 > use auxiliary/scanner/smtp/smtp_enum
msf6 auxiliary(scanner/smtp/smtp_enum) > set rhosts 192.168.10.36
rhosts => 192.168.10.36
msf6 auxiliary(scanner/smtp/smtp_enum) > run
[*] 192.168.10.36:25 - 192.168.10.36:25 Banner: 220 metasploitable.localdomain ESMTP Postfix (Ubuntu)
[+] 192.168.10.36:25 - 192.168.10.36:25 Users found: , backup, bin, daemon, distccd, ftp, games, gnats, irc, libuuid, list, lp, mail, man, mysql, news, nobody, postfix, postgres, postmaster, proxy, service, sshd, sync, sys, syslog, user, uucp, www-data
[*] 192.168.10.36:25 - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
Yenədə avtomatik alətdən dəqiq bir informasiya əldə etmədik.Fikir versəniz əvvəlki başlıqda VRFY kommandasından istifadə edərək istifadəçi skanı edirdik,Metasploit isə bu haqda bizə bunu bildirmədi. İndi isə proqramlaşdırma dillərinin işə düşdüyü zamandır.Hədəfsin servisindəki istifadəçiləri skan etmək və ətraflı məlumat əldə etmək üçün aşağıdakı Python skriptindən istifadə edək. (Python barədə ətraflı gələcək paylaşımlarda məlumat əldə edəcəyik)
import socket
import sys
import os
# Specify below your default, fallback wordlist
DEFAULT_WORDLIST = '/root/data/fuzzdb/wordlists-user-passwd/names/namelist.txt'
DEFAULT_TIMEOUT = 20
def interpret_smtp_status_code(resp):
code = int(resp.split(' ')[0])
messages = {
250:'Requested mail action okay, completed',
251:'User not local; will forward to <forward-path>',
252:'Cannot VRFY user, but will accept message and attempt delivery',
502:'Command not implemented',
530:'Access denied (???a Sendmailism)',
550:'Requested action not taken: mailbox unavailable',
551:'User not local; please try <forward-path>',
}
if code in messages.keys():
return '({} {})'.format(code, messages[code])
else:
return '({} code unknown)'.format(code)
def vrfy(server, username, port, timeout, brute=False):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(timeout)
try:
conn = s.connect((server, port))
except socket.error, e:
print '[!] Connection failed with {}:{} - "{}"'.format(server, port, str(e))
return False
try:
print '[+] Service banner: "{}"'.format(s.recv(1024).strip())
s.send('HELO [email protected]\r\n')
print '[>] Response for HELO from {}:{} - '.format(server, port) + s.recv(1024).strip()
except socket.error, e:
print '[!] Failed at initial session setup: "{}"'.format(str(e))
return False
if brute:
print '[?] Engaging brute-force enumeration...'
if brute:
for i in range(len(username)):
user = username[i]
s.send('VRFY ' + user + '\r\n')
res = s.recv(1024).strip()
print '({}/{}) Server: {}:{} | VRFY {} | Result: [{}]'.format(
i, len(username), server, port, user, interpret_smtp_status_code(res))
else:
s.send('VRFY ' + username + '\r\n')
res = s.recv(1024).strip()
print '[>] Response from {}:{} - '.format(server, port) + interpret_smtp_status_code(res)
if 'User unknown' in res:
print '[!] User not found.'
elif (res.startswith('25') and username in res and '<' in res and '>' in res):
print '[+] User found: "{}"'.format(res.strip())
else:
print '[?] Response: "{}"'.format(res.strip())
s.close()
if __name__ == '__main__':
if len(sys.argv) < 2:
print '[?] Usage: smtpvrfy.py <smtpserver> [username|wordlist] [timeout]'
print '\t(to specify a port provide it after a colon \':\' in server parameter)'
sys.exit(0)
server = sys.argv[1]
port = 25 if ':' not in server else int(server[server.find(':')+1:])
username = sys.argv[2] if len(sys.argv) >= 3 else DEFAULT_WORDLIST
timeout = DEFAULT_TIMEOUT if len(sys.argv) < 4 else int(sys.argv[3])
if os.path.isfile(username):
names = []
with open(username, 'r') as f:
for a in f:
names.append(a.strip())
print '[>] Provided wordlist file with {} entries.'.format(len(names))
vrfy(server, names, port, timeout, brute=True)
else:
vrfy(server, username, port, timeout)
┌──(root㉿kali)-[~/Desktop]
└─# python2 vrfychecker.py 192.168.10.36 users.txt 20
[>] Provided wordlist file with 11 entries.
[+] Service banner: "220 metasploitable.localdomain ESMTP Postfix (Ubuntu)"
[>] Response for HELO from 192.168.10.36:25 - 250 metasploitable.localdomain
[?] Engaging brute-force enumeration...
(0/11) Server: 192.168.10.36:25 | VRFY james | Result: [(550 Requested action not taken: mailbox unavailable)]
(1/11) Server: 192.168.10.36:25 | VRFY rose13 | Result: [(550 Requested action not taken: mailbox unavailable)]
(2/11) Server: 192.168.10.36:25 | VRFY xaker | Result: [(550 Requested action not taken: mailbox unavailable)]
(3/11) Server: 192.168.10.36:25 | VRFY ftp | Result: [(252 Cannot VRFY user, but will accept message and attempt delivery)]
(4/11) Server: 192.168.10.36:25 | VRFY lp | Result: [(252 Cannot VRFY user, but will accept message and attempt delivery)]
(5/11) Server: 192.168.10.36:25 | VRFY mail | Result: [(252 Cannot VRFY user, but will accept message and attempt delivery)]
(6/11) Server: 192.168.10.36:25 | VRFY dns | Result: [(550 Requested action not taken: mailbox unavailable)]
(7/11) Server: 192.168.10.36:25 | VRFY service | Result: [(252 Cannot VRFY user, but will accept message and attempt delivery)]
(8/11) Server: 192.168.10.36:25 | VRFY sys | Result: [(252 Cannot VRFY user, but will accept message and attempt delivery)]
(9/11) Server: 192.168.10.36:25 | VRFY syslog | Result: [(252 Cannot VRFY user, but will accept message and attempt delivery)]
(10/11) Server: 192.168.10.36:25 | VRFY nobody | Result: [(252 Cannot VRFY user, but will accept message and attempt delivery)]
Bax buna əsl ətraflı skan deyə bilərik.Göründüyü kimi hansı istifadəçilərin servisdə olub olmadığı skriptdən əldə edilmiş nəticə ilə görə bilərik.
Ümidvaram faydalı olmuşdur.Təşəkkürlər!
Bizi izləyin:
Telegram (Kanal): https://t.me/xakeraz_official
Paylaşımların səliqəli yığılmış halı: https://t.me/xakerazgroup
Fikir və şərhləriniz : https://t.me/xakerazchat