昨天碰到一个投票页面,可能自己比较闲,可能也是因为这个页面比较弱智吧,一时兴起看看自己能不能写一个PHP自动投票程序来玩玩他们。
不方便透露页面地址,就说下特征吧,这个页面不要求验证码,但是一段时间(10分钟左右)内反复提交的话它会弹出一个框说一个IP只能投一票。为什么一个IP只能投一票还限定时间呢?我想应该是由于当前的IP分配使很多人挤在一个公网IP下,这样子不太公平,就只好表面上吓唬一下,实际上只是有cooldown设置罢了。
好了,那么就有两种途径,一个是伪装自己发包的源IP,还有一个是写自动发包程序。前一种还不知怎么做(好象是层不太对),但后一种用一般用来做Ajax的window.XMLHttpRequest可以比较轻松地搞定。
先用了SpyNet, Ethereal这些经典的抓包程序,明明把目标设为无线网卡Intel(R) PRO/Wireless 3945ABG Network Connection,也设好过滤器了,但一直抓不到包。一怒之下把本本搬到路由器旁插线上网,包源源不断地蹦出来了。。。无语,但用这些软件分析出来的包太复杂,我要的只是head信息,于是去国外网站花两个小时拖了一个IE插件下来,装上去以后可以直接看到IE收发的包,真方便。
收到包以后就简单了,通过查看包的内容和投票页面的源代码,发现要递交的只是
POST:sel58=yes&Submit=%CD%B6%C6%B1,
Get:?action=add&id=5
连Cookies都没有!更不要说Session了。
打开EditPlus开始写:
先个测试的页面,是目标页面的简化版:
vote.php
- $stra=$_POST['sel58'];
- $filename='counter.txt';
- if($handle=fopen($filename, 'a'))
- {
- fwrite($handle, $stra);
- }
- fclose($handle);
- echo $stra;
- echo 'done';
- ?>
然后是投票页面,写完后才发现没用到PHP。。。完全是Javascript…
AutoVote.php
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
- <script type="text/javascript" language="javascript"> var http_request = false; function makeRequest(url) { http_request = false;
-
- if (window.XMLHttpRequest) { // Mozilla, Safari,... alert(\'firefox\'); http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType(\'text/xml\'); } } else if (window.ActiveXObject) { // IE alert(\'ie\'); try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } }
-
- if (!http_request) { alert(\'Giving up :( Cannot create an XMLHTTP instance\'); return false; } //http_request.setHeader("Charset","GB2312"); http_request.onreadystatechange = alertContents; http_request.open(\'POST\', url, true); http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");/*这句少了郁闷好久*/ //alert(\'open succeeded\'); http_request.send(\'sel58=yes&Submit=%CD%B6%C6%B1\'); //alert(\'post succeeded\');
-
- }
-
- function alertContents() {
-
- if (http_request.readyState == 4) { if (http_request.status == 200) { alert(http_request.responseText);//这个可以收到返回的Text数据 //alert(\'连接到服务器\'); } else { alert(\'There was a problem with the request.\'); } }
-
- } window.setInterval("makeRequest(\'vote.php\')", 600000);//10分钟一次!vote.php为目标页面
- style="cursor: pointer; text-decoration: underline"
- onclick="makeRequest('vote.php')">
- Make a request
- ?>
把两个页面放在Apache的htdos目录下测试,一切OK,把目标页面改为我要投票的对象,然后就等着吧,10分钟弹出个框返回结果。(当然也可以在Apache下面改成1毫秒一次,体验一下手忙脚乱的感觉。。。)
然后把那个IE窗口最小化,看着票数慢慢地上升。。。
升。。。
升。。。
升。。。
升。。。
升。。。
升。。。
返回莫名其妙的结果。。。
返回莫名其妙的结果。。。
返回莫名其妙的结果。。。
??打开那个投票页面看了一下,原来管理员不知什么时候(应该就是刚才)加了一个验证码。。。难不成要跟你斗到底。。。看了一下源代码,只是多了一句:
- <script src="authimg.php" language="javascript">script>
看了一下那个authimg.php,显示的是
gndBdh应该是随机生成的字串,既然要和投票接收页面配合的话肯定要用session或cookie,看了一下head,果然多了
- Set-Cookie: PHPSESSID=dc48aedcd03478a0ee6f13603b37937e; path=/
模拟一下cookie的话应该可以,不过我想睡觉了。。。SO我去睡觉了,可爱的管理员Byebye…
阅读(3477) | 评论(0) | 转发(1) |