现在某些路由器有从旧路由器自动学习宽带账户密码功能,
哇为路由截图.jpeg

目前大部分宽带拨号使用的PPP认证类型还是基于明文的PAP验证,只要伪装成PPPoE服务器,完成握手过程,就能获得路由器上的宽带账户与密码。

PPPoE

PPPoE是在以太网中实现PPP的数据链路层协议,数据帧结构如图
PPPoE帧.jpg

  • Len/Type字段标识PPPoE的连接阶段
  • Ver字段恒为0x01
  • Type字段恒为0x01
  • Code字段表明帧的类型
  • SessionID字段标识当前会话,由服务端在PADS阶段生成
  • Length字段表明接下来Payload的长度
  • Payload在发现阶段携带额外数据,比如服务器名;在PPP会话携带PPP内容

PPPoE发现阶段

PADI

当路由器上电后,路由器会以一定的间隔广播PADI包
code为0x09,Session ID为0x00
PADI.png

PADO

服务器接受到广播包后,获得路由器MAC地址,并向路由器发送PADO包
code为0x07,Session ID为0x00
PADO.png

PADR

路由器接受到来自服务器的PADO后,获得服务器MAC地址,并向服务器发送PADR包
code为0x19,Session ID为0x00
PADR.png

PADS

服务器收到PADR后,随机生成一个Session ID,放入PADS包发给路由器
code为0x65,Session ID为随机生成数字
PADS.png

到此PPPoE发现阶段结束

PPPoE会话阶段

LCP Configuration Request

告知对方最大接收单元(MRU),认证协议,一个标识连接的MagicNumber
LCPCR.png

LCP Configuration Ack

表示支持对方的认证协议,返回的Options应该与对方发过来的一致
LCPACK.png

PAP Authentication Protocol

Authentication-Request

此报文将会明文携带拨号账户与密码,在Peer-ID和Password字段中提取即可
PAPRequest.png

结束会话

由于我们已经拿到账户密码,后续会话保持就不需要了
我们直接发送PAP Authentication-NAK告知对方密码错误(得了便宜还卖乖
Authentication-NAK.png
然后发送LCP Termination Request结束LCP会话
Termination-Request.png

相关工具

我用Golang写了一个工具实现以上过程以获取账户密码,请合法使用:
https://github.com/ZHLHZHU/PPPoE_Account
PPPoE_Account

参考

标签: none

仅有一条评论

  1. 本文原本是打算在一月份写发布,但是由于博主咕咕咕不得不被封存,现在都四月份了,没想到终于在这里发布了,👴🏻很感动

添加新评论