东莞网站优化公司哪家好,免费一键生成详情页,wordpress取订阅数据,余江网站建设git信息泄露漏洞 当前大量开发人员使用git进行版本控制#xff0c;对站点自动部署。如果配置不当#xff0c;可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。 危害 攻击者可以利用该漏洞下载git文件夹里的所有内容。如果文件夹内有敏感信息比如站点源码、数据… git信息泄露漏洞 当前大量开发人员使用git进行版本控制对站点自动部署。如果配置不当可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。 危害 攻击者可以利用该漏洞下载git文件夹里的所有内容。如果文件夹内有敏感信息比如站点源码、数据库账户密码等攻击者可能直接控制服务器。 Git介绍 Git作为大家熟悉的深受欢迎的版本控制工具和其他同类工具有很多不同之处 Git始终保存快照而不是文件差异。任何数据存储前始终使用SHA-1计算校验和保证内容完整性。使用分布式仓库设计让大多数操作都在本地进行保证了使用效率。几乎所有操作都是向数据库增加数据提交之后就很难丢失数据。它的本质更像一个内容寻址content-addressable文件系统并在此之上提供了一个版本控制系统的用户界面。 Git 有三种状态你的文件可能处于其中之一已修改modified、已暂存staged、已提交committed。由此引出三个逻辑区域他们和文件状态以及部分对应操作的关系如下图。 Git对象 在Git系统中有四中类型的对象所有的Git操作都是基于这四种类型的对象。 “blob”这种对象用来保存文件的内容。“tree”可以理解成一个对象关系树它管理一些tree和“blob”对象。“commit”指向一个tree它用来标记项目某一个特定时间点的状态。它包括以下关于时间点的元数据如时间戳、最近一次提交的作者、指向上次提交、“tag”给某个提交增添一个标记。 git对象之间的个关系如下图 SHA1哈希值 在Git系统中每个Git对象都通过哈希值来代表这个对象。哈希值是通过SHA1算法计算出来的长度为40个字符40-digit。 .git目录 config - 包含一些配置选项description - 仓库的描述信息主要给gitweb等git托管系统使用HEAD - 指定当前分支,映射到ref引用能够找到下一次commit的前一次哈希值hooks - 存放可在某些指令前后触发运行的钩子脚本hook scripts默认包含一些脚本样例index - 这个文件就是我们前面提到的暂存区stage是一个二进制文件info - 存放仓库的信息objects - 存储所有Git的数据对象,对象的SHA1哈希值的前两位是文件夹名称后38位作为对象文件名refs - 存储各个分支指向的目标提交branches - 还没发现有什么用处 Git基本操作 对照这张图来理解两段提交工作区(working tree)暂存区stage/index和 branch之间的关系 常用命令: git ls-files -u显示冲突的文件-s是显示标记为冲突已解决的文件 git diff 对比工作区和stage文件的差异 git diff --cached 对比stage和branch之间的差异 git ls-files --stage 检查保存在stage的文件 git log 显示到HEAD所指向的commit为止的所有commit记录 。 git reset HEAD file git reset --hard HEAD放弃工作区和index的改动,HEAD指针仍然指向当前的commit. 实际操作流程 git init 此命令初始化一个新本地仓库它在工作目录下数据目录生成一个名为.git的隐藏文件夹。git会将所有的文件目录提交等转化为git对象压缩存储在这个文件夹当中。 git init 命令后面不加参数表示把当前目录变为仓库,如下表示在当前目录下创建test仓库 git add 创建一个test1.txt文件git status查看当前状态,此时test.txt文件位于工作目录 通过git add跟踪这个文件,把test.txt文件放到暂存区.(可以使用git rm --cached命令来取消暂存) git commit 在暂存区的文件使用git commit提交到版本库(数据目录)中 -m参数表示提交的注释,如果不使用-m参数那么会跳出页面提示主动输入注释 修改test.txt文件 修改后通过查看git status可以看到文件状态被改变了。根据提示知道文件已被修改但是未提交修改到版本库中。 git diff,对比工作区和暂存区文件的差异,查看文件被修改的地方 确认修改无误后提交到版本库的方法和提交初始文件一样,需要先提交到暂存区,然后提交到版本库. 再修改一次文件 提交 git log 查看下历史记录,HEAD我的理解就是指针,指到最后提交的版本 git reset --hard,回退版本 回退到上一个版本,gei reset --hard HEAD^ 厉害了,可以看到HEAD指针也指到了第一次修改的版本,第二次修改的版本看不到了 但是我要是因为操作失误怎么追回地二次修改的版本呢,可以使用git reset --hard 版本号追回 git reflog获取版本号,得到第二次修改版本号为5edcc89 get reset --hard 5edcc89恢复 我后面测试使用comit后面一串很长的字符,这里理解为对象sha1字符串吧.也可以回退到那个版本 可以把工作区修改的文件git add提交到暂存区也可以使用git checkout — test1.txt 把工作区的修改撤销这样文件就会回退到上一次提交时的状态。 Git信息泄露原理 通过泄露的.git文件夹下的文件还原重建工程源代码解析.git/index文件找到工程中所有的文件名文件sha1去.git/objects文件夹下下载对应的文件zlib解压文件按原始的目录结构写入源代码 危害渗透测试人员、攻击者可以进一步代码审计挖掘文件上传sql注入等安全漏洞 GitHack工具使用 GitHack会按照上面的原理自动恢复 参考:https://www.zhihu.com/tardis/sogou/art/30044692