【第六天 - vim 备份泄漏】

Q1. vim 是什麽?

  • 简单来说, vim 是一种纯文字编辑器,是从 vi 发展出的增强版,而 vi 是从 ex 发展出的视觉化文字编辑器, ex 又是从 ed 发展出的增强版。 以上这些工具都是在 Unix / Unix-Like 作业系统上的纯文字编辑器。

  • 早期,当人们还在用电传打字机作为电脑的终端机时,由於无法即时更新画面,因此皆是使用如 ex / ed 的 line-oriented editor,一次编辑一行,并且只有在使用者下指令时才会将该行印出。

  • 当人们陆续开始使用显示器作为终端机时,由於画面可以即时更新了,line-oriented editor 的使用体验不在令人满意, vi 也随之诞生。 vi 延伸了 ex 的功能,但同时实现了视觉化编辑的功能,或称为 screen-oriented editor。 vi 能够在萤幕上呈现文本,并透过游标在文本中自由移动,选择欲修改的位置。 vi 大幅提升了编辑文本的体验,成为诸多 Unix / Unix-Like 发行版上预设的纯文字编辑器。

  • 最後, Vi IMproved (vim) 是 vi 的增强版,增加了更多强大的功能,例如 auto-completion 、 syntax highlight 等等利於程序开发的功能,还能够撰写 plugin 进一步扩充功能,至今仍是最多工程师使用的纯文字编辑器之一。

Q2. 为什麽会有 vim 备份档泄漏的问题?

  • 当 user 在使用 vim 编辑文件时,在编辑中,会在当前目录下依序生成备份文件 .swp.swo.swn 的隐藏档案,在 vim 意外中断时,这些备份档案可以用於还原尚未储存的变更。
    • 编辑 flag 档案时,第一次会生成 .flag.swp 的备份档案,若 .flag.swp 存在(例如已经有一次意外中断,或者有另一外使用者已开启此档案),则会生成 .flag.swo,第三次则会产生 .flag.swn
    • 当工程师想将某个备份档还原时,可以使用 vim -r <.档名.要的备份档> 的指令
  • 由於备份档案为隐藏档,工程师可能在未注意备份档存在的情况下,将其公开於 Web Server 上,或是随着资料夹打包传送给他人。
    • 生成的备份档预设权限可能会随着设定、版本有所差异,不过我实作时,预设权限为 644,此权限可以於网页端被骇客所读取

Q3. vim 泄漏类型

  • 将 FLAG 储存於 <.档案.swp> 备份档案中 (如 Lab 1)
    • ls -al
      • 查看目录结构
    • cat <.档名.目标备份档>
      • 读取目标档案

Lab 1

  • 题目环境布置
# Create Folder
sudo mkdir /var/www/html/vim && cd /var/www/html/vim

# Take ownership
sudo chown -R "$(whoami)" .

# Edit File with VIM
vim index.php

https://ithelp.ithome.com.tw/upload/images/20210920/20140592VgWMXGijkv.png

  • 在 vim 中:
# Save Empty file
:w

# Enter Insert Mode
i

# Type flag
FLAG{caec56b46ae54987465ee1231dfff}

# Enter Normal Mode
<ESC>

# Wait a minute (wait for vim write the modification into swap file)

# Suspend vim
<Ctrl>z
  • 回到 bash
# Kill vim
kill -9 %

# 有时候可能因为版本、设定的原因,备份档可能权限为600,也有可能是644
# 让网页可以读取的权限,至少要让 other 拥有 r 的权限
chmod o+r .index.php.swp

https://ithelp.ithome.com.tw/upload/images/20210920/201405922WWPrIOnnF.png

解题

  • 存取 .index.php.swp ,由於非纯文字档,浏览器一般会直接下载下来。
    https://ithelp.ithome.com.tw/upload/images/20210920/20140592oi1dueZEX5.png

  • 使用 vim -r 还原档案
    https://ithelp.ithome.com.tw/upload/images/20210920/20140592Z5QW4HbO4x.png

https://ithelp.ithome.com.tw/upload/images/20210920/20140592WkrZet5a7t.png

https://ithelp.ithome.com.tw/upload/images/20210920/20140592gHKPJ8Od0B.png


<<:  Day5 DCS 分散控制系统

>>:  Day5. 及早失败,从中学习- 低精度原型

Day 14 | Flutter 基本介绍

什麽是Flutter 正如第一篇文章所说的 Flutter 是一个「框架」,可以用来开发跨平台原生的...

从 JavaScript 角度学 Python(28) - 闭包(Closure)

前言 那 JavaScript 中有一个东西叫做闭包 (Closure),Python 也会有吗?所...

第 7 集:你有 Flex Style 吗?

此篇会简单介绍 FlexBox,以及 flex container 的排列方向设置、对齐设置技巧。 ...

Day 07 - Design System — 前端工程师也该知道的那些事

在前一天我们知道了 Design System 为什麽出现、它试图解决的问题和一些使用上的 Min...

Day1-介绍与开始

嗨大家好~我是凯西!接下来是我开学的三十天实力增进计画的纪录 规划上会刷leetcode加强我的py...