Unutulmuş Atlantis: Ethereum kısa adres saldırısının ayrıntılı açıklaması

0 genel bakış

Akıllı sözleşme güvenlik açıklarından bahsetmişken, ilk akla gelen algoritma taşması, çağrı işlevini kötüye kullanma, sahte yeniden yükleme ve diğer güvenlik açıkları olabilir.Sonuçta bu birçok akıllı sözleşmede bir örnek ve hasar seviyesi nispeten yüksek, ancak var Bir güvenlik açığı birçok kişi tarafından görülmüş ve duyulmuş olabilir, ancak pek çok insanın ilgilendiği bir güvenlik açığı değil. İnsan dünyasının Atlantis'i gibidir. Birçok kişi bunu bilir, ancak Google'da bulunabilecek çok az araştırma raporu vardır. Bu sadece prensip hakkında konuşuyor ve gerçeği yeniden canlandırmıyor ve kağıt üzerinde konuşmak gibi geliyor. Herkes bunun EVM düzeyinde bir kusur olduğunu, akıllı sözleşme düzeyinde bir sorun olmadığını bilir ve bizim varsayılan düşüncemizde bu, düzeltilmiş bir hatadır. Bir süre önce kısa adres saldırısının resmi onarım planını kontrol etmeye çalıştım ancak araştırmamdan sonra ilgili onarım planını bulamadım.Ayrıca Github'dan da aldım ve ilgili onarımı tarihi sürümde göremedim. Yani sanırım, Gerçekten EVM seviyesinin sabitlenmemiş olabileceğini tahmin ediyorum.

1 Kısa adres saldırıları hakkında temel bilgi

Kısa adres saldırısı, aslında her ERC20 sözleşmesinin aşağıdaki işleve sahip olmasıdır.

Sözleşmenin bu işlevini çağırırken, aslında, EVM seviyesinde, bir bayt kodu dizisi geçirilir. Aşağıdaki şekilde gösterildiği gibi, Etherscan'da her işlemin girdi verilerindeki işlev çağrı verisinin tamamını görüntüleyebilirsiniz.

Gelen bayt kodu, yöntemin imzasını (ilk 4 bayt) ve gelen parametre değerini (sırasıyla gelen adres verileri ve miktar verileri dahil olmak üzere veri bölümü) içeren toplam 136 bayta (normalde) sahiptir. Her ikisi de sıfır doldurulmuş yüksek bitlere sahip 32 bayttır). Yukarıdaki resim anormal, sadece 134 bayt, bu benim özel muamelem, aşağıda detaylı olarak anlatacağım.

Yukarıdaki bilgilerden, EVM'nin gelen parametreleri bayt koduna göre tanıdığını ve bayt kodunun olduğu kadar olduğunu ve doğrulanmayacağını bilebiliriz. Tesadüfen, işte bu, boşluk oluştu. Bazı insanlar yasadışı adresleri kullanmak istiyor. Örneğin, adres EVM'nin bunu nasıl ele alacağını görmek için kasıtlı olarak son birkaç rakamı yazıyor. Ancak tesadüfen, EVM yalnızca hataları bildirmekle kalmayacak, aynı zamanda " Adresi tamamlamanıza yardımcı olacak "samimi", nasıl tamamlanır? Adresten sonra yetersiz kalan kısmın miktar verisi kısmının rakamları ile doldurulmasıdır, örneğin adresinizin orijinali

Sonuç olarak, öngörülemeyen entrikalar nedeniyle kasıtlı olarak iki sıfır yazdınız ve şu hale geldiniz

Daha sonra "samimi" EVM, adresi tamamlamak için bayt kodunun miktar verisi kısmından iki bit alacaktır ve miktar verisi kısmının ilk iki hanesi tam olarak 0'dır, o zaman adresiniz hala orijinal adrestir. Ama veri kısmı 2 bit azaldı, ne yapmalıyım? Bu, ABInin bayt sayısıyla uyumlu değil. Sorun değil. "Özel" EVM, normal 136 bayta ulaşana kadar miktar verilerinizin sonuna 0 ekleyecektir. Sonra bazı öğrenciler soracaktır. Adresimde 60 varsa, o zaman adresim kasıtlı olarak 60s daha az yazıyor, veri bölümünde 6 daha fazla 0 var mı? Bu zenginleşmiyor mu?

