[討論] 暴力破解 ptt 任意帳號似乎成為了可能

看板Soft_Job作者 (測試..)時間3年前 (2020/10/22 17:41), 3年前編輯推噓41(42119)
留言62則, 45人參與, 3年前最新討論串1/2 (看更多)
ptt 最近發了一個功能叫做 /recover 所以我就順手看了一下相關的 source code: https://github.com/ptt/pttbbs/blob/master/mbbsd/recover.cc 詳見: https://www.ptt.cc/bbs/SYSOP/M.1603325969.A.7F6.html 大家都知道 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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.36.26.240 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1603359702.A.165.html

10/22 17:44, 3年前 , 1F
PR will be nice
10/22 17:44, 1F
這是我隨意看 code 五分鐘看見的東西 說不定是不可行的, 分享出來給大家討論討論 ※ 編輯: kloer (114.36.26.240 臺灣), 10/22/2020 17:53:37

10/22 17:54, 3年前 , 2F
推推
10/22 17:54, 2F

10/22 17:54, 3年前 , 3F
媽 我在這裡~
10/22 17:54, 3F

10/22 17:54, 3年前 , 4F
神串流名
10/22 17:54, 4F

10/22 17:57, 3年前 , 5F
太神拉
10/22 17:57, 5F

10/22 18:06, 3年前 , 6F
10/22 18:06, 6F

10/22 18:17, 3年前 , 7F
這種問題通常建議等你的pr進了再來分享....
10/22 18:17, 7F

10/22 18:21, 3年前 , 8F
email不是該用戶註冊的嗎? 除非你有辦法進到他信箱
10/22 18:21, 8F

10/22 18:21, 3年前 , 9F
原po不是分享是討論阿XD
10/22 18:21, 9F

10/22 18:21, 3年前 , 10F
不然這種reset本來就只是整個流程的觸發機制而已
10/22 18:21, 10F
對, 標題誇大了 其實是只要知道對方 email 就行了 不用真的需要該 email 權限也能任意拿到可以 reset 密碼的 code ※ 編輯: kloer (114.36.26.240 臺灣), 10/22/2020 18:23:34

10/22 18:23, 3年前 , 11F
不好意思沒看清楚 原來是繞過email
10/22 18:23, 11F
例如你知道你同學的 ptt 帳號是 AAAA 然後它的學校信箱是 XXX@ntu.edu.tw 那它大概就能破解了 ※ 編輯: kloer (114.36.26.240 臺灣), 10/22/2020 18:24:18

10/22 18:27, 3年前 , 12F
其實 email 算相對不難拿的資料後面這段可行的話應該至
10/22 18:27, 12F

10/22 18:27, 3年前 , 13F
少 10% 的使用者因為 id reuse 很好猜,加上 Google 說
10/22 18:27, 13F

10/22 18:27, 3年前 , 14F
不定可以拿到 30%+
10/22 18:27, 14F

10/22 18:27, 3年前 , 15F
代表只要能看到目前註冊信箱就可以改密碼了
10/22 18:27, 15F

10/22 18:31, 3年前 , 16F
啊不對 因為一定要學校信箱所以其實不見得會 reuse 也不
10/22 18:31, 16F

10/22 18:31, 3年前 , 17F
好猜
10/22 18:31, 17F

10/22 18:33, 3年前 , 18F
這種通常會搭配有效性 5分鐘失效
10/22 18:33, 18F
pid 了不起 1 ~ 100k 之間 夠快的電腦數秒間就能快速產生某一個 100k 個 seed 的 handle string 然後直接程式化比對螢幕當下拿到的 string

10/22 18:34, 3年前 , 19F
我覺得蠻好猜的 XDD
10/22 18:34, 19F
※ 編輯: kloer (114.36.26.240 臺灣), 10/22/2020 18:39:55

10/22 19:06, 3年前 , 20F
厲害,推
10/22 19:06, 20F

10/22 19:48, 3年前 , 21F
膜拜
10/22 19:48, 21F

10/22 19:48, 3年前 , 22F
10/22 19:48, 22F

10/22 19:50, 3年前 , 23F
wow
10/22 19:50, 23F

10/22 19:51, 3年前 , 24F
這很厲害
10/22 19:51, 24F

