Hata ayıklamadan Linux saldırılarına ve savunma öğrenmeye kadar üç beyaz şapka

0x00 önünde yazılı

Nereden z @explorer "Come and pwn me" hakkındaki yazımı yayınlayalı epey zaman geçti. Bu yazıyı benim gibi acemi bir Linux güvenlik açığı saldırganı için anlamak çok zor. Daha sonra bu yazıyla birlikte, ben Bu pwn me konusunun hatalarını bir kez daha ayıkladım ve ister hatadan bir konu ister Tanrı Z tarafından yazılmış bir konu olsun, çok heyecan verici ve öğrenmeye değer birçok şey olduğunu gördüm.

Her açıdan, bu güvenlik açığı yazımı Linux altındaki birçok saldırı ve savunma becerisini kapsıyor, bu yüzden düşünme sürecimi analiz ettim ve bir özet çıkardım ve sizinle paylaşmak için çıkardım veya bu güvenlik açığını kozadan çıkarırdım. En ilginç kısımlardan bazılarını çıkarın ve bu harika pwn me yolculuğunun tadını herkesle çıkarın.

Başlangıcın sonunda yazara tekrar teşekkür etmeliyim Hata Ve yazının yazarı Explorer , Gerçekten çok şey öğrendim.

Bu makale Tanrı Z'nin yazısıyla birleştirilmelidir. Portal burada

Makalede yerinde olmayan bir şey varsa veya açıklama yanlışsa, lütfen beni eleştirin ve düzeltin, çok iletişim kurun ve herkese yardım etmeyi umuyoruz! (Yumruklarınızı tutun!)

0x01 düşünceler ve sorular

Bu yazıyı okurken birçok sorum var. Aslına bakarsan, bu esas olarak bilinmeyen Linux yönetim mekanizmasından ve bazı Linux saldırı ve savunma becerilerinden kaynaklanıyor. Aslında, boşluklarla başa çıkmak zor değil. Anahtar, beyinlerini nasıl kullanacaklarında yatıyor. Aşağıda, bunu yaparken ortaya çıkan sorunları hata ayıklamama yol açacak ve bu sorunları dinamik hata ayıklama süreciyle çözeceğim.

  • Fastbin yığını keyfi adreslerin yazılmasına nasıl sebep olur?
  • Libc tabanı nasıl sızdı?
  • Serbest kanca yazarak / bin / sh nasıl çalıştırılır?

Bu üç soru aslında sadece giriş niteliğindedir.Dinamik hata ayıklama sürecinde birçok ilginç yer keşfedildi. Hata ayıklamaya başlamadan önce, bu üç sorunun neden ortaya çıktığından bahsetmek istiyorum.

Her şeyden önce, ilk soru, fastbin'in malloc mekanizmasının daha kolay anlaşılabileceğidir.Bu tekil bağlantılı bir listedir, yani bir sonraki parçaya sadece bir işaretçi vardır, ancak bu işaretçi yazmak için keyfi bir adrese ulaşmak için nasıl kullanılır?

İkinci soru, Tanrı Z'nin yazma kullanımında bahsedilen iki sızıntı yöntemi olduğudur. Bunların çalışma mekanizmaları nedir?

Üçüncü soru, / bin / sh'nin amacının, writeup'ta bahsedilen serbest kancayı yeniden yazarak elde edilmesidir, öyleyse süreç nasıldır?

Aşağıdaki üç soruyla en heyecan verici yolculuğa başlayın ~

0x02 Tanrı Z'nin bahsettiği birkaç çukur

Yazımda, God Z, biri kontrol işlevi ve makalenin sonunda belirtilen yazar hatası olmak üzere birkaç çukurdan bahsetti.İki yöntem var, biri global değişken a000'in boyutunu değiştirmek için herhangi bir adres kullanmak, diğeri ise Doğrudan yok sayın, çünkü bazen kontrol işlevi geçemez.

Diğer bir çukur ise TAM RELRO koruması ile ilgili, hatta korumanın açılma durumunu gdb-peda aracılığıyla doğrudan kontrol edebilirsiniz.

