Soft_Job 板


LINE

ptt 最近发了一个功能叫做 /recover 所以我就顺手看了一下相关的 source code: https://github.com/ptt/pttbbs/blob/master/mbbsd/recover.cc 详见: https://webptt.com/cn.aspx?n=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://webptt.com/cn.aspx?n=/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://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1603359702.A.165.html
1F:推 longlyeagle: PR will be nice 10/22 17:44
这是我随意看 code 五分钟看见的东西 说不定是不可行的, 分享出来给大家讨论讨论 ※ 编辑: kloer (114.36.26.240 台湾), 10/22/2020 17:53:37
2F:推 alihue: 推推 10/22 17:54
3F:推 zb91: 妈 我在这里~ 10/22 17:54
4F:推 yoche2000: 神串流名 10/22 17:54
5F:推 xinbr7543: 太神拉 10/22 17:57
6F:推 pilor: 推 10/22 18:06
7F:推 wulouise: 这种问题通常建议等你的pr进了再来分享.... 10/22 18:17
8F:推 gofigure: email不是该用户注册的吗? 除非你有办法进到他信箱 10/22 18:21
9F:推 alihue: 原po不是分享是讨论阿XD 10/22 18:21
10F:→ gofigure: 不然这种reset本来就只是整个流程的触发机制而已 10/22 18:21
对, 标题夸大了 其实是只要知道对方 email 就行了 不用真的需要该 email 权限也能任意拿到可以 reset 密码的 code ※ 编辑: kloer (114.36.26.240 台湾), 10/22/2020 18:23:34
11F:→ gofigure: 不好意思没看清楚 原来是绕过email 10/22 18:23
例如你知道你同学的 ptt 帐号是 AAAA 然後它的学校信箱是 [email protected] 那它大概就能破解了 ※ 编辑: kloer (114.36.26.240 台湾), 10/22/2020 18:24:18
12F:→ siriusu: 其实 email 算相对不难拿的资料後面这段可行的话应该至 10/22 18:27
13F:→ siriusu: 少 10% 的使用者因为 id reuse 很好猜,加上 Google 说 10/22 18:27
14F:→ siriusu: 不定可以拿到 30%+ 10/22 18:27
15F:→ MOONY135: 代表只要能看到目前注册信箱就可以改密码了 10/22 18:27
16F:→ siriusu: 啊不对 因为一定要学校信箱所以其实不见得会 reuse 也不 10/22 18:31
17F:→ siriusu: 好猜 10/22 18:31
18F:推 gofigure: 这种通常会搭配有效性 5分钟失效 10/22 18:33
pid 了不起 1 ~ 100k 之间 够快的电脑数秒间就能快速产生某一个 100k 个 seed 的 handle string 然後直接程式化比对萤幕当下拿到的 string
19F:推 zb91: https://i.imgur.com/oEtAdjV.jpg 我觉得蛮好猜的 XDD 10/22 18:34
※ 编辑: kloer (114.36.26.240 台湾), 10/22/2020 18:39:55
20F:推 dream1124: 厉害,推 10/22 19:06
21F:推 Rm: 膜拜 10/22 19:48
22F:推 Lesterz: 推 10/22 19:48
23F:推 koka813: wow 10/22 19:50
24F:推 jass970991: 这很厉害 10/22 19:51
25F:推 Rm: 输入错误三次把i p列为黑名单? 10/22 20:09
26F:推 drajan: 连个proxy可以轻松解决楼上的问题 10/22 20:09
27F:→ john0312: Responsible disclosure = = 10/22 20:12
28F:推 chocopie: 可以,这很yoyodiy,直接绕过信箱 10/22 20:38
29F:推 ucrxzero: 所以单纯几个C函式就能破解的意思吗? 10/22 21:34
30F:→ ucrxzero: ptt是有source code吗不然你怎知道实作? 10/22 21:35
31F:→ ucrxzero: 这样被破解也不能怪人喇主从架构的实作都被知道惹 10/22 21:35
32F:推 w86083: 强 10/22 21:38
33F:推 gofigure: 看他的random_text_code实作 有点不OK 10/22 21:42
34F:→ gofigure: 它如果每次都把chars用另一个外界拿不到的seed洗牌过 10/22 21:43
35F:→ gofigure: 这个漏洞可能就没用了 10/22 21:44
36F:推 oToToT: 上面那个是不是连批踢踢是开源的都不知道 10/22 22:29
37F:推 bill0205: 推XDDDD 10/22 22:35
38F:推 luli0034: 推 10/22 22:55
39F:→ wens: pid 1 ~ 100k 肯定是不够。站上人数最多是可以到150k的 10/22 23:21
40F:→ nh60211as: ㄟ AccountRecovery::GenCode呼叫random_text_code 10/22 23:48
41F:→ nh60211as: 是不是存过界啦 10/22 23:48
42F:推 viper9709: 抖 10/23 01:06
43F:→ ssccg: 这种事关资安的随机还用时间pid之类的来seed也太没sense 10/23 01:13
44F:→ ssccg: crypto secure random用urandom是基本吧 10/23 01:14
45F:推 GuYueHu: 听起来zero-day正式开始XD 10/23 04:26
46F:推 s37166117: 看第二次才懂在说啥 不过不会操作XD 10/23 05:22
47F:→ TakiDog: 推 感觉可行(? 拿自己帐号写POC送PR r XD 10/23 08:10
※ 编辑: kloer (114.36.26.240 台湾), 10/23/2020 08:19:45
48F:推 amyt: 推XDDD 10/23 09:53
49F:推 a904472000: 怕爆来留名 10/23 15:41
50F:推 enskylin: 怎麽没有用 urandom @@ 10/23 15:48
51F:推 d880126d: 太神啦 10/23 16:28
52F:推 runedcross: 神人 10/23 18:40
53F:推 p90085: y 10/23 19:04
54F:推 stellvia2359: 拜神 10/23 19:32
55F:推 duck10704: 推个 10/23 21:47
56F:推 fr75: 可怕 10/24 10:12
57F:推 Jekk: 推 10/24 13:35
58F:推 HenryLiKing: 神串留名啊!! 好厉害喔!! 10/25 11:28
59F:推 wildli0422: 囧,zero-day start 10/25 13:56
60F:推 locklose: 推 10/26 11:10
61F:嘘 rebuildModel: 冏 10/27 00:37
62F:推 bobsonlin: 推 10/27 04:19
63F:推 emperorrock: 推 10/30 15:13







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP