免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
使用 WinHttpRequest 偽造 Referer 和cookie

使用 WinHttpRequest 偽造 Referer (附實(shí)戰(zhàn)代碼)

日期:2010-08-06,23:32(星期五) 評(píng)論:4 分類:前端開發(fā) 點(diǎn)擊:967

首先說(shuō)明,偽造訪問來(lái)路不是什么光明正大的事情,目的就是為了欺騙服務(wù)器。原本以為給 XMLHTTP 對(duì)象增加一個(gè) Referer 的header 就可以,結(jié)果卻沒有任何作用,改用 ServerXMLHTTP 也如此。

無(wú)意間發(fā)現(xiàn)公司內(nèi)部項(xiàng)目使用的 paypal 扣款程序里面有 WinHttp.WinHttpRequest.5.1 對(duì)象,它負(fù)責(zé)把客戶的信用卡信息提交到 paypal 的服務(wù)器,看來(lái)是一個(gè)核心的遠(yuǎn)程訪問方法,google一下發(fā)現(xiàn)它居然用可以成功偽造所有 http 請(qǐng)求的 header 信息!下面的代碼通過(guò)偽造 referer 的值,假裝從百度首頁(yè)提交一個(gè)表單到指定的 url 去:

  1. var url = "http://www.trueloveshop.cn";   
  2. var param = "name=david&age=30";   
  3. var obj = new ActiveXObject("WinHttp.WinHttpRequest.5.1");   
  4. obj.Open("POST", url, false);   
  5. obj.Option(4) = 13056;   
  6. obj.Option(6) = false//false可以不自動(dòng)跳轉(zhuǎn),截取服務(wù)端返回的302狀態(tài)。   
  7. obj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");   
  8. obj.setRequestHeader("Referer""http://www.baidu.com");   
  9. obj.Send(param);   
  10. WScript.Echo(obj.responseText);  
保存為 xxx.js 文件,在命令行中運(yùn)行 cscript.exe xxx.js。

 

從msdn得知,WinHttp.WinHttpRequest.5.1 是 msxml 4.0 的底層對(duì)象,也就是說(shuō) XMLHTTP/ServerXMLHTTP 也是在它的基礎(chǔ)上封裝而來(lái)。用 WinHttpRequest 發(fā)的請(qǐng)求,連 Fiddler 也監(jiān)測(cè)不到,看來(lái)確實(shí)是比較底層的東西。

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

既然可以用它來(lái)偽造所有 http 請(qǐng)求的 header,那 Cookies、Sessionid 自然也就可以得到并傳遞了。下面是實(shí)戰(zhàn)代碼,用命令行登錄博客園,共三次請(qǐng)求,第一次請(qǐng)求獲取表單的 VIEWSTATE 和 EVENTVALIDATION,第二次帶賬戶登錄,第三次帶Cookie訪問其首頁(yè):

  1. //封裝成遠(yuǎn)程訪問的函數(shù)   
  2. function RemoteCall(method, url, param, header){   
  3.     var obj = new ActiveXObject("WinHttp.WinHttpRequest.5.1");   
  4.     obj.Open(method||"GET", url, false);   
  5.     obj.Option(4) = 13056;   
  6.     obj.Option(6) = false;   
  7.     if(method=="POST"){   
  8.         obj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");   
  9.     }   
  10.     if(header){   
  11.         for(var key in header){   
  12.             if(key=="Cookie"){//根據(jù) MSDN 的建議,設(shè)置Cookie前,先設(shè)置一個(gè)無(wú)用的值   
  13.                 obj.setRequestHeader("Cookie""string");   
  14.             }   
  15.             obj.setRequestHeader(key, header[key]);   
  16.         }   
  17.     }   
  18.     obj.Send(param);   
  19.     return obj;   
  20. }   
  21. //第一次遠(yuǎn)程訪問博客園的登錄入口   
  22. var url = "http://passport.cnblogs.com/login.aspx";   
  23. var objFirst = RemoteCall("GET", url, null);   
  24.   
  25. //取得 viewstate 與 eventvalidation   
  26. var viewstate = objFirst.responseText.match(/id="__VIEWSTATE" value="(.*?)" \/>/)[1];   
  27. var eventvalidation = objFirst.responseText.match(/id="__EVENTVALIDATION" value="(.*?)" \/>/)[1];   
  28.   
  29. //輸入自己的賬戶與密碼   
  30. var username = "";   
  31. var password = "";   
  32. var param = ""  
  33. "__VIEWSTATE="+encodeURIComponent(viewstate)    
  34. "&__EVENTVALIDATION="+encodeURIComponent(eventvalidation)    
  35. "&tbUserName="+username   
  36. "&tbPassword="+password   
  37. "&btnLogin="+encodeURIComponent("登  錄");   
  38.   
  39. var objSecond = RemoteCall("POST", url, param);   
  40.   
  41. //登錄成功后服務(wù)器執(zhí)行 Response.Redirect 跳轉(zhuǎn),即向客戶端發(fā)送了 302 狀態(tài)代碼   
  42. WScript.Echo(objSecond.status); //302即登錄成功, 如果是200,則登錄失敗,頁(yè)面沒有跳轉(zhuǎn)   
  43.   
  44. //帶上登錄成功后的cookie,再次訪問其首頁(yè)   
  45. var json = {"Cookie": objSecond.getResponseHeader("Set-Cookie")};   
  46. var objThird = RemoteCall("GET""http://www.cnblogs.com"null, json);   
  47. WScript.Echo(objThird.responseText);  

 

上面的代碼其實(shí)已經(jīng)有一定惡意,我只為證明使用 WinHttpRequest 確實(shí)可以模擬瀏覽器發(fā)送請(qǐng)求,服務(wù)端也無(wú)法區(qū)別是從瀏覽器來(lái)的,還是從命令行來(lái)的。這證明到一點(diǎn),從客戶端提交來(lái)的任何數(shù)據(jù)都不可信,因?yàn)榘l(fā)送的 http 數(shù)據(jù)包不但表單值可以修改,連數(shù)據(jù)包的header都可以隨意修改。同時(shí)也說(shuō)明,使用 VIEWSTATE 對(duì)表單的安全性無(wú)任何用處。

引用一張著名的漫畫,在互聯(lián)網(wǎng)上,沒有人知道你是一條狗。在服務(wù)端,沒有人知道你是從命令行發(fā)送出來(lái)的。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
WinHttp.WinHttpRequest.5.1
http://www.cnblogs.com/QLeelulu/archive/2009/...
ajax中g(shù)et和post的說(shuō)明及使用與區(qū)別
JAVAEE開發(fā)之POST/GET提交亂碼解決總結(jié)
掌控POST(2)
登陸之后取網(wǎng)頁(yè)cookie | VBA實(shí)例教程
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服