Bu koruma esas olarak var tablosu içindir.Bu elde edilen tablo, birçok işlev işaretçisi depolar. Var tablosuna karşı saldırı ve savunma kavramı, Windows altında sanal bir işlev saldırısı gibidir. Var tablosunun saldırısıyla ilgili çok iyi bir makale var.Portal burada.

Burada ayrıntılara girmeyeceğim, çünkü bu konu hakkında Tanrı Z'nin kullandığı yöntem de çok ilginç.

0x03 Kaçak adresinden herhangi bir adrese yaz

Sızıntı adresinden bahsetmişken, fastbin parçasından başlamalıyız. Fastbin öbek, Linux altında bir yığın ayırma yöntemidir. Nispeten basittir. Tek bağlantılı bir liste kullanır. Bir sonraki ayrılmamış öbeğe yalnızca bir fd işaretçisi vardır. Bunu kullanın Bu yöntem, sonraki herhangi bir adres yazımı ile çok önemli bir ilişkisi olan yığının adresini sızdırabilir.

Fastbin öbekleri için internette pek çok talimat var, aslında basitleştirilmiş sürüm böyle.

Bu pwn probleminde, Vul yapısının inşası için, rank tam olarak fd işaretçisinin konumundadır.Silme fonksiyonunda free çağrıldığında, rankın konumu yığın adresini sızdıracaktır.Bu fastbin yığınının mekanizmasıdır.

Bu güvenlik açığında, malloc iki fastbin parçası için ayrı ayrı başvurur ve ardından iki parçayı serbest bırakır.Önce uygulama sürecine bakalım.

6040a0 adresinin konumu, rankın saklandığı, yani fd'nin bulunduğu yerdir.Sonra, bu adrese dikkat edeceğim.Diğer parçaların başvuru sürecini göstermeyeceğim.Ücretsiz parçadan sonra fastbin yığın listesi oluşturma sürecine bir göz atalım.

Şimdi bu parça üzerinde ücretsiz bir işlem gerçekleştirin.

Burada bahsetmemiz gereken bir nokta iki serbesttir.Pwn konusunda, biri detay işaretçisi için boş, diğeri tüm bellek için ücretsizdir 00604110 adresini inceleyin. Aslında, bu, önceki vul yapısındaki malloc adresinin detay işaretçisi konumudur. , Burada 006040a0'dan önceki yığın olarak serbest bırakılır ve ayrıntı göstericisinin konumu fd'nin konumu olur, bu nedenle kullanılmayan öbeğin adresi olan 00604070'i gösterir.

Daha sonra, eip'in hafızasız fonksiyon çağrısında olduğunu gözlemleyin ve sonra içinden geçin ve 006040a0 adresini inceleyin.

Görüldüğü gibi 006040a0 konumunun o anda yığın adresini sızdırdığı ve bu konumun daha önce bahsedilen rankın adresi olduğu ve yazımda bahsedildiği görülmektedir.Rütbe atandığında yargılanacak bir if ifadesi vardır.Rütbe 0'dan büyükse atanır. Bu nedenle, kontrol sıralaması 0'dan küçük veya 0'a eşit olduğu sürece herhangi bir değer atanmayacaktır.Bu şekilde programın gösterme fonksiyonu aracılığıyla yığın adresi sıra ile yazdırılabilir.

Aslında bu süreç, ikili güvenlik açığı saldırısı ve savunmasında ASLR'yi baypas etmenin kullanılmasıdır ve yukarıdaki hata ayıklama senaryosu en basit süreçtir.

O halde keyfi adres yazma süreci nasıl ortaya çıkıyor? Bu, yayınlandıktan sonra yeniden kullanmak için pwn başlığındaki düzenleme işlevinin serbest bırakılmasının ardından kullanımdan bahsetmek içindir.Bu aslında uaf'da çok basit bir durumdur.Yığın serbest bırakıldıktan sonra, işaretlenmez, böylece yayınlandıktan sonra da kullanılabilir. Parça çalıştırılır.Bu şekilde, fd'nin değeri değiştirilebilir.Bu, sahte parçaların tipik bir kullanım senaryosudur, böylece yeniden malloc kullanırsanız, herhangi bir adres yazma amacına ulaşmak için herhangi bir adrese atlayabilirsiniz.

Sahte parçalarla ilgili olarak, freebuf hakkında güzel bir makale var, portal burada

