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

news2024/11/28 10:47:24

目录

Git 源码泄露:

1、strpos() 函数

2、assert()函数

3、file_exists() 函数

4、die() 函数

代码审计:

命令执行漏洞:


打开链接

 在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}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/597825.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在Centos7.9中安装postgresql15最新版本_参考官网说明安装---PostgreSQL工作笔记002

现在我要实现利用nifi同步,postgresql中的增量数据,也就是如果postgresql中出现增删改数据的时候,数据要自动同步到我们远程的mysql数据库中. 又难到我了...首先:去安装postgresql在centos7.9中,之所以在centos7.9中又安装了一遍,因为,我的大体思路,是利用postgresql的逻辑复制…

搭建flask后端和微信小程序前端

目录 一、准备工作 &#xff08;1&#xff09;我的前端代码 &#xff08;2&#xff09;我的后端代码 &#xff08;3&#xff09;后端运行成功的截图 &#xff08;4&#xff09;前端运行成功的截图 &#xff08;5&#xff09;整体运行成功的截图 二、部署后端 &#xff08…

【C++】什么是函数模板/类模板?

文章目录 一、函数模板1.什么是函数模板&#xff1f;2.函数模板格式3.函数模板原理4.函数模板实例化&#xff08;1&#xff09;隐式实例化&#xff08;2&#xff09;显示实例化 二.类模板1.类模板定义格式2.类模板的实例化 总结 一、函数模板 1.什么是函数模板&#xff1f; 函…

VBA之正则表达式(42)-- 提取代码中变量名称

实例需求&#xff1a;待处理代码段如下所示&#xff0c;现在需要提取其中的变量名称。 Public pFactor As Integer Sub TestCode() Dim reg As New RegExp, a As Workbook Dim ms As VBScript_RegExp_55.MatchCollection Dim m As VBScript_RegExp_55.Match Dim i, j Dim x1, y…

记一次udp服务性能优化经历

目录 概述磁盘io网络io减少重复计算减少内存复制减少互斥锁 概述 手上有个go项目&#xff0c;接收udp信息&#xff08;主要是syslog和snmp trap&#xff09;并查询设备信息&#xff0c;将信息结构化&#xff08;设备ip名称&#xff0c;匹配了什么规则之类的&#xff09;后发送…

生态系统NPP及碳源、碳汇模拟(土地利用变化、未来气候变化、空间动态模拟)

前言 由于全球变暖、大气中温室气体浓度逐年增加等问题的出现&#xff0c;“双碳”行动特别是碳中和已经在世界范围形成广泛影响。碳中和可以从碳排放&#xff08;碳源&#xff09;和碳固定&#xff08;碳汇&#xff09;这两个侧面来理解。陆地生态系统在全球碳循环过程中有着…

综述:图像分割

综述 图像分割(segmentation、cut)指的是将数字图像划分成多个图像子区域的过程。 在实际场景中具有诸多重要应用 在广义的图像分割中&#xff0c;传统方法和深度方法对于分割有不同的定义。 传统方法&#xff1a;对于图像进行区域划分&#xff0c;核心问题在于&#xff1a;区…

饿了么太狠:面个高级Java,抖这多硬活、狠活(饿了么面试真题)

前言&#xff1a; 在40岁老架构师尼恩的&#xff08;50&#xff09;读者社群中&#xff0c;经常有小伙伴需要面试饿了么、 头条、美团、阿里、京东等大厂。有很多的小伙伴&#xff0c;完成了人生的逆袭&#xff0c;拿到了高端的offer。 最近一个6年经验的小伙伴&#xff0c;年…

linux进程间通信(共享内存)

共享内存&#xff0c;顾名思义就是允许两个不相关的进程访问同一个逻辑内存&#xff0c;共享内存是两个正在运行的进 程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可 以将同一段物理内存连接到他们自己的地址空间中&#xff0…

win10 编译 openssl

环境:系统win10 编译器:VS2015 准备: 一、openssl下载 官网&#xff1a;www.openssl.org 安装Perl,安装NASM. cmd下运行perl --version得出下面信息就说明安装perl安装成功. nasm --version得出下面信息,说明nasm安装成功 我以vs2015为例: 打开这个终端,之所以打开这个是因…

适合每一个对高光谱技术感兴趣,并想用python进行实践的人

