SMTP用戶枚舉原理簡介及相關工具
原標題:SMTP用戶枚舉原理簡介及相關工具
*本文作者:lemurhhh,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。
前言
SMTP是安全測試中比較常見的服務類型,其不安全的配置(未禁用某些命令)會導致用戶枚舉的問題,這主要是通過SMTP命令進行的。本文將介紹SMTP用戶枚舉原理以及相關工具。
SMTP SMTP命令
若伺服器未禁用某些特殊命令,則可以利用這些特殊命令枚舉用戶,主要是MAIL FROM、RCPT TO、ETRN、VRFY指令。
SMTP命令 命令功能 MAIL FROM 指定發件人地址 RCPT TO 指定單個的郵件接收人;可有多個 RCPT TO;常在 MAIL FROM命令之後 VRFY 用於驗證指定的用戶/郵箱是否存在;由於安全原因,伺服器常禁止此命令 EXPN 驗證給定的郵箱列表是否存在,也常被禁用 SMTP返回碼
執行上面的SMTP命令,通過其返回碼可以判斷用戶是否存在。主要是250和550狀態。
返回碼 含義 250 要求的郵件操作完成 550 要求的郵件操作未完成,郵箱不可用(例如,郵箱未找到,或不可訪問)
(文末附所有返回碼)
手動枚舉用戶名
通過上面的介紹,我們可以通過Telnet連接,在未禁用上述SMTP命令的伺服器上,使用上述命令手動枚舉用戶名。通過shodan等可以找到開放SMTP的伺服器。
VRFY命令
$ telnet 202.38.xxx.xxx 25
Trying 202.38.xxx.xxx...
Connected to 202.38.xxx.xxx.
Escape character is "^]".
220 mxt.xxx.xxx.cn ESMTP Postfix
VRFY root
252 2.0.0 root
VRFY bin
252 2.0.0 bin
VRFY admin
550 5.1.1 : Recipient address rejected: User unknown in local recipient table
MAIL FROM+RCPT TO命令
$ telnet 202.38.xxx.xxx 25
Trying 202.38.xxx.xxx...
Connected to 202.38.xxx.xxx.
Escape character is "^]".
220 mxt.xxx.xxx.cn ESMTP Postfix
MAIL FROM:root
250 2.1.0 Ok
RCPT TO:root
250 2.1.5 Ok
RCPT TO:bin
250 2.1.5 Ok
RCPT TO:admin
550 5.1.1 : Recipient address rejected: User unknown in local recipient table
可以看到兩種方式均返回root、bin用戶是存在的,admin用戶不存在。
smtp-user-enum工具
smtp-user-enum是kali自帶的,使用Perl編寫的工具,其原理就是通過上述的三種命令枚舉用戶賬戶。
參數 Usage: smtp-user-enum.pl [options] ( -u username | -U file-of-usernames ) ( -t host | -T file-of-targets )
options:
-m 最大線程數(默認: 5)
-M 使用方法方式 EXPN, VRFY or RCPT (默認: VRFY)
-u 指定用戶
-f 郵箱地址,只能用在 "RCPT TO" mode (默認: user@example.com)
-D 使用電子郵件地址添加到用戶列表在域 (默認: none)使用郵箱代替用戶名,比如:"-D example.com"域來使用代替testA@example.com, testB@example.com
-U 通過smtp服務指定文件里的用戶名檢查
-t 指定主機來運行smtp伺服器主機服務
-T 指定文件來運行smtp伺服器主機服務
-p 設置TCP埠號 (默認: 25)
-d 調試
-t 最大返回時間 (default: 5)
-v 版本
-h 幫助
文檔:http://pentestmonkey.net/tools/user-enumeration/smtp-user-enum。
示例
VRFY方式
$ smtp-user-enum -M VRFY -u root -t 202.38.xxx.xxx
Starting smtp-user-enum v1.2 ( http://pentestmonkey.net/tools/smtp-user-enum )
----------------------------------------------------------
| Scan Information |
----------------------------------------------------------
Mode ..................... VRFY
Worker Processes ......... 5
Target count ............. 1
Username count ........... 1
Target TCP port .......... 25
Query timeout ............ 5 secs
Target domain ............
######## Scan started at Fri Aug 24 09:37:15 2018 #########
202.38.xxx.xxx: root exists
######## Scan completed at Fri Aug 24 09:37:15 2018 #########
1 results.
1 queries in 1 seconds (1.0 queries / sec)
RCPT方式
$ smtp-user-enum -M RCPT -u bin -t 202.38.xxx.xxx
Starting smtp-user-enum v1.2 ( http://pentestmonkey.net/tools/smtp-user-enum )
----------------------------------------------------------
| Scan Information |
----------------------------------------------------------
Mode ..................... RCPT
Worker Processes ......... 5
Target count ............. 1
Username count ........... 1
Target TCP port .......... 25
Query timeout ............ 5 secs
Target domain ............
######## Scan started at Fri Aug 24 09:37:44 2018 #########
202.38.xxx.xxx: bin exists
######## Scan completed at Fri Aug 24 09:37:44 2018 #########
1 results.
1 queries in 1 seconds (1.0 queries / sec)
EXPN方式(目標伺服器禁用了該方法)
$ smtp-user-enum -M EXPN -u bin -t 202.38.xxx.xxx
Starting smtp-user-enum v1.2 ( http://pentestmonkey.net/tools/smtp-user-enum )
----------------------------------------------------------
| Scan Information |
----------------------------------------------------------
Mode ..................... EXPN
Worker Processes ......... 5
Target count ............. 1
Username count ........... 1
Target TCP port .......... 25
Query timeout ............ 5 secs
Target domain ............
######## Scan started at Fri Aug 24 09:37:53 2018 #########
######## Scan completed at Fri Aug 24 09:37:53 2018 #########
0 results.
1 queries in 1 seconds (1.0 queries / sec)
與手工測試的相同,root與bin用戶是存在的。由最後的EXPN方式的結果可以看到,該工具不返回結果,不一定是由於不存在測試的賬戶,還可能是由於伺服器禁用了該方式對應的命令,這時可以考慮使用手工方式通過返回的狀態碼進一步確定原因(文末附所有返回碼)。
metasploit輔助模塊:smtp_enum
metasploit有輔助模塊smtp_enum,可以基於字典枚舉smtp用戶名。設置比較簡單,主要是常規的遠程主機地址、埠號、用戶名字典、線程數等。其中的UNIXONLY是用於設置是否跳過對微軟系的測試,這是由於Windows的SMTP服務命令稍有不同(請見:https://technet.microsoft.com/zh-cn/library/aa996114(v=exchg.65).aspx)
msf > use auxiliary/scanner/smtp/smtp_enum
msf auxiliary(scanner/smtp/smtp_enum) > show options
Module options (auxiliary/scanner/smtp/smtp_enum):
Name Current Setting Required Deion
---- --------------- -------- -----------
RHOSTS yes The target address range or CIDR identifier
RPORT 25 yes The target port (TCP)
THREADS 1 yes The number of concurrent threads
UNIXONLY true yes Skip Microsoft bannered servers when testing unix users
USER_FILE /usr/share/metasploit-framework/data/wordlists/unix_users.txt yes The file that contains a list of probable users accounts.
msf auxiliary(scanner/smtp/smtp_enum) > set rhosts 202.38.xxx.xxx
rhosts => 202.38.xxx.xxx
msf auxiliary(scanner/smtp/smtp_enum) > run
[*] 202.38.xxx.xxx:25 - 202.38.xxx.xxx:25 Banner: 220 mxt.xxx.xxx.cn ESMTP Postfix
[+] 202.38.xxx.xxx:25 - 202.38.xxx.xxx:25 Users found: adm, avahi, avahi-autoipd, bin, daemon, fax, ftp, games, gdm, gopher, haldaemon, halt, lp, mail, news, nobody, operator, postgres, postmaster, root, sshd, sync, uucp, webmaster, www
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
可以看到枚舉出了許多的用戶名,通過其中的ftp、gopher、www等,可以猜測到伺服器運行著相關的服務,這對後續的測試有很大的價值。
nmap腳本 :smtp-enum-users
nmap也有名為smtp-enum-users的掃描腳本可供使用。這是nmap對同一伺服器枚舉出的用戶名。可以通過–-args smtp-enum-users.methods={EXPN,RCPT,VRFY}設置掃描方式。如果未指定,按照RCPT、VRFY、EXPN的順序進行測試。通過–-args userdb=user_path,passdb=pass_path指定字典。
$ nmap -p 25 -- smtp-enum-users.nse 202.38.193.203
Starting Nmap 7.70 ( https://nmap.org ) at 2018-08-24 10:23 CST
Nmap scan report for news.scut.edu.cn (202.38.193.203)
Host is up (0.054s latency).
PORT STATE SERVICE
25/tcp open smtp
| smtp-enum-users:
| root
| admin
| administrator
| webadmin
| sysadmin
| netadmin
| guest
| user
| web
|_ test
Nmap done: 1 IP address (1 host up) scanned in 1.27 seconds總結
通過上面的簡介,可以看出若伺服器未對SMTP服務做安全的配置,則容易通過SMTP用戶枚舉獲取用戶名,並結合一些典型服務的默認用戶名,為後續的測試提供系統的相關信息。
附錄:SMTP返回碼 返回碼 含義 500 格式錯誤,命令不可識別(此錯誤也包括命令行過長) 501 參數格式錯誤 502 命令不可實現 503 錯誤的命令序列 504 命令參數不可實現 211 系統狀態或系統幫助響應 214 幫助信息 220 服務就緒 221 服務關閉傳輸信道 421 服務未就緒,關閉傳輸信道(當必須關閉時,此應答可以作為對任何命令的響應) 250 要求的郵件操作完成 251 用戶非本地,將轉發向 450 要求的郵件操作未完成,郵箱不可用(例如,郵箱忙) 550 要求的郵件操作未完成,郵箱不可用(例如,郵箱未找到,或不可訪問) 451 放棄要求的操作;處理過程中出錯 551 用戶非本地,請嘗試 452 系統存儲不足,要求的操作未執行 552 過量的存儲分配,要求的操作未執行 553 郵箱名不可用,要求的操作未執行(例如郵箱格式錯誤) 354 開始郵件輸入,以.結束 554 操作失敗 535 用戶驗證失敗 235 用戶驗證成功 334 等待用戶輸入驗證信息
*本文作者:lemurhhh,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。
※巴以衝突再升級,這次導火索竟然是一款交(yue)友(pao)APP
TAG:黑客與極客 |