Sonra, bu uaf güvenlik açığının uaf güvenlik açıkları yoluyla sahte yığınlara nasıl neden olduğuna bir bakalım. Burada bundan bahsetmek istiyorum. Hata ayıklama işlemi sırasında, sanal makine iki kez kapandı ve hata ayıklama sırasında yığın adresinin değişmesine neden oldu. , Ancak tüm süreç ve açıklama değişmedi. (Anlık görüntünün trajedisini kullanmayı unuttum ...)

Birincisi, rütbenin düzenleme sırasında ücretsiz olarak atanabileceğidir, ancak şu anda, rütbenin gerçekte bulunduğu yığın serbest bırakılmıştır.

Görülüyor ki yığın bırakılmış olmasına rağmen başlık etiketi hala var, yani başlık değeri memcmp sürecinde hala eşleştirilebilir, böylece bir sonraki atamaya devam edilebilir.Bu bizi yapan süreçtir. Rütbenin konumunu kontrol edebilirsiniz ve daha önce sahte bir yığın oluşturup tekrar başvurabileceğinizden bahsedilmişti.

Buradaki adres değişikliğinin nedeni daha önce belirtilmişti Buradaki sahte yığın adresi, fastbin yığın başvuru sürecinde yığın adres üzerindeki sahte parçanın etkisini kanıtlayan az önce girdiğim şeydir.

0x04 hızlı bölmede ve normal bölmede libc sızıntısı

İlk üç soruda, libc'nin temel adresini sızdırmayla ilgili bir sorundan bahsetmiştim.Aslında, önceki bölümde, yığının temel adresini sızdırmanın yönteminden ve keyfi bellek okuma ve yazma yönteminden daha önce bahsetmiştim. Yazımda, libc sızıntısının iki yönteminden bahsedilir: Birincisi, makalede bahsedilen libc'nin temel adresini sızdırmanın yöntemidir. Hata ayıklama sürecim sırasında, yığın içinde bir ofsette bir libc olduğunu buldum. Libc'nin adresi, libc'nin temel adresini hesaplamak için herhangi bir adres okuma yöntemi kullanılarak bulunabilir.

Aslında, burada bahsetmek istediğim şey, Tanrı Z tarafından bahsedilen başka bir yöntemdir: normal bölme.Normal bölme ile hızlı bölme arasındaki fark nispeten büyüktür.İlk olarak, normal bölme yığını, daha sonra dinamik hata ayıklamada görülebilecek şekilde çift bağlantılı bir liste kullanır. Normal bin çift bağlantılı listenin başlığının adresi libc'de. O zamanki sorum şuydu: Yığın serbest bırakıldıktan sonra oluşturulacak libc işaretçisi tam olarak nedir? .

Bu prensibi bu soruyla ayıklamak için pozisyon hala add fonksiyonundadır.İlk olarak vul yapısının ilk malloc pozisyonu kontrol edilemez, ancak detay işaretçisi kontrol edilebilir.Detay uzunluğunu kontrol ederek fastbin yapabiliriz Yığın bir normalbin öbeği haline geliyor 4000 büyüklüğünde bir öbek için başvuruyoruz. Şu anda Linux normal bin mekanizmasını kullanacak.

Serbest bırakıldıklarında çift bağlantılı bir liste oluşturmak için iki parçaya başvurmamız gerekir.İlk parça serbest bırakıldığında, yığın alanında bir değişiklik olmaz.

Sonra, ikinci parçayı serbest bırakın. Serbest konuma ulaşmadan önce yığın alanını gözlemleyelim.

Kenara çekil ve buradaki yığındaki durumu gözlemle.

Libc'deki bağlantılı listenin baş göstericisinin şu anda açığa çıktığı ve libc'deki adresin herhangi bir adres okuma yöntemi ile elde edilebildiği ve ardından libc'nin temel adresinin hesaplanabildiği görülebilir.

0x05 Ücretsiz yürütme sistemini geçersiz kıl

Alınan tablonun korunması durumunda, kodun çalıştırılması amacına ulaşmak için anahtar adresi herhangi bir adrese yazarak değiştirilebilir.Başlangıçta, z tanrısı yazma işlemindeki son çalıştırma konusunda şaşkınlık duydum ve daha sonra geçti Hata ayıklama sonunda neler olduğunu anladı.

