BF Forked & Threaded Stack Canaries
Last updated
Last updated
AWS Hacking öğrenin ve uygulayın: HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking öğrenin ve uygulayın: HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)
Bir canary ve PIE (Pozisyon Bağımsız Yürütülebilir) ile korunan bir ikiliyle karşı karşıyaysanız, muhtemelen bunları atlatmanın bir yolunu bulmanız gerekecektir.
checksec
'in, bir ikilinin bir canary ile korunduğunu bulamayabileceğini unutmayın, bu durum statik olarak derlenmişse ve işlevi tanımlayamıyorsa.
Ancak, bir değerin bir işlev çağrısının başında yığına kaydedildiğini ve bu değerin çıkış yapmadan önce kontrol edildiğini fark ederseniz, bunu manuel olarak fark edebilirsiniz.
Basit bir canary'yi atlatmanın en iyi yolu, ikilinin bir program olduğu durumdur her yeni bağlantı kurduğunuzda çocuk işlemleri çatallandırır (ağ hizmeti), çünkü her bağlandığınızda aynı canary kullanılacaktır.
Bu durumda, canary'yi atlatmanın en iyi yolu, canary'yi her karakteri karakter karakterine zorlamaktır, ve tahmin edilen canary baytının doğru olup olmadığını anlayabilir ve programın çöktüğünü veya düzenli akışını sürdürdüğünü kontrol ederek. Bu örnekte fonksiyon 8 Bayt canary (x64)'yi zorlar ve doğru tahmin edilen baytı yanlış bayttan ayırt eder sunucu tarafından bir yanıt gönderilip gönderilmediğini kontrol ederek (diğer durumlarda başka bir yol, bir try/except kullanmak olabilir):
Bu örnek 64 bit için uygulanmıştır ancak 32 bit için kolayca uygulanabilir.
Bu 32 bit için uygulanmıştır, ancak kolayca 64 bit'e değiştirilebilir. Ayrıca bu örnekte programın önce girişin boyutunu belirten bir baytı ve ardından yükü beklediğine dikkat edin.
Aynı işlemdeki iş parçacıkları aynı canary belirtecini de paylaşacaklarından, bu nedenle bir saldırı gerçekleştiğinde ikili her seferinde yeni bir iş parçacığı oluşturan bir ikili varsa bir canary'yi kaba kuvvet yöntemiyle bulmak mümkün olacaktır.
Ayrıca, bir canary ile korunan bir iş parçacığında bir tampon taşması, TLS'de depolanan ana canary'yi değiştirmek için kullanılabilir. Bu, bir iş parçacığının yığınındaki bir **taşma aracılığıyla TLS'nin depolandığı bellek konumuna ulaşmak mümkün olabileceği için mümkündür. Sonuç olarak, önlem işe yaramaz çünkü kontrol, iki aynı olan (ancak değiştirilmiş) iki canary ile yapılır. Bu saldırı, şu yazıda gerçekleştirilir: http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads
Ayrıca, genellikle TLS'nin mmap
tarafından depolandığını ve bir iş parçacığının yığınının oluşturulduğunda da buna göre mmap
tarafından oluşturulduğunu belirten https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015 sunumuna da bakın, bu da önceki yazıda gösterildiği gibi taşmaya izin verebilir.
64 bit, PIE olmadan, nx, BF canary, bazı belleğe execve
'yi çağırmak için bir ROP yaz ve oraya atla.