HTB Block Hunt3r Write-Up

Herkese merhaba, Bugün HTB platformunda bulunan 60 Puanlık son OSİNT sorusunu inceleyeceğiz.

Uzunca bir araştırmadan sonra Write-Up okumak zorunda kalsak da bize güzel şeyler kattı.

Okuduğumuz Write-Up;

Site: How to find images on [a] Block chain [OSINT]

Öncelikle soruyu inceleyelim.

Blockchain data can't be deleted, and bad actors are using it to store blobs, we want to hunt down the user that has been uploading illegal pictures on the Ethereum Goerli testnet blockchain. We need to find one picture to use it as evidence to take him down. We know he was actively uploading pictures between 2020-07-30 and 2020-08-01. Soruda 2020-07-30 ve 2020-08-01 tarihleri arasındaki Görli Ethereum test ağı işleminde içinde görsel transfer yaptığını gösteren bir işaret olduğu söyleniyor peki blockchain'de nasıl fotoğraf gizleyebiliriz?

Bunun için bu blog yazısına göz atabilirsiniz;

Site:Blockchain Art. Images including Kitties in Blockchain. Step by step instruction

Soruya başlamadan önce bilmemiz gerekenler;

Ethereum Nedir?

Ethereum, kripto para birimini, eteri (ETH) ve binlerce ademi merkeziyetçi uygulamayı güçlendiren topluluk tarafından işletilen teknolojidir.

Go-ethereum Nedir?

Go Ethereum, Ethereum protokolünün üç orijinal uygulamasından (C ++ ve Python ile birlikte) biridir. Go'da yazılmıştır, tamamen açık kaynaklıdır ve GNU LGPL v3 altında lisanslanmıştır.

Hadi başlayalım…

Ethereum Goerli testnet Blockchain için arama yaptığımızda Github da olan bir “ go-ethereum “ olduğunu gördük ve git repository’den makinaya klonladık. “ go-ethereum ” dizinine gidip geth komutunu çalıştırdık lakin başarılı olamadık çünkü geth komutu için öncelikle golang yüklü olması gerekiyordu.

Biz de makinamıza golang yükledik ve ardından go-ethereum komut satırı ara yüzüne bağlanmamız için gerekli olan geth komutu , makinamıza install işlemi yaptık ve make geth ifadesi ile derlemesini çalıştırdık.

$ sudo apt-get install -y build-essential       
// Build-essential paketi Debian paketini derlemek için gerekli 
//tüm paketlere bir referanstır.
$ git clone https://github.com/ethereum/go-ethereum
//go-ethereum git  repository’den makinaya klonlanır.
$ cd go-ethereum
// go-ethereum dizinine geçiş yapılır.
$ sudo apt install golang 
//geth aracı komutunu kullanmak için golang kurulumu yapılır. 
$ sudo apt install geth
//geth aracı komutu kurulumu yapılır.
$ make geth 
// Derleme yapılır 
 Çalışması için ./build/bin/geth şeklinde kullanmamız gerektiğini gösterdi.

Şimdi Ethereum da önceden yapılandırılmış yetki kanıtı test ağı olan goerli'ye bağlanmayı deneyeceğiz.

$ build/bin/geth --goerli    

Çıkan görüntü, bizim doğru yolda olduğumuzun göstergesidir.

Blockchain Sorgusu

Blockchain sorgusu yapmak için 2 yöntemimiz vardır. Bunlardan biri yerel kopyasını sorgulama bir diğeri ise uzak bir uç noktayı sorgulamadır.

Her iki durum için web3 kütüphanesi kullanılır.

Neden Web3 Kütüphanesi?

web3.py, Ethereum ile etkileşim için bir Python kitaplığıdır. Genellikle merkezi olmayan uygulamalarda (dapps) işlem gönderme, akıllı sözleşmelerle etkileşim, blok verilerini okuma ve çeşitli diğer kullanım durumlarına yardımcı olmak için bulunur.

Bu yüzden önce web3 kütüphanesi kullanılır.

Kütüphane kullanımı için Python ve pip yüklü değilse öncelikle onların kurulumu yapılması gerekir. Ardından web3 kütüphanesinin kurulumu yapılmalıdır.

$ sudo apt install python3
// python3 kurulumu yapılır.
$ python3 -m pip install web3  
//  pip ile web3 kütüphanesi kurulumu yapılır.

Web3 kütüphanesini yüklendikten sonra aşağıdaki işlemler yapıldı.

$ nano kod.py
// Nano  ile kod.py adında bir dosya açıldı. 

Aşağıdaki scripti “ kod.py ” içine yazdık;

from web3 import Web3
from web3.middleware import geth_poa_middleware
#w3 = Web3(Web3.IPCProvider('/home/kali/.ethereum/goerli/geth.ipc'))
#remote endpoint
w3 =  Web3(Web3.HTTPProvider('https://goerli.prylabs.net/'))
w3.middleware_onion.inject(geth_poa_middleware, layer=0)
blockStart = 3142345
blockEnd   = 3142350 
for x in range(blockStart,blockEnd):
 block = w3.eth.getBlock(x,True)
 print(block)

blockStart ve blockEnd kısmını , Etherscan ile göz atarken bulduk.

Dikkat: Uzak uç noktayı sorgulamak birkaç saat sürebilir.

Şimdi PNG’nin onaltılık kod dizimi bizim için önemli çünkü Blockchain de tüm içerik onaltılık bir değer olarak saklanır.

Soruda bize bir PNG olan bir dosya aktarımı yapıldığından bahsetmişti.

PNG hex = 89504e470d

Biz de kodu çalıştırırken bir yandan da görüntüyü yakalamak için PNG’nin onaltılık kod dizinini arattık.

$ python3 kod.py | grep ‘89504e470d’

Çıktıda PNG onaltılık kod dizimini bulduk , biraz üst tarafları inceledik ve from kısmının gönderenin adresini içermekte olduğunu gördük.

From adresini Etherscan sitesinde aramasını yaptık.

From Address : 0xb7e53A55dA3EEA0fbD09566afDa143667d77527D

Gönderenin cüzdanını incelediğimizde, burada iki OUT bir IN çıkışı görüyoruz.

Neden OUT? Çünkü gönderenin çıkış işleminde işlem yaptığını biliyoruz.

Buradaki OUT çıkışlarını incelediğimizde PNG dosyasının onaltılık kodu ilk satırda görülmektedir.

İlk OUT çıkışının Input Datasının başında olan 0x0 kısmını sildik ve ikinci OUT kısmındaki Input Datada da aynı işlemi uyguladık.

Bulduğumuz şifreli metni , CyberChef progamına attığımızda out kısmındaki küçük sihirli değnek sayesinde Flag karşımızda belirdi.

Flag , sizlerin de yapması için bir kısmı paylaşılmıştır. İyi çalışmalar 😊

Last updated