• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            tqsheng

            go.....
            隨筆 - 366, 文章 - 18, 評論 - 101, 引用 - 0
            數據加載中……

            js偽造Referer來路

            js偽造Referer來路  

            2014-06-30 21:33:23|  分類: 默認分類|舉報|字號 訂閱

            首先說明,偽造訪問來路不是什么光明正大的事情,目的就是為了欺騙服務器。原本以為給 XMLHTTP 對象增加一個 Referer header 就可以,結果卻沒有任何作用,改用 ServerXMLHTTP 也如此。

            無意間發現公司內部項目使用的 paypal 扣款程序里面有 WinHttp.WinHttpRequest.5.1 對象,它負責把客戶的信用卡信息提交到 paypal 的服務器,看來是一個核心的遠程訪問方法,google一下發現它居然用可以成功偽造所有 http 請求的 header 信息!下面的代碼通過偽造 referer 的值,假裝從百度首頁提交一個表單到指定的 url 去:

            1

            2

            3

            4

            5

            6

            7

            8

            9

            10

            var url = "http://www.yourtarget.com";  

            var param = "name=david&age=30";  

            var obj = new ActiveXObject("WinHttp.WinHttpRequest.5.1");  

            obj.Open("POST", url, false);  

            obj.Option(4) = 13056;  

            obj.Option(6) = false; //false可以不自動跳轉,截取服務端返回的302狀態。  

            obj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");  

            obj.setRequestHeader("Referer", "http://www.baidu.com");  

            obj.Send(param);  

            WScript.Echo(obj.responseText);

            保存為 xxx.js 文件,在命令行中運行 cscript.exe xxx.js

            msdn得知,WinHttp.WinHttpRequest.5.1  msxml 4.0 的底層對象,也就是說 XMLHTTP/ServerXMLHTTP 也是在它的基礎上封裝而來。用 WinHttpRequest 發的請求,連 Fiddler 也監測不到,看來確實是比較底層的東西。

            ---------------------------邪惡的分割線------------------------

            既然可以用它來偽造所有 http 請求的 header,那 CookiesSessionid 自然也就可以得到并傳遞了。下面是實戰代碼,用命令行登錄博客園,共三次請求,第一次請求獲取表單的 VIEWSTATE  EVENTVALIDATION,第二次帶賬戶登錄,第三次帶Cookie訪問其首頁:

            //封裝成遠程訪問的函數  

            function RemoteCall(method, url, param, header){  

                var obj = new ActiveXObject("WinHttp.WinHttpRequest.5.1");  

                obj.Open(method||"GET", url, false);  

                obj.Option(4) = 13056;  

                obj.Option(6) = false;  

                if(method=="POST"){  

                    obj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");  

                }  

                if(header){  

                    for(var key in header){  

                        if(key=="Cookie"){//根據 MSDN 的建議,設置Cookie前,先設置一個無用的值  

                            obj.setRequestHeader("Cookie", "string");  

                        }  

                        obj.setRequestHeader(key, header[key]);  

                    }  

                }  

                obj.Send(param);  

                return obj;  

            }  

            //第一次遠程訪問博客園的登錄入口  

            var url = "http://passport.cnblogs.com/login.aspx";  

            var objFirst = RemoteCall("GET", url, null);  

                   

            //取得 viewstate 與 eventvalidation  

            var viewstate = objFirst.responseText.match(/id="__VIEWSTATE" value="(.*?)" \/>/)[1];  

            var eventvalidation = objFirst.responseText.match(/id="__EVENTVALIDATION" value="(.*?)" \/>/)[1];  

                   

            //輸入自己的賬戶與密碼  

            var username = "";  

            var password = "";  

            var param = "" 

            + "__VIEWSTATE="+encodeURIComponent(viewstate)   

            + "&__EVENTVALIDATION="+encodeURIComponent(eventvalidation)   

            + "&tbUserName="+username  

            + "&tbPassword="+password  

            + "&btnLogin="+encodeURIComponent("登  錄");  

                   

            var objSecond = RemoteCall("POST", url, param);  

                   

            //登錄成功后服務器執行 Response.Redirect 跳轉,即向客戶端發送了 302 狀態代碼  

            WScript.Echo(objSecond.status); //302即登錄成功, 如果是200,則登錄失敗,頁面沒有跳轉  

                   

            //帶上登錄成功后的cookie,再次訪問其首頁  

            var json = {"Cookie": objSecond.getResponseHeader("Set-Cookie")};  

            var objThird = RemoteCall("GET", "http://www.cnblogs.com", null, json);  

            WScript.Echo(objThird.responseText);

            上面的代碼其實已經有一定惡意,我只為證明使用 WinHttpRequest  確實可以模擬瀏覽器發送請求,服務端也無法區別是從瀏覽器來的,還是從命令行來的。這證明到一點,從客戶端提交來的任何數據都不可信,因為發送的 http 數據包不但表單值可以修改,連數據包的header都可以隨意修改。同時也說明,使用 VIEWSTATE 對表單的安全性無任何用處。

            posted on 2015-02-20 17:23 tqsheng 閱讀(2980) 評論(0)  編輯 收藏 引用

            久久久久高潮综合影院| 国产精品美女久久久久| 久久国产AVJUST麻豆| 亚洲国产成人精品女人久久久 | 久久久人妻精品无码一区| 香港aa三级久久三级老师2021国产三级精品三级在 | 成人国内精品久久久久影院| 女人香蕉久久**毛片精品| 久久无码精品一区二区三区| 久久综合给合久久狠狠狠97色69 | 热99RE久久精品这里都是精品免费| 久久一日本道色综合久久| 久久精品无码免费不卡| 日韩精品久久久久久久电影蜜臀| 国产激情久久久久影院老熟女免费| 国内精品久久久久影院老司| 久久久久黑人强伦姧人妻| 国产99精品久久| 亚洲人成网亚洲欧洲无码久久| 久久精品无码一区二区三区日韩| 久久精品国产清高在天天线| 色婷婷久久久SWAG精品| 精品欧美一区二区三区久久久| 久久国产精品无码HDAV| 久久综合给久久狠狠97色| av色综合久久天堂av色综合在 | 狠狠色丁香婷婷久久综合五月| 亚洲国产精品婷婷久久| 国内精品久久久久久野外| 国产V亚洲V天堂无码久久久| 久久精品国产亚洲AV香蕉| 午夜精品久久久久久久| 亚洲精品乱码久久久久久按摩 | 久久久久99精品成人片欧美 | 亚洲欧美日韩精品久久| 国内精品久久国产大陆| 婷婷综合久久狠狠色99h| 秋霞久久国产精品电影院| 亚洲午夜久久久精品影院| 日韩久久久久中文字幕人妻| 亚洲午夜无码AV毛片久久|