偶然看到前辈Monyer所做的小游戏,甚是感慨,从2007年至今已过去18年,期间不断有人经过,留下印记。回望从前,笔者初学时到处查找攻略,到如今可以不看攻略过关,虽然题目不难,但也算见证了时光荏苒。
本篇文章记录了玩Monyer梦之光芒小游戏的解题过程,共有十五关,题目内容较为基础,仅纪念一路走来的自己。
游戏介绍
网址:https://monyer.com/game/game1/
第0关
页面提示跳转连接在箭头中间,检查元素,发现中间夹着跳转连接。
第1关
拼接跳转链接first.php进入第1关。
查看网站源码中的JavaScript代码,如果输入的内容为“”,则跳转到hello.php。
第2关
输入“”或者拼接hello.php都可以跳转到第2关。
查看网站源码中的JavaScript代码,内容为通过多次运算得到一个值,这个值加上.php就是下一关的链接。
把代码拿出来跑一下,最后取一下整就好。
# Python
a = 3.14;
b = a * 2;
c = a + b;
d = c / b + a;
e = c - d * b + a;
f = e + d /c -b * a;
g = f * e - d + c * b + a;
a = g * g;
print(int(a))
结果是424178,拼接之后就是424178.php。
第3关
输入“424178”或者拼接424178.php都可以跳转到第3关。
继续查看源码中的JavaScript代码,内容为执行一段Unicode编码。
通过console.log可以在控制台还原代码,分析内容判断密码为d4g。
第4关
输入“d4g”或者拼接d4g.php都可以跳转,但是一瞬间又跳转回第3关。
抓包之后发现响应体有一段代码,导致刷新后会跳转回424178.php。
<meta http-equiv="refresh" content="0;url=424178.php">
同时可以看到第4关的JavaScript代码逻辑。
这个用控制台也可以跑出来密码,但是代码逻辑看不出来。
js代码混淆度比较高,用deepseek分析了一下逻辑,与之前关卡的代码类似,密码确认为3bhe。
但需要注意的是这并不的最终答案,因为下面还有一段js,还原后为把a的值转为大写,并且结尾拼接1,所以最终密码为3BHE1。
第5关
输入“3BHE1”或者拼接3BHE1.php都可以跳转来到第5关。
提示密码在页面里,查看源码没内容,抓包看到响应头中多了一个Monyer字段,获得密码为asdf。
第6关
输入“asdf”或者拼接asdf.php都可以跳转来到第6关。
打开页面,发现是加载一张图片img/tupian1.jpg,提示请通过以下图片中线索寻找密码。
下载图片进行分析,文本形式打开未发现可疑内容。
图片部分内容被打码了,怀疑可能是要猜出打码的内容。
这里有两个思路:
1、用谷歌搜索可见内容,看是否能搜到相关词条(缺点是这个图片比较老了,结果可能已经迭代很多次,无法找到了)。
2、用查看隐写的工具,分析一下图片。
通过Stegsolve.jar工具查看图片,发现在反色图层能隐约看到打码的内容为seventeen。
第7关
输入“seventeen”或者拼接seventeen7.php都可以跳转来到第7关。
这关就比较水了,给了三个提示,说是考察社会工程学,其实是根据seventeen7推出来eighteen8。
作者怕猜不出来,第三个提示直接给出的md5值,通过解密网站可查到为eighteen8。
第8关
输入“eighteen8”或者拼接eighteen8.php都可以跳转来到第8关。
打开页面是一个404 Not Found默认界面,但是多出来一个提示,在尝试使用ErrorDocument处理请求时遇到了404 Not Found错误。
查看源码,发现聪明才智已经惊动作者了,提示内容很清楚,10000以内所有质数和.php。
作者本意是要自己编程算出来,但现如今已经可以直接搜出来答案了,结果为5736396。
第9关
输入拼接文件5736396.php跳转来到第9关。
这关也是分析图片的,可以把图片下载下来,也可以直接发包看。
通过文本形式打开图片,在最下面找到第十关的密码:MonyerLikeYou_the10level。
第10关
输入“MonyerLikeYou_the10level”或者拼接MonyerLikeYou_the10level.php都可以跳转来到第10关。
打开页面,发现提示内容为当前用户身份为simpleuser 不是admin,无法显示下一关密码。
抓包看一下,把请求头的Cookie字段中username内容simpeuser改为admin即可,得到下一关密码为:doyouknow。
第11关
输入“doyouknow”或者拼接doyouknow.php都可以跳转来到第11关。
打开页面,发现提示内容为你的session不是passer,不能查看下一关密码。
方法一:
抓包分析,发现该页面会发两个数据包,第二个包传了action参数,需要把show_login_false改成show_login_true,绕过后台逻辑。
再次获取返回包,即可看到下一关密码。(注:通过修改action的方式,可以记录到服务器端,关底的时候就不用再次伪造了。
方法二:
尝试修改PHPSESSID为passer,也是可行的,可获取下一关密码:smartboy。
注:会影响最后关底页面的显示,访问关底的时候需要再次伪造成passer。
第12关
输入“smartboy”或者拼接文件都可以跳转来到第12关。
查看页面内容,发现是一段编码后的字符串。
尝试解码,初步判断为base64编码
JTRBJTU0JTYzJTdBJTRBJTU0JTVBJTQ3JTRBJTU0JTU5JTc5JTRBJTU0JTU5JTMxJTRBJTU0JTU5JTc4JTRBJTU0JTYzJTMxJTRBJTU0JTYzJTMwJTRBJTU0JTU5JTM1JTRBJTU0JTU5JTMyJTRBJTU0JTYzJTMxJTRBJTU0JTVBJTQ0JTRBJTU0JTRBJTQ2JTRBJTU0JTYzJTc3JTRBJTU0JTU5JTM0JTRBJTU0JTYzJTc3
发现可以解码成功,结果为
%4A%54%63%7A%4A%54%5A%47%4A%54%59%79%4A%54%59%31%4A%54%59%78%4A%54%63%31%4A%54%63%30%4A%54%59%35%4A%54%59%32%4A%54%63%31%4A%54%5A%44%4A%54%4A%46%4A%54%63%77%4A%54%59%34%4A%54%63%77
看起来是url编码,继续解码可以解码成功,但是又回到base64编码。
经过测试发现是进行了base64+URL编码两次,用这个组合在解码一遍,得到第十三关的页面sobeautiful.php。
第13关
拼接文件sobeautiful.php跳转来到第13关。
访问页面显示禁止盗链,说明该页面是需要判断请求来源的。
在请求头中添加Referer插入上一关的链接,才显示正常的第13关,发现是一段数据库连接代码,看情况是考察SQL注入的。
把关键代码提出来分析发现注入的payload不唯一。
sqlstr="select password,pwd from [user] where pwd='"&request("pwd")&"'"
有多种payload可以注入成功,就不一一列举了。
-
sqlstr="select password,pwd from [user] where pwd='"&'or'=&"'"
-
sqlstr="select password,pwd from [user] where pwd='"&'or 1=1&"'"
-
sqlstr="select password,pwd from [user] where pwd='"&1='or'&"'"
获得下一关密码:whatyouneverknow
第14关
输入“whatyouneverknow”或者拼接whatyouneverknow.php都可以跳转来到第14关。
查看页面这关是破解一个程序。
程序下载运行,发现需要破解的注册码。查看PE信息存在UPX压缩。
UPX是最简单的壳,网上有很多UPX解压工具,随便找了一个解压之后,进行逆向分析。
智能搜索字符串的时候,发现两个可疑的值:
9eeee9eb50eff979疑似是注册码
ipasscrackme.asp疑似是跳转的链接
把9eeee9eb50eff979输入程序之后,弹出注册成功!,并显示下一关的密码。
第15关
直接拼接文件ipasscrackme.asp访问时显示404 Not Found,考虑网站是PHP的,改成ipasscrackme.php可跳转来到第15关。
如果你第11关是修改action的方式绕过的,这里访问页面看到提示为你最终没能把cookies设为admin,修改cookie后,就可以弹出关底页面了。
如果修改cookie后,弹出下一个提示你最终没能把session设为admin。继续设置PHPSESSID为admin,没有效果。
这里我自己做的时候一直显示不出来关底页面,研究了半天,在查阅前辈资料后,我发现所有人第11关都是用修改action的方式绕过服务器的,我意识到出现这个问题是因为session的判断是和第11关有关联,而我当时是修改了PHPSESSID就返回答案了,这种伪造方式,服务器端是不认的。
那么问题就在于沿用第11关的session匹配的是passer,而这里提示的是你最终没能把session设为admin,这是一个误导,主要是防止有人直接看攻略跳到最后一关,实际的session值再次设置为passer就可以解决了。
这时候再刷新ipasscrackme.php就能出关底页面了。
通关啦!
如果您觉得内容还不错的话,请关注我吧!
建议把公众号“篝火信安”设为星标,否则可能就看不到啦!因为公众号现在只对常读和星标的公众号才能展示大图推送。
操作方法:点击公众号页面右上角的【...】,然后点击【设为星标】即可。
原文始发于微信公众号(篝火信安):黑客游戏 | 记录梦之光芒小游戏的解题过程
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论