CTFのMonyer解析


😉 记录一些黑客小游戏

导语

  最近十分焦虑,忽然想起来,之前在国外自学网安的时候做过的一些小游戏,和CTF题目很类似,偶然手痒,记录一下Monyer的游戏过程吧,有一说一这个游戏还是很适合初级小白的,挺简单的,做一下记录吧,只要接触过前端编程的小伙伴感兴趣也可以试一下,后续找时间我会把这个游戏整个通关做个记录的。
天也不早了,鸡也不叫,狗也不吵了,白了个白,晚安了小伙伴们,果然热爱编程的我,编程使我静心。。。

1. 第0关

  • 描述

刚一开始进来就是所谓的第0关,没有错游戏就这么愉快的开始了
Monyer第0关直通车

第0关界面

  • 解析

很明显,也很简单的一关,做过web开发的,第一反应应该都是F12检查两个→←之间隐藏的代码,点击进入下一关。

2. 第1关

  • 描述

进入第一关后看到的页面,很明显要我们自己去寻找密码
Monyer第1关直通车
第1关

  • 解析

看上去作者很喜欢这种,把信息藏在源代码里,OK那我们就老规矩看一下他的源代码,找寻一下线索,可以看到在代码里有这么一组判断,那么我们直接把判断条件拿出来复制粘贴上去就好了。
第1关破解

3. 第2关

  • 描述

进入第2关,发现页面没什么变化,那么可以猜测估计是密码在代码层面加深了隐藏
Monyer第2关直通车

  • 解析

嗯,没什么好废话的,看样子作者是不打算用页面直观地跟我们说话了,那我们直接撸代码看看。

第2关解析

嗯,很有意思,代码里看到作者写了这么一段代码,计算a的值,然后过关,作为一个程序员的基本素质,那我们就要把懒的作风发扬光大,直接一手控制台输出a就好了。

document.oncontextmenu=function(){return false};

    var a,b,c,d,e,f,g;
    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;
    a = Math.floor(a);

    function check(){
        if(document.getElementById("txt").value==a){
            window.location.href=a + ".php";
        }else{
            alert("密码错误");
            return false;
        }
    }

在这里插入图片描述
解析

4. 第3关

  • 描述

感觉作者好像没什么新意了,不过这手赤裸裸的嘲讽确实,如果第2关真的有人像作者说的这样是拿计算器算出来的话,我建议放弃吧,好好学学基础知识,这个游戏可能不适合你。

Monyer第3关直通车

第3关

  • 解析

废话不多说老规矩,直接代码层面交流吧。我们可以看到这样一组诡异的代码

在这里插入图片描述

我们知道eval () 函数可以将字符串当做 JavaScript 代码执行,那么可以得出结论eval中的是一段代码,String.fromCharCode() 方法是将 Unicode 值转换为字符,可以知道作者把源代码利用Unicode的方式进行了加密处理,那么老规矩,直接控制台输出就好了,看看他这段加密的代码判断条件,然后我们进一步攻破就可以了。
解密
啊哈,d4g.php第四关的意思嘛,作者真的是没有新意,这么随意地嘛。然而到此我发现,我还是天真了,因为输入d4g进入第4关页面马上又回跳到了第3关,这。。。没关系我们用cmd命令行使用curl命令来查看一下网页源码。
在这里插入图片描述

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="robots" content="noindex,nofollow">
<meta http-equiv="refresh" content="0;url=424178.php">
<title>梦之光芒/Monyer——Monyer's Game(第4关)</title>
<script type="text/javascript">
    eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--)d[c.toString(a)]=k[c]||c.toString(a);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('a="e";d c(){b(9.8(\'7\').6==a){5.4.3=a+".2"}1{0("密码错误")}}',15,15,'alert|else|php|href|location|window|value|txt|getElementById|document||if|check|function|3bhe'.split('|'),0,{}))
</script>
</head>
<body>
<div align="center">
    <p>欢迎您来到第4关</p>
    <p>请输入密码进入第5关:
        <input type="text" id="txt" value="">
        <input type="button" onClick="check()" value="提交">
    </p>
</div>
</body>
<script type="text/javascript">
    eval("\141\75\141\56\164\157\125\160\160\145\162\103\141\163\145\50\51\53\61\73");
</script>
</html>

5. 第4关

  • 描述

第3关我们通过curl命令的形式进入了第4关的源代码形式,看上去作者对于这个页面是没啥玩意了,基本上都是直接隐藏在代码里,那么我们就也简单粗暴点直接代码层面破解吧,页面好像已经没有什么存在的价值意义了。

  • 解析

