Böcek ödülü avına katılan herkes gibi ben de yıllar içinde keşif verilerimi organize etme konusunda bir takım zorluklarla karşılaştım. Bu makalede, size bir şekilde faydalı olabileceğini umarak, bu baş ağrılarından bazılarını gidermek için tasarladığım çözümü tanıtmak istiyorum.
Başlayın
BBRF’yi hemen kullanmaya başlamak için bu makaleye rastladıysanız hemen GitHub deposuna gidin! Ne olduğu (ve ne olmadığı) hakkında daha fazla bilgi edinmek istiyorsanız, aşağıda okumaya devam etmekten çekinmeyin.
Sorun ne?
Böcek ödülü avcılığında keşif veya “keşif” söz konusu olduğunda, çok sayıda aletin mevcut olduğu açıktır. Beş yıl önce ise alt alan adı kaba kuvvet uygulaması fierce
toplayabildiğim tek şey bu, bugün topluluk ya çok özel görevlerde uzmanlaşan (örneğin massdns), her alanda harika olmaya çalışan (örneğin ffuf) ya da birçok alt modülü başarıyla birleştiren çok sayıda iyi araca erişime sahip büyük bir çerçeveye (örneğin, yığın) dönüştürün.
Bu büyüyen araç çeşitliliğiyle çalışırken en büyük mücadelem her zaman organize olmaktı. Özellikle farklı araçların çıktılarını yönetmek ve bunları birleştirerek birbirlerini zenginleştirmek o kadar hantaldı ki, araçları geçici olarak kullanmaya devam ettim. Yani araçları amacına uygun kullanır, çıktıyı manuel olarak yorumlayıp kullanır ve bir sonraki adıma geçerdim.
Daha yapılandırılmış bir girişimle bu sorunun üstesinden gelmek için uygulamaya başladım. bbrf
Bunun öncelikle bir projeye ait tüm etki alanlarını ve IP’leri kolayca listelememe ve etki alanlarını ve IP’leri daha sonra kullanmak üzere saklamama olanak tanıyan bir komut satırı aracı olması gerekiyordu. Özellikle aşağıdaki gibi komutları çalıştırabilmeyi çok istiyordum: bbrf domains
Ve bbrf ips
verilerimi listelemek ve sublist3r.py | bbrf domain add -
sonuçlarımı saklamak için.
Mimarlık
İstenilen işlevselliği elde etmek için BBRF iki ayrı bileşen olarak tasarlandı: merkezi belge deposu biçiminde BBRF sunucusu ve Python betiği biçiminde BBRF istemcisi.
Belge deposu
Belge deposu veya BBRF sunucusu, CouchDB üzerinde çalışan merkezi bir belge odaklı veritabanıdır. CouchDB, HTTP istekleri aracılığıyla veritabanıyla etkileşime izin veren standart bir HTTP tabanlı API ile birlikte gelir. Veriler, önceden tanımlanmış herhangi bir veri yapısına ihtiyaç duymama avantajına sahip olan JSON belgelerinde saklanır.
Yayınlandığı sırada aşağıdaki belge türleri varsayılan olarak desteklenmektedir:
- programlarbir listesi de dahil olmak üzere kapsamı Ve kapsam dışı etki alanları ve bir engelli bayrak;
- alanlarbir programa ait olan ve çözümledikleri IP’lerin listesini içeren;
- IP’lerbir programa ait olan ve karşılık gelen alanların bir listesini içeren;
Müşteri
BBRF istemcisi ise JSON veritabanına yapılan HTTP çağrılarını çevreleyen bir Python sarmalayıcısı olarak düşünülebilir. Basitlik göz önünde bulundurularak, Linux atasözüne göre “bir şeyi yapın ve onu iyi yapın”, temel amacı alan adlarını ve IP adreslerini çıktılamak ve özetlemek, böylece giriş ve çıkışları birbirine bağlayarak diğer araçlarla birlikte iyi çalışmaktır. istemciye ve istemciden çıktı.
# find all domains that contain "dev" bbrf domains | grep 'dev'
# pipe all domains from subfinder into bbrf bbrf program scope --wildcard --top | subfinder | bbrf domain add -
Özellikler
Programlar ve Kapsamlar
BBRF, hata ödül platformlarının genel çalışma şekline uygun olarak keşif verilerinizi programlarda saklar. İle yeni bir program oluşturun bbrf new
ve başlamak için hem inscope hem de outscope alanlarını tanımlayın:
$~ bbrf new test $~ bbrf inscope add '*.example.com' 'www.example.com' $~ bbrf outscope add 'blog.example.com'
Artık eklenen her alan adı, merkezi veritabanına alınmadan önce bilinen alan adlarına ve tanımlanan kapsama göre kontrol edilecek:
$~ bbrf domain add 'test.example.com' 'blog.example.com' 'demo.example.com' 'test.example.com' 'www.example.org' $~ bbrf domains demo.example.com test.example.com # note that the outscoped domains have been omitted
İşbirliği ve Dağıtım
Merkezi veritabanı sayesinde istediğiniz sayıda makineye bir istemci kurabilir ve bunları aynı BBRF sunucusunu işaret edecek şekilde yapılandırabilirsiniz. Bu, günlük cron işlerini buluttaki VPS’nizde çalıştırmanıza ve çıktılarına yerel iş istasyonunuzdan kolayca erişmenize olanak tanır. Veya diğer böcek ödülü avcılarıyla işbirliği yapmak ve nereden geldiğinden veya onu kimin keşfettiğinden bağımsız olarak her zaman aynı keşif verileriyle çalışmak.
Genişletilebilirlik
Tüm bilgiler JSON dokümanlarına yazıldığı için veri formatı kolaylıkla değiştirilebilir. JSON’da temsil edilebilecek her şey yeni bir JSON belgesinde saklanabilir veya mevcut programlara, alanlara veya IP’lere öznitelik olarak eklenebilir. Bu, örneğin tanımlanmış URL’lerin, açık bağlantı noktalarının, dosya karmalarının, tam HTTP yanıtlarının vb. bir listesinin saklanmasına da olanak tanır. Verilerin yeniden düzenlenmesi gerekiyorsa ek görünümler dışında bu değişiklikler sunucu tarafında herhangi bir değişiklik gerektirmez. indekslendi ve sorgulandı. Python istemcisinde, bir dizi basit değişiklik ve ekleme, bu verilerle komut satırından etkileşime geçilmesine olanak tanır.
CouchDB’nin diğer tüm özelliklerinden BBRF sunucunuzda yararlanılabilir. Örneğin, kullanıcı tabanlı erişim kontrolünü, birden fazla sunucuda veri çoğaltmayı, verilerinizle bir yönetici paneli aracılığıyla etkileşim kurmak için Sahteton arayüzünü veya keşif verilerinizi görselleştirmek için özel bir kontrol paneli yazma yeteneğini düşünün.
AWS Lambda’sı (bkz: Bulut Büyüsü)
BBRF, BBRF örneğinin AWS Lambda’ya anında dağıtılmasını kolaylaştıran Sunucusuz bir yapılandırma dosyasıyla birlikte gelir. Bu, bulutta çalışan mikro hizmetlerinizden merkezi depoyla etkileşim kurmanıza olanak tanır:
curl https://abc.execute-api.us-east-1.amazonaws.com/dev/bbrf -d 'task=domains -p vzm'
Bunu, AWS bulutunda düzenli olarak keşif komut dosyaları çalıştıran crt.sh, dnsgrep ve sublister gibi araçlardan veri toplamak amacıyla kendi lambdalarına dağıtılan bir dizi entegre aracının sonuçlarını kaydetmek için kullandım.
JSON’un Gücü
BBRF, mimarisi nedeniyle tüm verileri ham JSON olarak saklar. BBRF, herhangi bir JSON belgesinin tanımlayıcısına göre sorgulanmasını destekler; bu, saklanan bilgileri komut satırınızdan hızlı bir şekilde incelemenize olanak tanır:
$~ bbrf show example | jq { "_id": "example", "_rev": "11-e7a49b214e37e5cc890a3620fde8a0c5", "outscope": [ "blog.example.com" ], "passive_only": false, "type": "program", "inscope": [ "*.example.com", "www.example.com" ], "disabled": false } $~ bbrf show www.example.com | jq { "_id": "www.example.com", "_rev": "1-1c63d262fd46ace7f8eeb0fdd5370d07", "ips": [], "program": "example", "type": "domain" }
Ne değil
BBRF başka bir hepsi bir arada keşif otomasyon aracı olmayı amaçlamıyor. Bunun yerine, halihazırda bildiğiniz ve sevdiğiniz mevcut araçlarla entegre olmanızı ve sonuçlarınızı cihazlar arasında paylaşmanıza olanak tanıyan basit bir arayüz sağlamayı amaçlamaktadır.
Her tür veriyi alıp tek tip bir veri kümesine dönüştürmek için de tasarlanmamıştır. Varsayılan olarak, bbrf
yalnızca kendisine yeni satırla ayrılmış biçimde ve düz metin biçiminde iletilen etki alanlarını ve IP’leri işleyecektir.
Yayınlandığı sırada, bbrf
yalnızca etki alanlarını ve IP’leri destekler; bu, bilinen bazı sınırlamaların olduğu anlamına gelir:
- URL’ler için destek yok;
- Bağlantı noktaları ve hizmetler için destek yok;
- IPv6 desteği yok;
Geri bildirim
Bu projenin, kullandığım süre boyunca bana yardımcı olduğu gibi, karşılaştığınız bazı sorunların üstesinden gelmenize gerçekten yardımcı olabileceğini umuyorum. Ve daha fazla insanın bunu günlük iş akışlarında benimsediğini görmek için sabırsızlanıyorum.
Ancak hiçbir zaman geliştirici rolünde bulunmadığım için (ve dolayısıyla kodlamam oldukça saçma olduğundan), kaçınılmaz olarak karşılaşacağınız hatalar veya eksik olduğunu düşündüğünüz özellikler hakkında bazı geri bildirimler olabileceğini umuyorum. Bu durumda lütfen GitHub sorunları sayfasına dönün veya yeni bir Çekme İsteği oluşturun; umarım sorunları çözebiliriz!