攻防世界——mfw

考察点:git漏洞,代码审计

当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。

危害
攻击者可以利用该漏洞下载git文件夹里的所有内容。如果文件夹内有敏感信息比如站点源码、数据库账户密码等,攻击者可能直接控制服务器。

攻防世界——mfw_第1张图片

攻防世界——mfw_第2张图片

发现有Git,可能是Git泄露,直接/.git 

攻防世界——mfw_第3张图片

 

确实存在git泄露那我们使用GitHack还原

工具下载(linux): git clone https://github.com/lijIEjIE/GitHack.git

攻防世界——mfw_第4张图片

在templates目录下发现了flag.php,在index.php中发现关键代码

攻防世界——mfw_第5张图片

strpos()函数查找".."在$file中第一次出现的位置。如果没有找到则返回false

file_exists()函数检查$file是否存在

assert()函数会将括号中的字符当成代码来执行,并返回true或false

发现一个assert()函数,想到估计是代码执行漏洞,而$page没有任何的控制直接拼接,则利用assert()函数执行cat ./templates/flag.php来获得flag,那么要破坏原来的assert结构,才能使得我们目标才能达成。

发现file变量是用我们输入的page变量拼接而成的,而且没有任何的过滤,我们可以在这段输入的字符中插入system函数来执行系统命令

注意到调用file时用的单引号和括号来限制file的范围

那么我们构造如下payload:

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

被传入之后变成:

$file="templates/') or system('cat ./templates/flag.php');//.php"

strpos()返回false,再利用or让其执行system函数,再用" // "将后面的语句注释掉

assert("strpos('template/') or system('cat ./template/flag.php');//.php, '..') === false")

下划线内容被注释掉了,所以真正执行了以下语句

strpos('template/') or system('cat ./template/flag.php');

攻防世界——mfw_第6张图片

 

你可能感兴趣的:(攻防世界,html,php,web安全)