一、分析题目
题目如图:
打开题目场景:
这个网页告诉我们的意思大致是欢迎来到我的网站,这是我从头开始写的,如果你想知道一些信息,请点击上面的链接。
点啊点,到最后有价值的只有About栏目:
看到了Git,就联想到了Git漏洞信息泄露(文末详解),直接纯URL后跟.git查看git目录:
到这里我们知道存在git漏洞即可,这上面已经没有什么有价值的东西了。
二、解题思路
经过分析网页存在的信息可知,这个网页存在git漏洞,我们需要做的就是利用GitHack工具把网页源代码给拉下来,拉下来之后再进一步分析。
GitHack工具下载地址:mirrors / lijiejie / githack · GitCode
下载之后直接把GitHack文件夹拖到kali虚拟机里面即可,在终端cd到GitHack文件夹里面就可以使用GitHack工具了。
当然Windows下也可以使用GitHack工具,方法和步骤和上面一样,只不过需要用cmd窗口进行,但是目前的大部分电脑已经不支持python2了。
因为Kali虚拟机自带的有python2,所以还是比较建议使用kali来使用GitHack工具。
三、万事俱备,只欠flag:
进入Kali虚拟机cd到GitHack所在的目录:
拉下网页源码:
GitHack使用方法:
第一种:python GitHack.py URL.git/
第二种:python2 GitHack.py URL.git/
因为GitHack工具只能在python2环境中运行
进入保存路径查看源码:
发现一个文件夹和一个php文件,两个都瞅瞅:
可见templates文件夹目前是没有什么有价值的东西。
接着我们查看index.php源代码文件:
果然发现了有价值的东西:
1、$file = "templates/" . $page . ".php";
这段告诉我们flag.php文件在templates文件夹下,因此网页没有进行字符过滤,所以我们可以通过给page一个变量和cat拼接来查看里面的内容。
2、assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
assert函数:将括号内的字符当成代码来执行,并返回true或false。
strpos查找函数:查找..在$file中第一次出现的位置,如果有则返回true,反之返回false。
3、assert("file_exists('$file')") or die("That file doesn't exist!");
file_exists检查函数:检查$file是否存在。
or die逻辑判断:前面如果是false则打印or die后面的字符串。
分析到这里就可以了,不过在进行构造payload之前,我们需要用到可执行外部命令的函数system函数。
两种构造方法:
1、payload=?page=1') or system('cat+./templates/flag.php');//
2、payload=?page=').system('cat ./templates/flag.php');//
第二种cat后面注意有个空格。
file变量通过输入的page变量拼接而成,调用file时注意用单引号'和反括号)用来限制file的范围。
?表示拼接。可以给page变量输入任何字符,file传入到strpos查找函数中并没有..的存在返回flase,执行右边代码,最终返回flag.php文件。
需要注意的是,PHP中以英文分号;表示代码结束,//表示注释,注意用单引号'进行闭合。
拼接payload:
拼接payload后可见网址被进行了URL编码。
查看源代码拿下flag:
这道题考察了git漏洞信息泄露,这个漏洞是指开发人员发布代码的时候可能存在不规范的代码和配置,造成源代码泄露,从而泄露重要信息,个人信息,数据库信息,数据库密码等等。
本人才疏学浅,如有不足,还望大佬们多多加以指点,如有不懂,在线解疑。