通过解读代码,我们可以发现作者在源代码里有两块eval函数,那我们利用页面控制台输出一下看看都是什么。

eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--)d[c.toString(a)]=k[c]||c.toString(a);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('a="e";d c(){b(9.8(\'7\').6==a){5.4.3=a+".2"}1{0("密码错误")}}',15,15,'alert|else|php|href|location|window|value|txt|getElementById|document||if|check|function|3bhe'.split('|'),0,{}))

在这里插入图片描述

根据代码解读第一段eval输出的3bhe应该不是密码,那么第二段输出的3BHE1看上去应该是的,我们去页面访问一下看看是不是可以进入第5关。

6. 第5关

  • 描述

进入第5关页面忽然发现作者很皮,居然告诉我们密码就藏在页面里,嗯。。。感觉不太对劲的样子,先看看代码再说,以作者的尿性来说,这句话处处透露着诡异。
Monyer第5关直通车

在这里插入图片描述

  • 解析

果不其然,在源代码里并没有找到哪里像是密码的样子,那作者会把他藏在哪里?不在代码里,那。。。我们去看看是不是放在请求头里了。

在这里插入图片描述

啊哈,果然藏在了请求里,要不要写的这么赤裸裸的。

在这里插入图片描述

7. 第6关

  • 描述

第6关页面总算是有了些变化,一上来我还以为是图片隐写,折腾了好久,关于图片隐写技术可以参照我的另一篇文章作为了解
图片隐写技术传送门
Monyer第6关直通车

  • 解析

这一关折腾了我一段时间,是我把事情想的复杂了,作者源代码里这段话的意思就是字面意思,我重新查询图片的细节,于是用谷歌搜了一下,发现了一个和图片相似的杂志,《Seventeen》试了一下发现跳转至404页面应该是不对的,那么我们试一下首字母不大写,惊喜的发现过关了。

在这里插入图片描述

8. 第7关

  • 描述

听人劝吃饱饭,刚刚那一关就是想复杂了,没有抓住关键细节,以为是图片隐写来着,看着作者亲切的提示,我选择最后一个,直接暴力md5解密破解试试,至少你没有加盐,那理论上来说我直接给你丫的解密就好了,还社会工程学?不好意思,在我身上你用不到一点。
在这里插入图片描述

  • 解析

上一关给的教训千万不要多想,这一关前两个提示就是为了诱导,的确算是一种简单的社会工程学中的欺骗技术,但有一说一有点拿我们当成作者本人了吧。。。
MD5加密解密工具站传送门

在这里插入图片描述

9. 第8关

  • 描述

进入第8关的页面吓了我一跳,本以为我错了,于是按照第7关的提示,在md5解密的值调整了一下,把数字放到了前面字母放到了后面,发现页面变成了404,感觉事情没有这么简单,在想会不会又是作者的一种欺骗手段,于是又重新进入第8关页面看了一下源代码。
Monyer第8关直通车
在这里插入图片描述

  • 解析

果然还是一种欺骗的手段,这个就很简单了,上一段程序解决它就好。因为本身是Java出身,所以直接用Java写了一段代码,轻松搞定。

在这里插入图片描述

 public static void main(String[] args) {
        // 变量声明并初始化
        int sum = 0;
        int a = 0;
        int i = 0;
        int j = 0;
        // 因为1不是素数,我们直接从2开始
        for (a = 2; a <= 10000; a++) {
            // 保证每一次j的值有效,需要初始化
            j = 0;
            // i的范围只需要在2-a/2之间就可以了
            for (i = 2; i <= a / 2; i++) {
                // 如果a能被整除j会加1
                if (0 == a % i) {
                    j++;
                }
            }
            // 判断在嵌套的循环结束后,如果j还是0表示a就是素数
            if (j == 0) {
                // 进行质数加和操作
                sum = sum + a;
            }
        }
        System.out.println(sum);
    }

10. 第9关

  • 描述

嗯。。。一看作者就是资深老宅了,不过这种福利还凑合吧,做完这关,我也准备去休息了,毕竟明天还有事情要做,剩下的后续更新吧。
Monyer第9关直通车
在这里插入图片描述

  • 解析

嗯,作者提示的很明显了,这关的突破就在于图片隐写,鉴于前几关作者的作风,这一关应该也是最基础最简单的图片隐写技术了,把图片保存下来,使用记事本打开,果不其然直接破解。

在这里插入图片描述


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Enjoy灬Lonly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值