pppoe密码嗅探是一个老话题了。苦于没有环境(懒),今天刚有机会实操一下,简单记录。

前言

舍友跑路了,之前路由器都是他管理的。不知心理原因还是如何,感觉网络不太稳定,遂想重置一下路由器,可是宽带密码多少来着?想起路由器现在都带有密码的自动获取功能(两路由器相连),推测PPPOE也是一个明文协议,我决定嗅探一下。

尝试

首先将路由器的wan接入电脑的网线口,打开wireshark。只看到一堆PPPOE的PADI包,但是并没有要发送密码的意思。会不会需要服务器做回应才行呢?

于是我找到了两个用代码模拟pppoe服务的项目。

https://github.com/Karblue/PPPoE-hijack

6年前的项目。还是python2的。不过可能scapy版本问题,亦或者其他原因。在line 122 一直报错。

    #发送lcp-config-req回执包
    def send_lcp_req_packet(self, raw):
        #实际client payload
        raw = copy.deepcopy(raw)
        raw.dst, raw.src = raw.src, raw.dst
        _rawnLoad = raw.load

https://github.com/LuckyC4t/pppoe-hijack-go

该项目号称上面的go重构,基于go的跨平台特性。我在服务器上编译了exe文件后拖回本地。执行提示2021/09/05 xx:xx:xx Realtek USB GbE Family Controller #2: No such device exists (No such device exists),而后一番debug,发现原来是pcap.OpenLive中device的参数在windows下是需要网卡参数为\Device\NPF_{xxxxx}格式。最后终于能跑起来了,但是一直陷入了

Received LCP-Config-Req
send LCP Ack packet...
send LCP Reject packet...

中。于是我尝试变换思路,既然代码伪造pppoe有问题,那我为什么不能安装一个pppoe的server呢?于是尝试在windows子系统中安装。不过无论如何也不能启动pppoe-server。

$ pppoe-server
pppoe: socket: Address family not supported by protocol

于是只好拿出我雪藏已久的deepin真机,一发入魂。

## 安装pppoe并创建用户
apt update
apt install -y pppoe tshark
touch /etc/ppp/pppoe-server-options
echo "require-pap" > /etc/ppp/pppoe-server-options
echo "lcp-echo-interval 10" >> /etc/ppp/pppoe-server-options
echo "lcp-echo-failure 2" >> /etc/ppp/pppoe-server-options
echo "* * * *" > /etc/ppp/pap-secrets
## 启动服务与抓包,需要配置eth0为真实网卡
/usr/sbin/pppoe-server -L 10.5.5.1 -R 10.5.5.10 -I eth0 -S yyf
tshark -i eth0 -Y "pap.password" -l -T fields -e pap.peer_id -e pap.password

注意:我们会收到很多的密码,因为路由器内置了多种加密、编码认证方式。比如用户名加前缀、密码md5等。取较多重合部分的就是真正的用户名与密码了。

ref:

https://github.com/xxxNull/PPPoE-hijack

https://github.com/qingxp9/PPPoE-Phisher/

https://github.com/LuckyC4t/pppoe-hijack-go

https://www.freebuf.com/articles/wireless/163480.html