伪造HTTP请求报文协议头对网络投票系统刷票的可行性研究

2012-10-24 01:20胡云峰陈皖芬
文山学院学报 2012年6期
关键词:刷票代理服务器IP地址

胡云峰,陈皖芬

(1.文山学院 纪监审处,云南 文山 663000;2.文山州民族职业技术学校,云南 文山 663000)

1 研究背景

在当今的互联网时代,人们的工作、生活和网络的联系变得越来越紧密。人们开始习惯于将越来越多的工作放到互联网上完成,其中最常见的就是网络人物投票选举活动。这一类的网络应用为了保证其投票的公平性,大多都是针对投票人所使用的计算机的IP地址进行限制,保证他们在某一特定的时间内只能投设立的票数。针对这个限制,能不能利用什么方法绕开对IP地址以及投票时间的限制,对此类网络投票系统进行刷票呢?

2 相关知识

2.1 HTTP协议及HTTP报文格式

2.1.1 超文本传输协议及HTTP报文

超文本传输协议(又称作HTTP协议)用于在Internet上发送和接收消息,客户端发送一个请求,服务器返回该请求的应答,所有的请求与应答都是HTTP包,HTTP协议使用可靠的TCP连接,默认端口是80。[1]

2.1.2 HTTP请求报文的结构

HTTP请求报文由4部分组成,分别是请求行、报头、空白行和正文。请求行是请求报文中的重要组成部分,它由方法—URL—协议/版本3个部分构成。

2.2 WinHttpRequest.5.1对象

WinHTTP的全称是Microsoft Windows HTTP Services, 它提供给开发者一个HTTP客户端应用程序接口(API), 通过这种API借助HTTP协议给其他的HTTP服务器发送请求。由WinHTTP创建的WinHttpRequest.5.1对象,主要应用于客户端向服务器端发送Request请求,在发送请求时,可以模拟构造HTTP请求包的请求标头。[2]

3 伪造HTTP请求报文协议头对网络投票系统进行刷票的可行性研究(以ASPCMS投票系统为例)

ASPCMS投票系统是网络上免费提供的一款基于ASP与ACCESS数据库的在线投票系统。在测试中,为杜绝用户恶意刷票。在系统后台将“24小时内同IP可投票次数”及“24小时内同IP相同选项可投票数”两个选项都设置为“1”,代表同一IP在24小时内只能投一次票。

利用HTTPWATCH PROFESSIONAL软件对投票过程产生的HTTP数据包进行抓包分析,如图1所示。

图1 ASPCMS投票系统投票过程数据抓取

得到HTTP包数据如下:

“GET /upload/Vote.asp?id=10 HTTP/1.1”表示投票过程利用的是“GET”方式传递数据,数据传递的目的地址是“/upload/Vote.asp”,其中参数“id=10”,表示投票对象是编号为10的人;“Referer: http://localhost/upload/index.asp”表示投票过程的前一个步骤是由“http://localhost/upload/index.asp”产生的。“Accept-Language:zh-cn”表示编码类型;“Host: localhost”表示响应的主机名称。

综合以上关键数据,分析整个投票过程的数据传递后,可利用WinHttpRequest.5.1对象的相关方法,模拟实现浏览器的整个投票过程,以验证利用伪造HTTP报文数据包协议头的方法实现网络刷票的设想是否可行。

利用WinHttpRequest.5.1对象的相关方法,构造测试代码,如下:

执行代码,出现提示:“您已经投票,请稍后再来投票!”。可以看出,程序对同一IP在24小时内的投票数作了限制。

系统利用以下代码验证客户端IP地址:

Request.ServerVariables("HTTP_X_FORWARDED_FOR")表示服务器获取客户端浏览器的代理服务器IP地址,如果获取到的代理服务器IP地址为空,表示客户端浏览器并没有使用代理服务器,在这种情况下,利用Request.ServerVariables("REMOTE_ADDR")获取客户端的真实IP地址。

分析以上代码得出,只要能找到足够多的代理IP地址,就可以实现刷票行为。当今很多网络投票系统刷票程序都是利用大规模地使用代理IP地址实现功能,但是代理服务器经常更新,不能长久使用,也难以找到,所以真正利用代理IP地址进行刷票,很难实现。在测试中,由于仅仅是构造HTTP报文数据包发送数据包,并不是真正地要使用浏览器与服务器进行交互,于是设想在HTTP报文协议头中设置“X-Forwarded-For:XXX.XXX.XXX.XXX”(表示客户端以“XXX.XXX.XXX.XXX”作为IP地址发送数据),看看能不能实现IP地址的伪造。

在测试代码中加入代码:oReq.setRequestHeader "X-Forwarded-For","192.140.130.11" 在协议头里设置报文的发送IP地址(其中“190.140.130.11”这一IP地址是伪造的),运行该代码后,出现了“恭喜您,投票成功,谢谢您的参与!”的提示,说明投票成功。返回前台投票页面,也看到对应的人物票数增加了一票。在测试代码中,我们又随意填写了一些IP地址,对服务器发送数据,最终都可以得到投票成功的提示,至此,验证了伪造协议头进行刷票的方法对本套投票系统有效。

完整刷票代码如下:

在实际应用中,针对ASPCMS网络投票系统,根据用户的需求,如需对某一目标进行大规模的投票,只需在不违反TCP/IP协议的前提下,伪造出足够多的IP地址,即可实现刷票。

[1]谢希仁.计算机网络(第5版)[M].北京:电子工业出版社,2011:243-245.

[2]About WinHTTP[EB/OL].http://msdn.microsoft.com/zh-cn/library/aa392925(v=vs.85).aspx.

[3]吴功宜,吴英.计算机网络技术教程—自顶向下分析与设计方案[M].北京:机械工业出版社,2010:119-126.

[4]快乐笛子.使用WinhttpRequest伪造 Refere [EB/OL].[2010-08-06].Http://www.caizq.com/?type=detail&id=11.

猜你喜欢
刷票代理服务器IP地址
金鹰奖主动公开“刷票”情况
铁路远动系统几种组网方式IP地址的申请和设置
要改变对网络投票的过度依赖
要改变对网络投票的过度依赖
地铁信号系统中代理服务器的设计与实现
IP地址隐藏器
IP地址切换器(IPCFG)
微信投票乱局与治道变革
基于SNMP的IP地址管理系统开发与应用
公安网络中IP地址智能管理的研究与思考