总结了高光谱遥感技术领域的基础原理与核心概念&#xff0c;采用编程语言复现经典数据处理和应用方法&#xff0c;追踪了最新的技术突破&#xff0c;在消化理解、触类旁通之后&#xff0c;用即使是遥感“小白”也容易接受的方式分享给你。 高光谱遥感学习的第一季&#xff1a;提…

HTTP的缓存机制是什么?

HTTP 缓存机制是一种在 Web 开发中常用的技术&#xff0c;它旨在提高性能和减少网络流量。通过缓存&#xff0c;可以避免不必要的网络请求&#xff0c;减少服务器负载&#xff0c;并加快页面加载速度。下面是关于 HTTP 缓存机制的详细介绍。 HTTP 缓存机制的基本原理是将 Web …

LNMP网站框架搭建(yum方式)

目录 一、Nginx的yum安装 1&#xff09;搭建nginx相关的yum源 2&#xff09;刷新yum仓库&#xff0c;安装启动nginx服务 二、mysql的 yum 安装 1&#xff09;卸载一切与mysql有关的包 2&#xff09;wget mysql相关的yum源 附加&#xff1a;第二种方式&#xff08;与上…

单卡轻松打造 ChatGPT 竞争者“原驼”,QLoRA 革新大语言模型微调技术

出品人&#xff1a;Towhee 技术团队 作者&#xff1a;顾梦佳 由 OpenAI 推出的聊天机器人ChatGPT 爆火&#xff0c;带动 AI 受到了前所未有的关注。随之市面上也涌现出了各类开源的大语言模型&#xff08;LLM&#xff09;&#xff0c;其中 LLaMA “羊驼系列”最受关注、最具潜力…

Vue实现订单确认界面禁止浏览器返回操作导致重复提交订单的问题

哈喽 大家好啊 最近遇到一个问题&#xff0c;就是在提交订单成功后的页面&#xff0c;然后用户去浏览器返回&#xff0c;就导致又提交了一次 然后就想到了如果提交成功页面&#xff0c;就阻止浏览器返回操作 主要实现如下&#xff1a; 1.在mounted的钩子函数&#xff1a; 2.…

每日一练 | 华为认证真题练习Day50

1、SWA和SWB的MAC地址表中&#xff0c;MAC地址、VLAN、端口对应关系正确的有&#xff1f;&#xff08;多选&#xff09; 2、PPP帧格式中的Flag字段的取值为&#xff1f; A. 0xFF B. 0x7E C. 0xEF D. 0x8E 3、ICMP报文不包含端口号&#xff0c;所以无法使用NAPT。 A. 对 B…

[ Term ] 你真的了解 UTC 时间吗?它和 GMT 时间的区别是什么?

什么是 GMT 和 UTC&#xff0c;他们之间的区别是什么&#xff1f; GMT&#xff08;Greenwich Mean Time&#xff09;和UTC&#xff08;Coordinated Universal Time&#xff09;是两个不同的时间标准&#xff0c;但它们非常相似并且通常被混淆使用&#xff0c;那他们之间的区别在…

后端从入门到转岗,如何转型

一、技术介绍 我学习的技术很多&#xff1a; 例如&#xff1a;JAVA JS C# python vue mysql Oracle 等等。 学习也是从入门开始 &#xff0c;入口是JAVA 二、学习前的准备工作 学习前需要准备什么呢&#xff1f; 我觉得学习前最需要准备的是下定决心吃苦&#xff…

常见数据采集工具介绍

数据采集是指从各种数据源中收集数据并将其存储在一个地方&#xff0c;以便进行分析和处理。数据采集工具是帮助我们自动化数据采集过程的软件或服务。在本文中&#xff0c;我们将介绍一些常见的数据采集工具。 Web Scraper Web Scraper是一种免费的浏览器扩展&#xff0c;可…

低代码平台选型必看!让你少走弯路

目前低代码技术正处在风口&#xff0c;低代码平台产品不断涌现&#xff0c;乱花渐欲迷人眼。作为软件公司或企业IT部门的负责人&#xff0c;在做低代码平台的 选型时需要关注哪些方面&#xff0c;才能顺利“上车”&#xff0c;让低代码为自己的团队赋能&#xff1f; 除了产品功…