攻防世界 Web高手进阶区 mfw

前言

这道题我做的也算比较久的一题,前前后后遇到许多的麻烦,最终也终于解了出来。就我这个萌新的角度来说,这个题给我的启示还是比较大的。以前对Web相关的知识进行了学习,但是题目并未完全涉及到,就导致我对于一些知识点的理解存在了偏差,甚至就忘记了这个知识点。这个题的知识点我以前学习的时候查过,也做过笔记,但是真正做题的时候却一点也想不起来,本来按照代码审计的思路可以找到的点也遗失了,这个题可谓让我成长了许多。

WP

打开题目之后会进行一些无用的操作,这里不再赘述。重点就是打开About发现Git。
在这里插入图片描述

看到Git基本就能猜到会有Git泄露,然后dirsearch验证果然有,然后githack。在这里,我遇到了我的第一个麻烦,我出现了以前没遇到过的情况:
在这里插入图片描述
下面出现了奇奇怪怪的东西而且一直在出现,我等了很久发现还是在这样运行,我又重试了几次还是不行。我上网查了很久然后一无所获,后来以为是Windows的问题,于是转战kali。当时的我刚安装kali还没有正式使用,然后在第一次使用kali的过程中又遇到了无数的奇奇怪怪的问题,这甚至让我忘记了我是来利用kali解这题的。后来到了晚上我再打开这题尝试的时候,我发现他虽然出现这个,但是过几分钟就好了。没错,他好了,我心里直接一句mmp。(如果有师傅也遇到了或者成功解决的可以教教我咋回事嘛)
既然githack使用成功了,就直接进入目录,如果除了.git没有其他文件那就git checkout-index -a就可以了。这时候可以发现有一个templates文件夹,打开后看到flag.php,打开后发现并没有flag,因此还要转回来,发现还有一个index.php文件,打开之后进行代码审计。
然后我本人一无所获。代码审计真的是硬伤,对于php的一些存在漏洞的知识点没有熟练掌握,在代码审计的时候确实很难发现漏洞。还有一点就是我在看assert函数的时候,出于本能的习惯,在PhP文档里只看了它是检查一个断言是否为 FALSE,并没有往下深究,这就导致我错过了这个点。
在这里插入图片描述
最重要的是如果内容是字符串,assert将这个字符串当作php代码直接执行,这是最关键的点。参考SQL注入和XSS类似的方法和思想,构造这样的代码:

?page=') or system("cat templates/flag.php");//

这样就可以成功实现让assert执行cat这个语句了。
不过这里我又遇到了我的第二个麻烦。我当时的语句不是这么写的,我写的是

?page=') or system("cat templates/flag.php");");//

多了的");是干什么的呢?因为我以为//后面会全部注释掉,这样assert后面的("并没有被闭合,因此需要把它闭合掉。但是我这样尝试之后发现是错的,让我思考了很久,后来终于知道了答案。

assert("strpos('templates/') or system("cat templates/flag.php");");//', '..') === false") or die("Detected hacking attempt!");

这个代码看似//把后面的全给注释掉了,但实际上,这行代码的//起作用之后是这样的:

assert("strpos('templates/') or system("cat templates/flag.php");");") or die("Detected hacking attempt!");

它实际只是把assert里面的那个字符串里面的//后面的语句给注释,因此我这样写就错了。这可能都不算一个知识点,但是我却并不是很清楚。真的需要多学习。
按照正确的方法输入page之后,按F12查看源码就可以得到flag。

猜你喜欢

转载自blog.csdn.net/rfrder/article/details/108413463