今天我们来玩找 page admin 游戏。
首先, 让我们锁定某个粉丝专页当目标,比如拿我的专页来做 example la:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpF2IphPgDU-Xm-JamWHiREWl4-gx6wFOGbFNY3RULIgy9vv4d2i3mFcN0semn9QPCpE1ypt_qU_HX_yx7Y6AcvvR8uHn4jH6aaPQ6vy4SlbLAzA4PvwylT8-YanClp0BD-dlJxoxAF8w/s1600/2015-12-08-210537_918x496_scrot.png)
然后没有 Page Owners section 来看谁是 admin。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6WVCn2f9n_TrCL55nGEjuyS6oQ7MtIXMvTLWaMLKp8JBZ4OflTX8DQf2UqaGC8Rduy2UjCuLH-8Own68F6gS6utvTKrJV7-s-Jb1rcDLu6Ot9_WRBy7ZXCsBKQD1qNYo5mIMSqcDP4i4/s1600/2015-12-08-211156_571x253_scrot.png)
锁定目标后,现在是时候准备一些假 account, 要弄到可爱一点比较容易骗人。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4AlqU5LerDwvuFpD5wiNA0YPLcJuBfjSQtB96I7QudMvnYYYF5BUIVRF0JPoyfysmXtfecS8xdZ0RS5VwHAu-F3DQKkuw71Fv8NVQZ46tmk77o0taHmzxoj2u8mkBgXmCloIW0sgrmGM/s1600/2015-12-08-213629_522x254_scrot.png)
第一张图片看到是 8 个人 like。所以就用 Graph Search 看谁 like。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWGdifhE2rWKzBz-ahU9ilY1zBnJvbsvUreai2DH7gxZ7mpMhMKsr91avxnVCBk8SDqGEQBsw_2LVWxHXZlHKZwmldBWRsUoCtpU49Pv51coYzbqhJCOWUmbEWMArGfukmt8RB3QYe-aE/s1600/2015-12-08-212223_697x713_scrot.png)
其实有六个人 like, 一个人 hide 掉 search, 另外两个是 unlike 没有 up to date (为了效率,Search API 通常都是 cache 的 lor)。
for 第一页, 就在 Search likers 那页 save html 在 1st_page.html, 然后丢在 manual.py 来解析出 user ids, 并储存在 userids。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo7Kkc9e-0Xr0fhFGTAamSPtkJRrYOjNhcyOzxi9zRs_LvMjmy6eBDryR0t-L_0VTeYJxrua7o5ifwQ-e042aoPSALAKO0y9wDl2DR5tvc3S4M-RuCNV_P0SecBmg6uHTXHIs67rmV7o4/s1600/2015-12-08-215522_494x168_scrot.png)
跑 manual.py:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixwrjN_UHlDlW1UFxTGl9YOfnAxAma45HgRaYHVNfplJTeSdlGf9YCf33U0BuGzQ6uuI2oSaYzJ2Ra1uJN182HRGRgw1prYSp150aUbeyvJYdDI5qZT71X_hKEJqbIhOLPl0H5QGpTyQc/s1600/2015-12-08-222906_325x178_scrot.png)
for 其它页面, 就 scroll, 然后 Copy as cURL:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUhB67x7aFQ2IkBEECxqMR7XYbfHeI1td19DkX0nkOFB4-Oj8eXICmKjh4nsWcTMg0MsALuF6XAZ-BnOOYfOS-HlQqd3QXQKgySZ4Hp66Jb4m4Oi0G3pi0stX4GSLJ3HkmctrZUmoQ38A/s1600/curl.png)
paste 在 eason1.py 的 cmd, double quotes 它, 把 display_params 开头的 %22 之间的 cursor 拉出来当 global variable。加 -m 10 来 timeout,如果不要看 command 就加 -s。图中暂时 disable cmd 还有 cursor(有 cursor 方便停下来,下次继续)。至于为什么刚才要分出来第一页, 因为我很懒去写包括第一页的 code。下面是被浓缩的 eason1.py 例子:
然后给它跑,(这只是其它专页的例子, 因为我那个专页没有下一页做示范):
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGUY_r9OBEA-CugHD_W1VAhUgRaEfxXmVhuedlpgmsBxxIsS_sUQZmgpLP5sUVmp-lQoDPXvJznUnfA00q8G3vVohxnoDPz2PhMJvivV2VdSnJR-LOoa5z_5D9gLkjUFp9j2eaiW4cX94/s1600/2015-12-08-221337_319x175_scrot.png)
收集完 userids 后,我们进行下一步, 拿 block session。
你可以先打开 inspect element,然后 block 名人来拿当前 cookie 还有其它 HTTP request 需要用到的东西。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis0_xc_UOlmHaqNXGLecNY-ixDU6aY3e3Gu53AayLrxZQHHalIpROnE7V8Dajv71W1AERlB5-il9tMGvBxYBQvV8hXzZUMAVTGHj4GVDpKRamuoNY58d5gcPov2PbGud5DKyV_wkRB8mI/s1600/2015-12-08-214644_838x225_scrot.png)
右键 Copy as cURL:
把 userids mv 去 userids1 , 然后用修改上面的 curl 的 --data double quotes uid=$uid, 放在 while block 完全部 id。不贪心, timeout 给它 -m 0.5 就可以了,足够让你以一小时 block 八千个人, 24 小时 block 192000 人。华人不多(如果目标是 taiwan 专页,没事 block 什么墨西哥人 connections),所以收集到 page admin 并非天方夜谭的事。 收集越多,成功率就越高。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOZ0UyDpVPrrlYZy8HizgyGp0LeNk4gs4AuGydEX_CwPg3ZfjOW2rs69QNv6ccu27GsONL2gdrokvl-Dsuz8Zfgfh8ugID40Em9sx5UPHjn85UHPbk2Um-vccNeUqkzoVGhQ84DWZt-jg/s1600/Screenshot+from+2015-12-08+22%253A35%253A58.png)
例子, stderr 也算成功, 不需要等 full reply, 酱就能加快速度:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisnukLQkgmQQNJR9RdQBv8XDsQGlDrOOCMHex5v_MHrVE5yGZ8yl0pdxxp9ltsU50hz2AtGmP-fAX8TC345wJ-fRqIkUxb7s2T8bW5uV3htM5J0Lse-pYptOqKUV07XPRi20Y1GLwqp2E/s1600/2015-12-08-225238_609x155_scrot.png)
随便找几个很旧的 post, 让 admin 除了 notification/settings 之外, 正常没有常去的地方。比如这次的目标是 2011 年 3 月 9 号, 人烟稀少的地方。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnxA8XO0I9ZplLHC-PSV2qPCti3AI-_SSrgqKpUT4mzFlSVQeXoZWLtD25sT7sB6vFcuaw1dvgDEVChI2b4M82bF2EYulSt2vREq_aleFt8PLQaIJdk5-Dhhyphenhyphen54_SOae3oSJ0BEQJsCrw/s1600/2015-12-08-225917_555x402_scrot.png)
然后 admin 看见 notification, 可能就会 reply。如果是 "block me if you can" 或暴力诸如此类的 comment, 就可能会去 hide/delete 或甚至 ban 掉 Eason。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZyK-InOFVgvP_-w9zlgn1jRll9Xl5ia130hR88T-npah33iEAXm1mzTHnMCzviXIHS9MwYc_svX5OfvmXrRXvBFF1CqqdMYB70yGAE-Vcv80woe2VyzT8ulLXYX5EKbyx180E6lCmSwQ/s1600/2015-12-08-230149_427x150_scrot.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzyr-P4SmAmtou-AzOGaAPgI0EQSNPbYt-c7MFXeJBQaKYMxJaZwnFMCd3uUpSojgIKMQPJR12mLDpMOav0NzdSHf-Va3vXj0OgJAODbKskdagPSfdjw3x-akjeCe_yg4fGui_s7QDHfY/s1600/2015-12-08-230136_677x169_scrot.png)
酱我们现在就可以知道其中一个 page admin 不是刚才被 block 的人,所以才收到 notification, 也才能在大约三分钟内看到留言并进行 reply/hide/delete/ban。(hide 可以用其它假 account 来观察到)。
然后继续收集其它 userids, 比如专页所有的 post/comment/like 的 userids, 如下图,收集到我的 userid:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVAMz6HWZVb69kHP1Ez4XNZPALG-33Z7NM8200jIeLXj_gF6jJhdtiDJ_UVpYtMJ0y67LXuFU9oo_fObEko20Zb5vMeqfpaJ-j7hxUPtJdpE0DF5dv2rSCXnBRaKAQMX9IW5ggrxCcFyg/s1600/2015-12-08-231336_312x141_scrot.png)
等半个小时(防止他还停留在这页 [可以同时 test 其它人烟稀少的 post, 就可忽略这个问题]),再留言过, 结果等了十年(五或十分钟内不 reply 立刻删除, 准备下一批切一半的 block 的 user ids)都没 reply:
*(不好意思,图片的时间和我讲的时间有出入)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRcaaLz-gwiT5m49sew_eTeYJN8Ut6gQR3FzhDt3bB6L8uXWIKg5n76iU2FAlVvVeeUdKAImif3kSP_c2HzC2_ls6YsTK5UZWSt9EzzdFDwni0x_yrsP3dYnV5wgGHt1hmDALRaYp-6hA/s1600/2015-12-08-232240_525x343_scrot.png)
原因在于这次 admin(林果皞) 收不到 notification, 跟没被 block 之前完全相反,甭管 Use Page as page admin 还是 林果皞 都不会收到 notification:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR6fNHVKXSHOqcVYQoFs6hdSELc3NEABDsvc93QroQUxAsfCZYz7MlPJ7mT4ubAM6i87efG6nD1D9uGpNGE1m72gDfmoPHkdK2Po-Q0yeJYdMCbRxirM6ZqgIOcsNsASBdVszUU8wbFtQ/s1600/2015-12-08-231905_693x333_scrot.png)
然后再试验没 block 林果皞之前的 user 来 comment 其它 post, 如果那个 post 很快有 reply,独留那个 post 没 reply, 反复测试,酱就达到我们要的 reliability。
这时候距离成功只是时间上的问题了, either 我开多新的 account 从 userids1 block 一半 user ids, 或直接拿我现在的 unblock 一半 user ids。然后慢慢缩小成一个人(page admin 可能几个人,所以也可同时缩成几个)就知道谁是 page admin(s) 了。
最后只剩下林果皞被 block,终于找到林果皞是这个 page 的 admin。来开香槟 :)
如果是上百万的粉丝专页就不值得 (花五天时间 block), 毕竟如果假 account 被 facebook permanent ban 就亏了之前花时间去 block(暴力 comment 比慢火蒸有效, 但如果被 facebook 系统 permanent block 就很花时间去 block 剩下的一半,没被 ban就可以 reuse 假 account 攻击其它 page 节省时间。)。取决于你的规模lor, 比如说有组织的几个人收集 user ids。反正 facebook 不去 fix 这个 bug, 你要收集一年也没关系。
如果你有可疑的几个 user id 名单, 攻击就轻而易举了。
还有一些问题要注意:
1. admin 可能没 online, 所以反复测试确保 reliability 很重要。你可能可以 message, 或用 listener 看有没有新的 post。 有就代表 admin 睡醒了,也是时候开工攻击了。
2. 上面教的人烟稀少的 post 可能找不到没有 likers/commenters, which 他们 会收到 notification 来 report kacau, 所以最好是 block 掉他们。
跟 Graph Search likers 一样,用 cursor 就可以收集那些 likers user ids 来 block。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_SqTMU-gcFzk4j_C8gpFD5mgd1NOBtsS9obeiVFGgZkrtI4N9tj3tiX2fkYrjpohbmWEP0n5WqXlKLOLxHdwHJEG_HR_ZhzhnsNGCjL6M5thRQ4XISdBlL7yQ1uA0ypbj6TA0GUIvg6U/s1600/2015-12-09-011238_784x526_scrot.png)
如何 Defense:
如果看到 notification 在旧的 post,不要立刻 like/reply/hide/delete/ban。偶尔等半小时, 或等两小时, 或一天, 总之不要让 stalker 揣摩到你看 notification 的时间即可。
为什么我没有 report 给 facebook ?
我有 report,不过这个把 timing 当漏洞已经远远超过 facebook 安全团队的想象力,解释了两遍他们还是 get 不到这个漏洞其中一个关键的地方是人烟稀少的 post + timing。我偶尔会在 stackexchange 活跃,也有 report 的经验,report 文笔并不差 a。
他们给我的第二个回复竟然是可笑的 "the page admin still be able to see the content and remove it",这不是对牛弹琴是什么 ? 我解释第三遍也是多余。
[The story doesn't end yet]
事实上这个用 timing 找 page admin 的逻辑可以实现在其它地方,可以说在某个情况下是 unfixable 的,不过我忘了那个情景 (我过马路时灵光一闪想到的),都半年前的事了。