[討論] 暴力破解 ptt 任意帳號似乎成為了可能
ptt 最近發了一個功能叫做 /recover
所以我就順手看了一下相關的 source code: https://github.com/ptt/pttbbs/blob/master/mbbsd/recover.cc
詳見: https://www.ptt.cc/SYSOP/M.1603325969.A.7F6
大家都知道 random number 是很容易有機可趁的東西
只要你的 seed 跟算法被知道, 那大多都是可預測的
ptt 的整個登入流程大概是, 接收 client, 然後 fork 出來服務
所以每個 client 都會有獨立的 pid
而 ptt 在 login 時就決定了 random seed
詳見: https://github.com/ptt/pttbbs/blob/7296640ed0d9885c8494b7d63809858996d9e56d/mbbsd/mbbsd.c#L1433
ptt 的 random 算法則是用 glibc 內標準的算法
https://github.com/ptt/pttbbs/blob/master/include/cmdiet.h
recover 功能的流程大概是這樣的:
1. /recover 打下去先給你一段 recaptcha
2. 驗證後輸入 username 以及 email
3. 發 token 到你的 email
4. 驗證 token 並 reset password
其中第一個步驟的 recaptcha 就含有了 random 產生的 text
例如它會給我這段: https://www.ptt.cc/captcha?handle=DefWcEgFufbhWYeGtfTCWaWUaxLWcUwd
handle 後面的 32 位元 text 其實就是由:
https://github.com/ptt/pttbbs/blob/7296640ed0d9885c8494b7d63809858996d9e56d/mbbsd/captcha.c#L190
這裡來的, 這意味著我只要透過暴力方式, 先跟 ptt server 上校正好時間, 那剩餘的變數就是 pid 了
由於這會是第一個 random text, 所以我只要把 mysrand() 內的 srandom(time(NULL) + getpid());
其中的 getpid() 用暴力法, 然後能產生跟我畫面上看到的 32 bytes 字串一樣的值
那等於我已經破解了這個 login session 之後會產生的 random text
之後上面流程中的第四步, 就算我不知道正確的 code (不是 email 本人)
也能破解掉任意使用者並 reset password
因為它也 random text 來的 30 bytes: https://github.com/ptt/pttbbs/blob/7296640ed0d9885c8494b7d63809858996d9e56d/mbbsd/recover.cc#L153
--
PR will be nice
這是我隨意看 code 五分鐘看見的東西 說不定是不可行的, 分享出來給大家討論討論
※ 編輯: kloer (114.36.26.240 臺灣), 10/22/2020 17:53:37推推
媽 我在這裡~
神串流名
太神拉
推
這種問題通常建議等你的pr進了再來分享....
email不是該用戶註冊的嗎? 除非你有辦法進到他信箱
原po不是分享是討論阿XD
不然這種reset本來就只是整個流程的觸發機制而已
對, 標題誇大了 其實是只要知道對方 email 就行了 不用真的需要該 email 權限也能任意拿到可以 reset 密碼的 code
※ 編輯: kloer (114.36.26.240 臺灣), 10/22/2020 18:23:34不好意思沒看清楚 原來是繞過email
例如你知道你同學的 ptt 帳號是 AAAA 然後它的學校信箱是
[email protected]那它大概就能破解了
※ 編輯: kloer (114.36.26.240 臺灣), 10/22/2020 18:24:18其實 email 算相對不難拿的資料後面這段可行的話應該至
少 10% 的使用者因為 id reuse 很好猜,加上 Google 說
不定可以拿到 30%+
代表只要能看到目前註冊信箱就可以改密碼了
啊不對 因為一定要學校信箱所以其實不見得會 reuse 也不
好猜
這種通常會搭配有效性 5分鐘失效
pid 了不起 1 ~ 100k 之間 夠快的電腦數秒間就能快速產生某一個 100k 個 seed 的 handle string 然後直接程式化比對螢幕當下拿到的 string
https://i.imgur.com/oEtAdjV.jpg 我覺得蠻好猜的 XDD
厲害,推
膜拜
推
wow
這很厲害
輸入錯誤三次把i p列為黑名單?
連個proxy可以輕鬆解決樓上的問題
Responsible disclosure = =
可以,這很yoyodiy,直接繞過信箱
所以單純幾個C函式就能破解的意思嗎?
ptt是有source code嗎不然你怎知道實作?
這樣被破解也不能怪人喇主從架構的實作都被知道惹
強
看他的random_text_code實作 有點不OK
它如果每次都把chars用另一個外界拿不到的seed洗牌過
這個漏洞可能就沒用了
上面那個是不是連批踢踢是開源的都不知道
推XDDDD
推
pid 1 ~ 100k 肯定是不夠。站上人數最多是可以到150k的
ㄟ AccountRecovery::GenCode呼叫random_text_code
是不是存過界啦
抖
這種事關資安的隨機還用時間pid之類的來seed也太沒sense
crypto secure random用urandom是基本吧
聽起來zero-day正式開始XD
看第二次才懂在說啥 不過不會操作XD
推 感覺可行(? 拿自己帳號寫POC送PR r XD
推XDDD
怕爆來留名
怎麼沒有用 urandom @@
太神啦
神人
y
拜神
推個
可怕
推
神串留名啊!! 好厲害喔!!
囧,zero-day start
推
冏
推
推
爆
[情報] 200507 TWICE MORE & MORE 專輯配置TWICE THE 9TH MINI ALBUM MORE & MORE 配置 COVER : A、B、C VER. (160X225MM)爆
[情報] TWICE 正規二輯<Eyes wide open> 專輯配置TWICE THE 2ND FULL ALBUM <Eyes wide open> Album Preview Cover:Story、Style、Retro ver.(160X225mm)80
[情報] TWICE "BETWEEN 1&2" Album PreviewTWICE 11TH MINI ALBUM "BETWEEN 1&2" Album Preview 配置 SLEEVE:142x215mm | 4TYPES(Archive、Cryptography、Pathfinder、Complete ver.)71
[請益] 股票抽籤方式想請問股票抽籤方式 是透過什麼亂數方式抽出得獎者 因為常聽到有人常常抽到股票 是每年固定某個random seed來產生第幾個中獎? (電腦的亂數其實也不是真的亂數) 那這樣又是怎麼把人編排順序,照申請順序?照名字筆畫排列?照證卷號碼排列?75
[情報] TWICE 迷你10輯 <Taste of Love> 專輯配置TWICE The 10th Mini Album <Taste of Love> Album Preview 配置24
[討論] 跑實驗數據要跑多次取平均嗎大家好 是這樣的 我在做深度學習相關領域的論文 架構差不多好了 但是跑實驗要很久 每做一個實驗就要花上大量的時間10
[問卦] 不同意Notepad++政治立場就亂搞你?A new feature just enabled in Notepad++ : If you don’t agree with its politics views, Notepad++ will add random characters in your source code. Google翻譯3
[討論] TP-Link Tapo P100 智慧插座簡易安裝過程================================================================ 點選 [ Not registered? ] , E-mail Address: 電子郵件打字 [ xxxxxx@gmail.com ] , Password: 密碼打字 [ yyyyyy ] ,1
[影音] MONSTA X - Love Killa 隨機變速ver.'Love Killa' Dance Practice (Random Speed ver.) BEASTMODE Dance Practice