论坛刷分器

刚注册了一个论坛,可是里面有些内容需要相当的积分才可以看到,怎么办呢,难道真要一贴一贴去赚积分?

在论坛转了一圈,发现它有个游戏板块,在里面玩flash小游戏也可以赚积分。能不能利用这个来作弊呢?

flash游戏作弊一般有两种方法:直接提交HTTP请求和内存修改。

网页上的flash游戏都是先下载到本地运行,最后把结果通过HTTP请求传送到服务器。如果管理员大意没做加密处理,那我们就可以通过抓包分析出提交的内容,然后伪造HTTP请求。这也是最简便的办法。

要玩该论坛的flash游戏得先登录,获取认证。这可以用curl工具来实现。

curl的使用

用法
curl [options] [URL...]
选项
-o/-output <file>
    curl默认是把输出到stdout,如果想保存为文件,可以用这个选项。
-D/--remote-name
    类似于-o,但是文件名为URL的最后一部分
-d/--data <data>
    提交POST请求的数据。相当于用户在浏览器中填写了一个form,然后点击提交按钮。
-c/--cookie-jar <file>
    把cookie写到文件中。对于需要进行用户认证的网页很有用。
-b/--cookie <info>
    把后面的内容作为cookie递交给HTTP服务器。info可以是"NAME1=VALUE1; NAME2=VALUE2"
    这样的信息,也可以一个文件名,这个文件通常是之前使用-c选项获得的。

使用以下命令可登录论坛:

curl -c xxx.cookie -d "username=用户名&password=密码&mod=logging&action=login\
&loginsubmit=yes&loginhash=LrU1g" -D http://www.xxx.org/member.php

想知道是否成功登录,可以用浏览器打开保存下来的文件,看看是否转到了成功登录的页面。

curl命令中参数的确定

curl命令中不好确定的部分是URL及-d选项的参数。解决方法有三种:

1.直接查看网页源代码,找出相关信息。

以下是discuz官方论坛登录页面的form的html代码,我们需要的信息在form标签的action和input标签的name及value里。

把action的内容添加到网站的一级域名后就形成了curl命中的URL部分(若URL中包含有'&',需用引号把URL括起来);

把name的内容和自己的用户名、密码等信息组合后就形成了-d选项的参数。

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 
15 
<form method="post" autocomplete="off" name="login" id="loginform_LrU1g" class="cl" onsubmit="pwdclear = 1;ajaxpost('loginform_LrU1g', 'returnmessage_LrU1g', 'returnmessage_LrU1g', 'onerror');return false;" action="member.php?mod=logging&amp;action=login&amp;loginsubmit=yes&amp;loginhash=LrU1g">
  <div class="c cl">
    <input type="hidden" name="formhash" value="04062584" />
    <input type="hidden" name="referer" value="" />
    <div class="lgfm nlf">
      <div class="ftid sipt lpsw" id="account_LrU1g">
        <label for="username">帐 号 :</label>
        <input type="text" name="username" id="username_LrU1g" autocomplete="off" size="36" class="txt" tabindex="1" value="" />
      </div>
      <p class="sipt lpsw">
      <label for="password3_LrU1g">密 码 :</label>
      <input type="password" id="password3_LrU1g" name="password" onfocus="clearpwd()" onkeypress="detectCapsLock(event, this)" size="36" class="txt" tabindex="1" />
      </p>
      ......
</form>

2.把登录页面保存下来,修改它的源代码,把form标签里的method="post"改成method="get",然后用浏览器打开该网页,填写好用户名密码,点击提交之后会发现网址中包含着我们想要的信息。

3.使用抓包分析工具(如wireshark),抓取本机向网站发送的tcp包,从中获取相关信息。这是最稳妥,最不容易出错的方法。

中文字符问题

我登录的时候遇到了一个问题:我的用户名是中文的,提交时始终提示登录不正确。原来网站使用gbk编码,而我终端使用utf-8编码,导致发送post请求时编码错误。

以下是几种解决方法:

1.对汉字进行编码转换,然后在终端中使用。这个一个编码的小工具

2.把终端的编码改成gbk:export LANG=zh_CN.gbk; export LC_ALL=zh_CN.gbk

3.不使用用户名登陆,改用uid登录,由于uid中全是数字,所以不会出现编码问题。

完成刷分器

用浏览器登录论坛,找到游戏页面,记下网址。这里我选择了一个叫DropSum的游戏,网址是http://www.xxx.org/plugins.php?p=nkflash&game=DropSum

打开wireshark开始抓包,玩完一局游戏后,wireshark捕捉到游戏提交给服务器的tcp包。

果然,游戏发出的http请求没有加密,很容易就能找到上传游戏结果的语句,其中几个参数的意思也一目了然。

于是,使用这个命令就可以伪造游戏的http请求,进行作弊。

curl -b cookie -d "others=%20%2D%20分钟%20Min%20秒%20Sec&bonus=0&level=级别\
&fscore=分数&playertime=游戏结束时间&playedtime=游戏进行了多久&starttime=游戏开始时间\
&action=swfrecord&game=DropSum&p=nkflash" \
"http://www.xxx.org/plugins.php?p=nkflash&game=DropSum"
posted @ 2010-11-20 10:41  白色之夜  阅读(2414)  评论(3编辑  收藏  举报