刚注册了一个论坛,可是里面有些内容需要相当的积分才可以看到,怎么办呢,难道真要一贴一贴去赚积分?
在论坛转了一圈,发现它有个游戏板块,在里面玩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" οnsubmit="pwdclear = 1;ajaxpost('loginform_LrU1g', 'returnmessage_LrU1g', 'returnmessage_LrU1g', 'onerror');return false;" action="member.php?mod=logging&action=login&loginsubmit=yes&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" οnfοcus="clearpwd()" οnkeypress="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"