10/22 20:09, 3年前 , 25F
輸入錯誤三次把i p列為黑名單?
10/22 20:09, 25F

10/22 20:09, 3年前 , 26F
連個proxy可以輕鬆解決樓上的問題
10/22 20:09, 26F

10/22 20:12, 3年前 , 27F
Responsible disclosure = =
10/22 20:12, 27F

10/22 20:38, 3年前 , 28F
可以,這很yoyodiy,直接繞過信箱
10/22 20:38, 28F

10/22 21:34, 3年前 , 29F
所以單純幾個C函式就能破解的意思嗎?
10/22 21:34, 29F

10/22 21:35, 3年前 , 30F
ptt是有source code嗎不然你怎知道實作?
10/22 21:35, 30F

10/22 21:35, 3年前 , 31F
這樣被破解也不能怪人喇主從架構的實作都被知道惹
10/22 21:35, 31F

10/22 21:38, 3年前 , 32F
10/22 21:38, 32F

10/22 21:42, 3年前 , 33F
看他的random_text_code實作 有點不OK
10/22 21:42, 33F

10/22 21:43, 3年前 , 34F
它如果每次都把chars用另一個外界拿不到的seed洗牌過
10/22 21:43, 34F

10/22 21:44, 3年前 , 35F
這個漏洞可能就沒用了
10/22 21:44, 35F

10/22 22:29, 3年前 , 36F
上面那個是不是連批踢踢是開源的都不知道
10/22 22:29, 36F

10/22 22:35, 3年前 , 37F
推XDDDD
10/22 22:35, 37F

10/22 22:55, 3年前 , 38F
10/22 22:55, 38F

10/22 23:21, 3年前 , 39F
pid 1 ~ 100k 肯定是不夠。站上人數最多是可以到150k的
10/22 23:21, 39F

10/22 23:48, 3年前 , 40F
ㄟ AccountRecovery::GenCode呼叫random_text_code
10/22 23:48, 40F

10/22 23:48, 3年前 , 41F
是不是存過界啦
10/22 23:48, 41F

10/23 01:06, 3年前 , 42F
10/23 01:06, 42F

10/23 01:13, 3年前 , 43F
這種事關資安的隨機還用時間pid之類的來seed也太沒sense
10/23 01:13, 43F

10/23 01:14, 3年前 , 44F
crypto secure random用urandom是基本吧
10/23 01:14, 44F

10/23 04:26, 3年前 , 45F
聽起來zero-day正式開始XD
10/23 04:26, 45F

10/23 05:22, 3年前 , 46F
看第二次才懂在說啥 不過不會操作XD
10/23 05:22, 46F

10/23 08:10, 3年前 , 47F
推 感覺可行(? 拿自己帳號寫POC送PR r XD
10/23 08:10, 47F
※ 編輯: kloer (114.36.26.240 臺灣), 10/23/2020 08:19:45

10/23 09:53, 3年前 , 48F
推XDDD
10/23 09:53, 48F

10/23 15:41, 3年前 , 49F
怕爆來留名
10/23 15:41, 49F

10/23 15:48, 3年前 , 50F
怎麼沒有用 urandom @@
10/23 15:48, 50F

10/23 16:28, 3年前 , 51F
太神啦
10/23 16:28, 51F

10/23 18:40, 3年前 , 52F
神人
10/23 18:40, 52F

10/23 19:04, 3年前 , 53F
y
10/23 19:04, 53F

10/23 19:32, 3年前 , 54F
拜神
10/23 19:32, 54F

10/23 21:47, 3年前 , 55F
推個
10/23 21:47, 55F

10/24 10:12, 3年前 , 56F
可怕
10/24 10:12, 56F

10/24 13:35, 3年前 , 57F
10/24 13:35, 57F

10/25 11:28, 3年前 , 58F
神串留名啊!! 好厲害喔!!
10/25 11:28, 58F

10/25 13:56, 3年前 , 59F
囧,zero-day start
10/25 13:56, 59F

10/26 11:10, 3年前 , 60F
10/26 11:10, 60F

10/27 00:37, 3年前 , 61F
10/27 00:37, 61F

10/27 04:19, 3年前 , 62F
10/27 04:19, 62F
文章代碼(AID): #1VaLFM5b (Soft_Job)
文章代碼(AID): #1VaLFM5b (Soft_Job)