Cevap: haklısın

Başka bir deyişle, başlangıçta doldurulan veriler 1'dir, ancak bayt kodu olduktan sonra 0x1'dir. Adres 6 bayt eksikse, verileriniz otomatik olarak 0x1000000 olur! Sürpriz yok, sürpriz yok!

2 İlk mola

Yeniden üretmek için remiksi ilk kez kullanmaya çalıştığımda, ancak aşağıdaki şekilde gösterildiği gibi sonucun başarısız olması beklenebilir, neden? Bu, 2017'de ortaya çıkan bir güvenlik açığı olduğundan ve onarım planı tüm gökyüzüne uçtuğundan, başarılı olabilmeniz için nasıl bu kadar basit olabilir, böylece ön uç kesinlikle giriş adresinizi filtreleyecek ve kontrol edecektir.Başarılı olmak istiyorsanız, saftır. .

Ama bir baş belası olarak, nasıl hafife alınırsınız? Resmi bir onarım planı bulunamadığına göre, en alt seviyede bir sorun olması gerekir, bu yüzden sadece en alt seviyeden başlayabilirim. Güvenlik açığı kurtarma için web3 kullanmayı düşündüm. Mevcut

3 Çevresel hazırlık

1. İşletim sistemi: macOS 2. düğüm: v8.11.03. web3: 1.0.0-beta.364. rpc: infura 5. test sözleşmesinin abi'si 6. Örnek sözleşme:

7. Örnek sözleşmeyi test ağına yerleştirmek ve sözleşmenin adresini almak için remiks kullanın. get abi yöntemi aşağıda kullanılacaktır:

4 İkinci randevu

Not: (Bu seferki tüm işlemler komut satırında yürütülür)

1. Komut satırı istemine girmek için node yazın 2. Projeye web3'ü tanıtın ve sağlayıcıyı ayarlayın (web3'ün nasıl indirileceği burada açıklanmamaktadır, ilgileniyorsanız, kendiniz bulabilirsiniz, çok basit bir işlem)

3. Sözleşme örneği oluşturun:

4. Yukarıda bahsettiğimiz işlemde girdi verilerini yapılandırmak olan abi inşa yöntemi, çünkü EVM yapmak için, kısa adres saldırısı oluşturmak istiyoruz, bu nedenle adresimiz normal adresten daha az bit içeriyor. Eksik adresleri otomatik olarak sıfırlarla tamamlayın, ancak aşağıdaki şekil gibi normal yapı başarısız olacaktır

Ama bir kez daha, bir baş belası olarak, hafife alınamazsın! Bu yüzden özel bir metoda ihtiyacımız var.Başta buraya geldiğimde tespit olmayacağını düşünmüştüm, çok saftı.Aslında bu web3 tespitiydi.Özel bir metoda ihtiyacımız vardı. Bu yöntem iki adıma bölünmüştür

İlk adım normal bir abi oluşturmaktır, bu sefer kullanılan adres '0xdfca6234eb09125632f8f3c71bf8733073b7cd00' şeklindedir.

Şekilde gösterildiği gibi, mevcut abi veya girdi verisi 136 bayttır.

Adım 2: abi'deki adresin arkasındaki iki sıfırı gizlice silmek için küçük bir hile kullanın Başlangıçta 136 bayttı, ancak şimdi sadece 134 bayt, yukarıda bahsettiğim anormal girdi verileri. Şu anda inşa edildi

Yukarıdakiler, sıfırı sildikten sonra abi

tamam herşey hazır olduktan sonra en heyecanlı ana ulaşabilirsin

5. Ethereumjs-tx'i projeye tanıtın (nasıl indirileceği burada ayrıntılı değildir)

6. Özel anahtarınızı içe aktarın ve bazı işlemler yapın:

