mfw
// 原题来自csaw-ctf-2016-quals
进入题目可以发现是一个个人网站。网站搭建提到了git,马上想到git源码泄露。
.git 源码泄露
- 在运行git init初始化代码库的时候,会在当前目录下面产生一个.git的隐藏文件,用来记录代码的变更记录等等。在发布代码的时候,把.git这个目录没有删除,直接发布了。使用这个文件,可以用来恢复源代码。
找个git泄露源码的工具把记录拷下来(也可以直接目录里去访问..比较麻烦)
在templates下有个flag.php 意思就是让我们通过某种途径去访问到flag.php(这里把flag抹去了)
再来看看index.php
看到assert这里就可以知道是命令注入题了。想办法构造payload去执行恶意命令。
assert在php里算是个危险函数,作为断言会将字符串参数执行
file 参数传进去会加上头和尾,尾部不用考虑,我们后续用//注释即可
1 | ?page=123','..')===false and system('ls'); // |
构造payload一个大致思想就是把strops “完善” 再在后面加上自己的命令 最后把后续部分注释
最后变成了:
assert(“strop(‘123’,’..’)===false and system(‘ls’); //‘,’..’)===false”) or die(‘Detected hacking attempt!’);
得到flag