0


攻防世界 mfw(Git源码泄露与命令执行漏洞)

打开链接

在About里发现网站是使用Git、PHP、Bootstrap搭建的

使用dirsearch扫一下

从结果可以看出确实存在.git 目录,我们也可以直接访问到

Git 源码泄露:

.git文件是开发人员在开发过程中使用 Git(分布式版本控制系统)做开发时产生的隐藏目录,该文件包含一些版本信息和网站源码,数据库信息等敏感信息。开发人员使用 git 进行版本控制,对站点自动部署。但如果配置不当,可能会将 .git 文件夹直接部署到线上环境,这就引起了 git 泄露漏洞,我们可以通过 .git文件恢复网站源码,来获取一些敏感信息。

我们这里使用Githack来下载并恢复.git文件

GitHack 是一个 .git 泄露利用脚本,通过泄露的 .git 文件夹下的文件可以重建还原工程源代码

首先切换到Githack所在位置

使用命令:python Githack.py url

进入下载文件所在目录查看

打开flag.php,但是并没有看到什么

在index.php里发现有用代码

审计这段代码前我们需要先知道以下知识:

1、strpos() 函数

查找字符串在另一字符串中第一次出现的位置(区分大小写)

eg:

查找 "php" 在字符串中第一次出现的位置:

<?php
echo strpos("I love php, I love php too!","php");
?>

2、assert()函数

检查断言是否为 **

false

**,且会将括号中的字符当成代码来执行,返回true或false,并在结果为 **

false

** 时采取适当的行动。

3、file_exists() 函数

检查文件或目录是否存在,如果指定的文件或目录存在则返回 TRUE,否则返回 FALSE。

4、die() 函数

该函数是exit()函数的别名,会输出一条消息,并退出当前脚本。

代码审计:

?php

if (isset($_GET['page'])) {
    $page = $_GET['page'];
} else {
    $page = "home";
}

就是使用get请求方式给page传参,如果没传,默认page=home

(这也是为什么我们打开题目链接进去是在home页面)

继续看后面的代码:

$file = "templates/" . $page . ".php";

// I heard '..' is dangerous!
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");

$file变量会接收传入的$page并且在其前面拼接templates/,在其后面拼接.php

(PHP中用.来实现字符串的拼接)

比如我们传入?page=flag,那么$file就成了templates/flag.php

strpos() 函数会在'$file'这个字符串中进行查找,是否存在'..'

当字符串里有'..',则会返回一个数(即'..'第一次出现的位置),结果为true

与右边的false并不恒等,此时就会执行or右边的die()函数,输出 Detected hacking attempt!

// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");

?>

此外,file_exists() 函数还会检查我们传入的page拼接后是否存在

有前面可知,templates下实际存在的只有4个文件

只要我们传入的不是这4个,就会执行die函数,输出 That file doesn't exist!

命令执行漏洞:

实际上这里的file_exists()函数对我们获取flag并不影响

因为assert()函数会将括号中的字符当成代码来执行

我们可以直接在第一个assert()函数处就调用cat命令来获取flag

首先传入的page肯定不能有 '..',使strpos() 函数返回false,false和右边的false恒等

构造payload:?page=123') or system("cat templates/flag.php");//

其实这里的前半段可以是它存在的文件也可以是它不存在的文件(123就算换成flag也不影响)

因为我们前半段返回的是false,我们只要or后面的执行即可

在最后添加注释//,确保后面的代码不会执行

传入page后查看源码,找到flag

cyberpeace{1f150d17210f2080d18800a5a99e9f9b}


本文转载自: https://blog.csdn.net/Myon5/article/details/130989663
版权归原作者 kali-Myon 所有, 如有侵权,请联系我们删除。

“攻防世界 mfw(Git源码泄露与命令执行漏洞)”的评论:

还没有评论