BF Forked & Threaded Stack Canaries
Eğer bir canary ve PIE (Pozisyon Bağımsız Yürütülebilir) tarafından korunan bir ikiliyle karşı karşıyaysanız, muhtemelen bunları atlatmanın bir yolunu bulmanız gerekecektir.
checksec
'in, bir ikilinin bir canary tarafından korunduğunu bulamayabileceğini unutmayın eğer bu 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.
Brute force Canary
Basit bir canary'yi atlatmanın en iyi yolu, ikilinin bir program olduğu durumda her yeni bağlantı kurduğunuzda çocuk işlemi çatallandırması (ağ hizmeti) yapmasıdır, çünkü ona her bağlandığınızda aynı canary kullanılacaktır.
Bu durumda, canary'yi atlatmanın en iyi yolu, sadece her karakteri brute-force etmek ve tahmin edilen canary baytının doğru olup olmadığını anlamak için programın çöktüğünü veya düzenli akışını sürdürüp sürdürmediğini kontrol etmektir. Bu örnekte fonksiyon 8 Bayt'lik bir canary'yi brute-force eder (x64) ve doğru tahmin edilen baytı yanlış bayttan ayırt eder sadece sunucu tarafından bir yanıtın gönderilip gönderilmediğini kontrol ederek (diğer durumlarda başka bir yol try/except kullanmaktır):
Örnek 1
Bu örnek 64 bit için uygulanmıştır ancak 32 bit için kolayca uygulanabilir.
Örnek 2
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.
İş Parçacıkları
Aynı işlemdeki iş parçacıkları aynı canary belirteciyi paylaşacak, bu nedenle saldırı gerçekleştiğinde her seferinde yeni bir iş parçacığı oluşturan ikili bir dosyada bir canary'yi kaba kuvvet ile 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 (ve dolayısıyla, canary). Sonuç olarak, önlem işe yaramaz çünkü kontrol, iki aynı olan canary'lerle kullanılır (ancak değiştirilmiş). 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 bu yığının da 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.
Diğer örnekler ve referanslar
64 bit, PIE olmayan, nx, BF canary, bazı belleğe
execve
'yi çağırmak için bir ROP yaz ve oraya atla.
Last updated