winhttprequest,使用WinHttpRequest伪造referer,winhttprequest示例代码,winhttprequest入门教程,winhttprequest高级使用教程
从msdn得知,WinHttp.WinHttpRequest.5.1 是 msxml 4.0 的底层对象,也就是说 XMLHTTP/ServerXMLHTTP 也是在它的基础上封装而来。用 WinHttpRequest 发的请求,连 Fiddler 也监测不到,看来确实是比较底层的东西。
既然可以用它来伪造所有 http 请求的 header,那 Cookies、Sessionid 自然也就可以得到并传递了。下面是实战代码,用命令行登录博客园,共三次请求,第一次请求获取表单的 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伪造访问来路目的就是为了欺骗服务器。原本以为给 XMLHTTP 对象增加一个 Referer 的header 就可以,结果却没有任何作用,改用 ServerXMLHTTP 也如此。
下面的代码通过伪造 referer 的值,假装从百度首页提交一个表单到指定的 url 去:
var url = "http://www.qiangso.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.qiangso.com);
obj.Send(param);
WScript.Echo(obj.responseText);
保存为 xxx.js 文件,在命令行中运行 cscript.exe xxx.js。
上面的代码其实已经有一定恶意,我只为证明使用 WinHttpRequest 确实可以模拟浏览器发送请求,服务端也无法区别是从浏览器来的,还是从命令行来的。这证明到一点,从客户端提交来的任何数据都不可信,因为发送的 http 数据包不但表单值可以修改,连数据包的header都可以随意修改。同时也说明,使用 VIEWSTATE 对表单的安全性无任何用处。
分享到:
相关推荐
在ASP编程中,我们有时需要对HTTP请求进行更精细的控制,例如伪造HTTP头信息,这时可以使用`WinHttp.WinHttpRequest.5.1`对象。这个对象提供了丰富的功能,允许开发者在发送HTTP请求时自定义各种头字段,如`Referer`...
标题中的“vb6.0 WinHttpRequest下载源码”指的是使用Visual Basic 6.0(VB6.0)编程语言,并结合WinHttpRequest组件实现的一个下载工具的源代码。这个下载工具的特点是,在执行下载任务时,它能够避免程序假死或卡...
在描述中提到的"WinHttp.WinHttpRequest5.1代码生成器"是一个工具,它的目的是简化开发者使用此组件时的编程过程。 使用 WinHttp.WinHttpRequest.5.1 组件,开发者可以执行以下主要任务: 1. 发起 GET 和 POST 请求...
WinHttp.WinHttpRequest.5.1 中的知识点总结 WinHttp.WinHttpRequest.5.1 是一个 COM 组件,提供了对 HTTP 请求和响应的处理能力。本手册提供了 WinHttp.WinHttpRequest.5.1 的中文参考手册,涵盖了事件、方法、...
本资源主要关注的是易语言中使用WinHttpRequest.5.1组件进行网络通信的相关实践。WinHttpRequest.5.1是Windows操作系统内置的一个HTTP请求接口,它允许程序员在应用程序中发送HTTP、HTTPS请求,接收服务器响应,进行...
在本实例中,我们将深入探讨如何使用WinHttpRequest组件进行文件下载。 WinHttpRequest是微软提供的一个接口,允许在Windows平台上通过HTTP、HTTPS协议发送请求。这个组件特别适用于那些需要低级控制HTTP交互的场合...
让Win7的WinHTTP支持TLS1.2,修复WinHttp.WinHttpRequest或msxml3.dll出现安全频道支持出错问题
描述中提到的“修复WinHttp.WinHttpRequest或msxml3.dll出现安全频道支持出错问题”,是指在使用WinHttp.WinHttpRequest对象(一个用于发起HTTP请求的COM对象)或msxml3.dll(Microsoft XML Core Services的一个旧...
WinHttpRequest是可以替代XmlHttpRequest的更强大的网络组件。它能够实现XmlHttpRequest不具备的一些高级功能。 本手册主要内容摘自MSDN,制作匆忙,难免会有疏漏,请您见谅。如果您发现了手册中的错误,请与站长...
在本文中,我们将深入探讨WinHttpRequest对象的使用方法、主要属性、方法和事件,以及如何进行完整的封装。 1. **WinHttpRequest对象的创建** 在VBScript或VBA中,你可以通过`New`关键字来创建WinHttpRequest对象...
vbs 的post上传表单示例.vbs用http"WinHttp.WinHttpRequest.5.1"可伪造cookie
在提供的压缩包文件`WinHttpRequest.5.1.e`中,很可能包含了完整的易语言封装源码,您可以直接导入到易语言项目中使用,或者参考其实现细节,进一步优化自己的网络请求模块。记得在使用他人代码时,遵循开源协议,...
摘要:ASP源码,小偷采集,WinHttpRequest 一个通过WinHttp.WinHttpRequest编程的例子,支持采集有验证码的会员系统,可以实时获取51.la网站统计信息。程序开源,脚本比较简单,主要是传递给大家一个想法。 如果用于...
在本案例中,我们将探讨如何使用WinHttp.WinHttpRequest对象来绕过或模拟Referer,从而正确显示远程图片。 首先,我们需要了解WinHttp.WinHttpRequest对象。这是VBScript中用于发送HTTP和HTTPS请求的一个组件,它...
下面我们将深入探讨如何在VB6中使用WinHTTP5.1以及相关知识点。 首先,`WinHTTP`(Windows HTTP Services)是Windows操作系统内核级的HTTP客户端库,它提供了高效、安全的网络通信能力。`WinHTTP5.1` 是该组件的一...
2. **API调用**:通过VFP编写代码,使用HTTP请求库(如WinHttp.WinHttpRequest.5.1)向MsGraph API发送请求,获取数据。可能的API包括获取Excel在线工作簿的数据或者Power BI的工作集。 3. **数据解析**:API返回的...