7. Orijinal işlem verilerini oluşturun Bu çok doğal bir Ethereum işlem verisidir.Her sözleşme görüşmesi aslında aşağıdaki verileri oluşturacaktır. Bu alandaki bilgiler ayrıntılı değildir, ancak nonce hakkında fazla bir şey bilmememiz dışında, remix'teki sözleşmeyi aradığımızda karşılaşacağımız tek şey diğerleri. Nonce ile ilgili açıklama aslında hesap tarafından gönderilir. İşlem sayısı, örneğin, hesabınız 5 işlem gerçekleştirdiyse, o zaman nonce 4'e eşittir (nonce 0'dan başlar). Hesabınızın son işleminin nonce'unu ehterscan'da görüntüleyebilirsiniz.Aşağıdaki özel işlem verileri. :

8. İşlemi imzalayın ve işlem üzerinde biraz işlem yapın

9. İşlem gönder

5 Mucize yeniden ortaya çıkıyor

Önceden ayarlanmış olay olayı aracılığıyla, EVM'nin başarıyla sıfırlarla doldurulduğunu görebiliriz.Giriş orijinal olarak 123'dür, ancak EVM çıkarmanın sonucu 31488'dir. Orijinal onaltılık 1230x7b'dir ve şimdi 0x7b00! canlandırmak!

6 Postscript

"Samimi" Testnet'te de bir sözleşme yayınladım ve ayrıca zincirdeki kayıtları sorgulayabildiğimi doğruladım, görmek inanmaktır. https://kovan.etherscan.io/address/0x6e2f32497a7da13907831544093d3aa335ecbf33#code

Bu operasyon bana Feiyue Madhouse'daki cümleyi hatırlattı - Ama denedim, değil mi? Lanet olsun, en azından bunu yaptım.

7 Referanslar

web3js 1.0 arayüz yöntemi (Çince kılavuzu) Kısa adres saldırısının ayrıntılı açıklaması https://zhuanlan.zhihu.com/p/ 34470071 ABI hakkında ayrıntılı bilgi burada https://solidity-cn.readthedocs.io/zh/develop/abi-spec.html

Çin ve Güney Kore Dior şovunda buluşuyor! Yang Ying soğuk ve Yan Yang Caiyu ağırbaşlı ama Pei Xiuzhi'nin yüzü yuvarlak
önceki
Çok korkunç! Bazı uygulamalar sizi gözetliyor!
Sonraki
Guan Xiaotong, modanın kapağında göründü, hazır eriştelere cesurca meydan okudu ve modaya uygun ve çarpıcıydı.
Ekonomistler şöyle diyor: Kilo vermek mi istiyorsunuz? Yalnız ye!
Yeni drama ve gösteri kıyafetlerini tanıtın, Yao Chen işyeri için bir model gösterdi ve bej ceket iyi bir entelektüel mizaca sahip
En utanç verici Yılbaşı Gecesi: "Dünyadaki Son Gece" nin pazarlaması grup tarafından alay konusu oldu
Kömür ticareti piyasası inşaatı ve kömür tedarik zinciri hizmeti alt forumu başarıyla düzenlendi
İyi rakam sadece bir yardımcı mı? 37 yaşındaki Wang Ou seyirciyi sersemletmek tarzına, karışımına ve eşleşmesine bağlı
Li Nian yüksek profilli kıyafetleri göstermek için geri dönüyor! Motosiklet kıyafeti ve ekose etek yakışıklı ve baştan çıkarıcı, 34 yaşında 24 yaşında gibi
2017 Ulusal Kömür Ticaret Fuarı Qinhuangdao'da yapıldı
"Caoyuan" 70 yıllığına arazi kiraladı: Bir mu ormanlık alan için yılda 3 yuan, "yemek çubuğu için yeterli değil"
Guo Qiang: Blockchain teknolojisi, token ve fikir birliği topluluğu, DAC'ın üç ana unsurudur
44 yaşındaki Charmaine Sheh aslında bu sefer beyaz çizmelerin üzerine dikilmişti.Retro baskılı bir etekle çoktan çökmüştü.
2017 Ulusal Kömür Ticaret Fuarı Alt Forumu başarıyla gerçekleştirildi
To Top