Aslında, bir önceki bölümde, serbest kaldığında önce detay işaretçisinin serbest bırakılacağını ve detay işaretçisinin oluşturulduğunda kontrol edilebileceğinden bahsetmiştim, bu nedenle Tanrı Z'ye göre, detay işaretçisine / bin / sh yazın. Bu şekilde, ücretsiz ayrıntı yazıldığında, herhangi bir adres tarafından özgür yazılırsa, sistem işlevinin adresinin üzerine yazılır, böylece özgür ayrıntı sistem ayrıntısı haline gelir, böylece sonunda silme işlevinin temel konumu çalıştırılır: sistem (/ bin / sh)

Bu şekilde, mermiyi hedef porta alabilirsiniz (shellcode'dan daha uygun görünüyor, ancak gerçek saldırı ve savunmada zordur)

0x06 Bazı ikili öğrenme deneyimleri

Bu noktaya kadar tüm sorular temelde çözüldü, çok şey öğrendiğimi hissediyorum, ikili ile kısa bir süredir temas halindeyim ve hala keşfetmeye çalışıyorum.

  • İlki daha fazla hata ayıklama.Birçok şeyi onlara bakarak anlamak zordur, ancak kendi başınıza hata ayıklama yaparsanız, bunları hızlı bir şekilde anlayabilirsiniz.
  • İkincisi, karmaşık sorunları basitleştirmek. Aslında, bu ifade mutlaka doğru değildir. Demek istediğim, bazı karmaşık mantık veya güvenlik açığı ilkelerini bir demo gibi basit bir modele dönüştürmektir, böylece güvenlik açığına daha hızlı aşina olabilirsiniz. En temel ilke.

Son olarak, üç beyaz şapkaya teşekkür ederim.Ca amca beni bu pwn problemini çözmem için üç beyaz şapkaya davet etti. Hala büyük ineklerden hala çok fazla boşluk olduğunu gördüm. Hala daha fazla aksaklık yaşayabileceğimi ve gelecekte daha fazla ilerleme kaydedebileceğimi umuyorum. !

Orijinal makale, yazar: Damlalar, yeniden yazdırılırsa lütfen kaynağı belirtin: http: //www.mottoin.com/tech/114923.html

Düşmanı alt etmek için büyük kılıç Arthur nasıl kullanılır
önceki
Yeni Mercedes-Benz E-Serisi ve Audi A6L nasıl seçilir? Bu makaleyi okur okumaz anlayabiliyorum
Sonraki
"Game of Thrones" resmi olarak bir dizi retrospektif hatıra afişi yayınlayarak taraftarların sekizinci sezon için beklentilerini ateşledi.
Zou Yanyan: Anlamsal Analize Giriş ve Anlamsal Analizde Çapraz Dil Bilgisinin Uygulanması | AI Araştırma Enstitüsü 70. Ders
GSM şifreleme mekanizmasını ve konum güncelleme sürecini analiz edin
Huang Zhong'un en güçlü kadrosu, güçlü ekip tüm kahramanları ağlayacak
Evlerini dikmek ve güzelleştirmek Muzlu kadınlar yeşil dikim becerileri yarışması başlatıyor
"Sirk Kralı" nın yönetmeni, "Uncle Wolf" adlı bir devam filmi yapacağını açıkladı Hugh Jackman'ın geri dönmesi bekleniyor.
Qualcomm resmen Apple'a veda ediyor! Resmi duyuru: iPhone bu yıl yalnızca Intel ana bandını kullanıyor
Kai Horizon: Uç bilgi işlem için yapay zeka işlemcileri, akıllı şehirlerin ve otonom sürüşün temel teknoloji temel taşlarıdır
Öldürmek için kulenin üzerinden geçmek norm haline geldi, Liu Chan'ın 6 puan farkla nasıl kazandığını görün
Konfigürasyon yükseltildi Ford'un yeni Ford'u
Lisansüstü giriş sınavını en çok hangi burç sever? Sonuç gerçekten beklenmedikti
Gerçek evcil mizaç! Meizu Flyme, 30 modeli sessizce Xiaomi'ye uyarlıyor
To Top