Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4743425
  • 博文数量: 206
  • 博客积分: 5240
  • 博客等级: 大校
  • 技术积分: 3224
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-12 21:40
文章分类

全部博文(206)

文章存档

2013年(13)

2012年(8)

2011年(33)

2010年(152)

我的朋友

分类:

2010-09-12 00:44:26

昨天碰到一个投票页面,可能自己比较闲,可能也是因为这个页面比较弱智吧,一时兴起看看自己能不能写一个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

  1. $stra=$_POST['sel58'];
  2. $filename='counter.txt';
  3. if($handle=fopen($filename'a'))
  4. {
  5. fwrite($handle$stra);
  6. }
  7. fclose($handle);
  8. echo $stra;
  9. echo 'done';
  10. ?>

然后是投票页面,写完后才发现没用到PHP。。。完全是Javascript…
AutoVote.php

  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  2.  
  3. <script type="text/javascript" language="javascript">     var http_request = false;     function makeRequest(url) {         http_request = false;
  4.  
  5. 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) {}             }         }
  6.  
  7. 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\');
  8.  
  9. }
  10.  
  11. function alertContents() {
  12.  
  13. 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.\');             }         }
  14.  
  15. }     window.setInterval("makeRequest(\'vote.php\')", 600000);//10分钟一次!vote.php为目标页面
  16.      style="cursor: pointer; text-decoration: underline"
  17. onclick="makeRequest('vote.php')"&gt;
  18. Make a request
  19. ?>

把两个页面放在Apache的htdos目录下测试,一切OK,把目标页面改为我要投票的对象,然后就等着吧,10分钟弹出个框返回结果。(当然也可以在Apache下面改成1毫秒一次,体验一下手忙脚乱的感觉。。。)

然后把那个IE窗口最小化,看着票数慢慢地上升。。。

升。。。
升。。。
升。。。
升。。。
升。。。
升。。。
返回莫名其妙的结果。。。
返回莫名其妙的结果。。。
返回莫名其妙的结果。。。

??打开那个投票页面看了一下,原来管理员不知什么时候(应该就是刚才)加了一个验证码。。。难不成要跟你斗到底。。。看了一下源代码,只是多了一句:

  1. <script src="authimg.php" language="javascript">script>

看了一下那个authimg.php,显示的是

  1. document.write('gndBdh')

gndBdh应该是随机生成的字串,既然要和投票接收页面配合的话肯定要用session或cookie,看了一下head,果然多了

  1. Set-CookiePHPSESSID=dc48aedcd03478a0ee6f13603b37937epath=/

模拟一下cookie的话应该可以,不过我想睡觉了。。。SO我去睡觉了,可爱的管理员Byebye…

阅读(3334) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~