[討論] 暴力破解 ptt 任意帳號似乎成為了可能
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
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
10/22 18:17, 7F
推
10/22 18:21,
3年前
, 8F
10/22 18:21, 8F
推
10/22 18:21,
3年前
, 9F
10/22 18:21, 9F
→
10/22 18:21,
3年前
, 10F
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
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
10/22 18:27, 12F
→
10/22 18:27,
3年前
, 13F
10/22 18:27, 13F
→
10/22 18:27,
3年前
, 14F
10/22 18:27, 14F
→
10/22 18:27,
3年前
, 15F
10/22 18:27, 15F
→
10/22 18:31,
3年前
, 16F
10/22 18:31, 16F
→
10/22 18:31,
3年前
, 17F
10/22 18:31, 17F
推
10/22 18:33,
3年前
, 18F
10/22 18:33, 18F
pid 了不起 1 ~ 100k 之間
夠快的電腦數秒間就能快速產生某一個 100k 個 seed 的 handle string
然後直接程式化比對螢幕當下拿到的 string
推
10/22 18:34,
3年前
, 19F
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
10/22 19:50, 23F
推
10/22 19:51,
3年前
, 24F
10/22 19:51, 24F
推
10/22 20:09,
3年前
, 25F
10/22 20:09, 25F
推
10/22 20:09,
3年前
, 26F
10/22 20:09, 26F
→
10/22 20:12,
3年前
, 27F
10/22 20:12, 27F
推
10/22 20:38,
3年前
, 28F
10/22 20:38, 28F
推
10/22 21:34,
3年前
, 29F
10/22 21:34, 29F
→
10/22 21:35,
3年前
, 30F
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
10/22 21:42, 33F
→
10/22 21:43,
3年前
, 34F
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
10/22 22:35, 37F
推
10/22 22:55,
3年前
, 38F
10/22 22:55, 38F
→
10/22 23:21,
3年前
, 39F
10/22 23:21, 39F
→
10/22 23:48,
3年前
, 40F
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
10/23 01:13, 43F
→
10/23 01:14,
3年前
, 44F
10/23 01:14, 44F
推
10/23 04:26,
3年前
, 45F
10/23 04:26, 45F
推
10/23 05:22,
3年前
, 46F
10/23 05:22, 46F
→
10/23 08:10,
3年前
, 47F
10/23 08:10, 47F
※ 編輯: kloer (114.36.26.240 臺灣), 10/23/2020 08:19:45
推
10/23 09:53,
3年前
, 48F
10/23 09:53, 48F
推
10/23 15:41,
3年前
, 49F
10/23 15:41, 49F
推
10/23 15:48,
3年前
, 50F
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
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
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
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):