• 使用Scapy框架进行PPPOE拨号密码截取


    原创文章,转载请注明出处。

    PPPoE 协议是什么

    • Point to Point Protocol over Ethernet (点对点协议)
    • 只要记住你平时拨号上网用的是这个协议就行啦(ADSL)

    PPPoE 协议工作原理

    1. PPPoE发现阶段(Discovery)
      • 主机广播发起分组(PADI)
      • 有效发现提供包分组(PADO)
      • 有效发现请求分组(PADR)
      • 有效发现会话确认(PADS)
    2. PPPoE会话阶段(Session)
      • LCP协议请求确认配置(LCP-Config-Req)
      • LCP协议确认配置(LCP-Config-Ack)
      • PAP或CHAP验证账号密码
      • 开始进行网络传输

    上面可以看到,如果我们在会话阶段的第3步动点手脚,就可以截取到拨号的账号密码

    截取原理

    1. 由于PPPoE发现阶段(PADI)发送的是广播包(MAC地址为FFFFFF),我们的网络距离肯定是比ISP的PPPoE服务器近的,所以我们可以比ISP先收到PADI包
    2. 收到PADI包后我们可以伪装为一个正常的PPPoE服务器开始和客户端交互
    3. 伪装PADO,PADS,LCP-Config-Ack后。客户端就认为我们是一个有效的PPPoE服务器,开始进行PAP或CHAP验证
    4. 由于CHAP验证不是明文,所以我们要让客户端认证方式变为PAP(LCP-Config-Ack阶段申明只支持PAP)
    5. 等到PAP会话开始时,就可以正常收到拨号账号密码,我们只需要返回密码错误就可以啦

    使用Python的Scapy实现

    • 安装Scapy pip install scapy
    • 安装scapy依赖包,Windows平台请戳我
    • 监听网络请求 scapy.sniff
    • 处理PPPoE包 (过滤type 为 0x88630x8863 的 数据包)

    完整代码戳我

    参考文献

  • 相关阅读:
    五步搞定Android开发环境部署
    centos7安装MongoDB3.4
    java数据结构之三叉链表示的二叉树
    java数据结构之二叉树遍历的非递归实现
    java数据结构之二叉树的定义和递归实现
    java数据结构之树
    java数据结构之递归算法
    java数据结构之(堆)栈
    redis主从复制配置
    Redis 发布订阅
  • 原文地址:https://www.cnblogs.com/Karblue/p/5223240.html
Copyright © 2020-2023  润新知