1. 程式人生 > >路由器密碼和上網賬號密碼都忘記了怎麼辦,可以通過模擬PPPoE協議從路由器獲取

路由器密碼和上網賬號密碼都忘記了怎麼辦,可以通過模擬PPPoE協議從路由器獲取

假如忘記了上網賬號和密碼,最簡單的就登上路由器看看就知道,但如果路由器的祕密也忘記該怎麼辦?

還有個辦法就是通過模擬PPPoE協議從路由器獲取。

路由器通常是通過PPPoE協議接入網路,在路由器連通時不斷髮送PPPoE請求,我們可以模擬成PPPoE伺服器傳送響應,誘導路由器給我們傳送賬號和密碼。

首先介紹一個路由器從傳送請求到傳送驗證資訊,即賬號密碼都有哪些過程。

路由器PPPoE請求過程

上圖是用wireshark抓包,這些包直接電腦用網線臉上路由器就可以抓得到。步驟不多,協議內容也很簡單,都是基於乙太網封裝的報文。

PADI   路由器不斷廣播發出,初始化,目的是尋找可供的PPPoE服務initiation

PADO  伺服器向路由器的響應,提供自己的資訊並響應提供服務offer

PADR  路由器收到PADO後發出請求報文

PADS 伺服器返回請求響應,主要是傳送sessionID,以便接下來的PPP對話

以上報文主要目的便是尋找服務和取得sessionID

接下來幾個報文時路由器在跟伺服器協商通訊設定,當雙方都發出Request並收到對方的Ack後路由器就會發送驗證報文,及賬號密碼了。

接下來一次看看這些個報文分別長什麼樣,不同路由器可能有一定程度區別,但本質上是一致的。

PADI

PADI

前12個位元組分別是目標mac地址和源mac地址,0x8863代表以下報文是PPPoE Discovery報文。wireshark已經分得很清晰了,而且這個報文是最好獲取的。主要就是payload內容PPPoE Tags會帶上一個Host-Uniq選項,這個是用來標識PADO報文響應來自於哪個請求。

PADO


需要修改的地方有,乙太網封裝的源地址和目的地址,PPPoED報文的Code改為0x07,除了來自PADI的Host-Uniq外,新增幾個payload資訊,AC-Cookie資訊0020 行的 01 04表示接下來是AC-Cookie標籤,00 10 表示該標籤的長度問 0x10,即16個位元組,這個長度並不是固定的,然後是AC-Name,和上面同理。

PADR


PADR會帶著一個新的Host-Uniq過來請求,所以這個依然要儲存下來。PADR的Code是0x19,AC-Cookie便是PADO傳送的標籤資訊了。

PADS


PADS是PPPoED的最後一步,給路由器傳送sessionID,這個報文主要不同的地方在於它的session ID不是0x0000了,而是一個由伺服器給出的佔用兩個位元組數,這個sessionID用於之後的PPP通訊辨識,之後的每個報文都會帶上這個sessionID。報文Code為0x65,Host-Uniq來自PADR。

所有的報文長度資訊都要記得根據自己的payload長度進行更改,不然的話報文格式錯誤,路由器就有可能會不理你的。

如果順利的話,接下來路由器會發送Configuration Request,這裡最簡單的做法就是自己找個可行的設定資訊,按照這個寫出報文請求報文和ack報文傳送過去,如果路由器同意的話,那就完工了,路由器就會把賬號密碼發過來驗證。下面兩個報文是我測試並在我的路由器上成功獲得賬號密碼的設定資訊報文。因為Request報文和Ack報文只有一個位元組不同,所以需要修改的地方非常少。

Request請求報文


Ack響應報文


在雙方達成協議後就順利的到賬號和密碼了呢。都是明文,所以很好辨別,是不是很激動!!!


抓包和發包我是用的Python的scapy模組寫的,功能很強大,以後肯定還會有需要用到的地方。程式碼的話我覺得最好還是根據自己路由器的具體情況寫,針對性的寫也比較簡單,否則要麼太複雜,耗時間,要麼侷限性太大,不好用。