源码泄露,命令拼接,代码审计(攻防世界mfw) - 图1

    进入题目,打开F12看看源码有什么可以得到的信息。

    没有头绪的浏览着。

    源码泄露,命令拼接,代码审计(攻防世界mfw) - 图2

    在abot这个界面出现Git,很明显是git源码泄露。

    随便点一个以后出现了一个GET上传的参数。并且是page,在之前的CTF的题有种题目

    源码泄露,命令拼接,代码审计(攻防世界mfw) - 图3

    可能存在文件包含。

    试过以后没有(永远弹出这个界面)源码泄露,命令拼接,代码审计(攻防世界mfw) - 图4

    没有文件,总是文件,肯定是文件的问题,不能php伪协议,那就cat,问题是cat读哪个文件。

    那就试试GitHack把源码下载下来。

    源码泄露,命令拼接,代码审计(攻防世界mfw) - 图5

    下载出来后是:

    源码泄露,命令拼接,代码审计(攻防世界mfw) - 图6

    果然有个flag.php

    但是打开很失望

    源码泄露,命令拼接,代码审计(攻防世界mfw) - 图7

    什么都没有。

    查看一下index.php发现有源码。

    源码泄露,命令拼接,代码审计(攻防世界mfw) - 图8

    关键代码如下:

    源码泄露,命令拼接,代码审计(攻防世界mfw) - 图9

    源码泄露,命令拼接,代码审计(攻防世界mfw) - 图10

    这里有个拼接的知识:

    $file =templates/ abc’) or system(“cat templates/flag.php”);// “.php”

    因为在strpos中只传入了abc,所以其肯定返回false,在利用or让其执行system函数,再用” // “将后面的语句注释掉

    查看网页源代码

    查看源码就可以得到答案。

    源码泄露,命令拼接,代码审计(攻防世界mfw) - 图11

    ps:为什么这里flag.php可以读,而刚刚的flag.php不可以呢

    因为我们下载下来的是在/.git/目录下的。

    而我们读的是/templates/目录下的