Bir dosyanın izinlerini kedimin yardımı ile değiştirme


56
root@system:~# less myfile
-bash: /bin/less: Input/output error

Kök dosya sistemi öldü. Ama kedim hala hayatta (hafızamda):

root@system:~# cat > /tmp/somefile
C^d
root@system:~#

Biraz yalnız kalsa da, bütün arkadaşları gitti:

root@system:~# mount
-bash: /bin/mount: Input/output error
root@system:~# dmesg
-bash: /bin/dmesg: Input/output error
root@system:~# less
-bash: /bin/less: Input/output error
root@system:~# chmod
-bash: /bin/chmod: Input/output error

Sistem hala çalışıyor ve amacını yerine getiriyor. Biliyorum, bunun tek mantıklı cevabı sistemi çökertmek ve kök sürücüyü değiştirmek. Ne yazık ki, bu çok fazla zaman ve paraya mal olacak bir seçenek değil. Ayrıca, kedimi öldürecek ve bu beni üzecek.

Ona her zamanki arkadaşlarını bir donörden getirmeyi düşündüm. Ssh yüklenmeye çalışıp hattı keserse (binary yine de gider), onları içeri sokmaya cesaret edemem. Bu kedimin kuzeni için bir işe benziyor:

root@system:~# netcat -l 1234 > /tmp/less
-bash: netcat: command not found

Maalesef çoktan gitti.

Şimdi, onu diriltmek için bir ayin yapmak için kedimi kandırmaya çalışabilirim:

cat > netcat < /dev/tcp/localhost/9999

Ve bu tür çalıştı. Neredeyse yaşıyor:

root@system:/tmp# /tmp/netcat
-bash: /tmp/netcat: Permission denied

Sadece küçük bir yaşam kıvılcımına ihtiyacı var. Şu +xan anlatamayacağım o küçük büyü tutkusu.

Kedimin arkadaşlarını geri getirmeme yardım eder misin?


3
Koşabilir /lib/ld-linux.so.2 ./netcat(veya sisteminizin eşdeğeri) ve bir şeyler elde edebilir misiniz ?
Michael Homer

4
Ayrıca: Bu hangi işletim sistemi? Monte edilmiş herhangi bir vfat veya NTFS dosya sisteminiz var mı? Ağ dosya sistemleri? Bölümlerini içeriğini silebilirsiniz? Var mıdır herhangi çalıştırma izni ile erişilebilen dosyalar?
Michael Homer

3
“Ayrıca, kedimi öldürecek ve bu beni üzecek.” - Her zaman "Bunun üretimi sırasında hiçbir kiddens zarar görmedi" demesinin sadece bir söz olduğunu
düşündüm

7
Bütün bu kedi analojileri için bunu tamamen yükseltmem gerekiyordu… 😂
rugk

2
Zavallı kedi, umarım iyidir :(
kedi

Yanıtlar:


37

Şu anda durumunuzun kesin parametrelerine bağlı olarak, birkaç olasılık var. Aşağıdaki durumlarda Linux'u geçerliyse kabul edeceğim, ancak çoğu durumda diğer platformlarda da benzer işlevsellik var.

  • Dinamik yükleyiciyi, sizin için bir yürütülebilir dosyayı çalıştırmasını sağlayabilirsiniz. catDinamik olarak bağlı olduğunu varsayarak , platformunuzun eşdeğerinin /lib/ld-linux.so.2muhtemelen bellekte olacağı ve bu nedenle bir ikili dosya çalıştırmak için kullanılabileceğini varsayalım:

    $ /lib64/ld-linux-x86-64.so.2 ./chmod
    chmod: missing operand
    

    Bunlardan çoğuna sahip olabilirsiniz (32 ve 64 bit muhtemeldir) ve mevcut birden fazla kopya olabilir veya çözülmesi gereken semboller olabilir. Bunlardan biri işe yarayabilir.

  • Bağlı bir vfat veya NTFS dosya sisteminiz veya tüm dosyaları 777 olarak değerlendiren başka bir sunucunuz varsa, yürütülebilir dosyalarınızı orada oluşturabilirsiniz.

    $ cat > /mnt/windows/chmod < /dev/tcp/localhost/9999
  • Monte edilmiş bir ağ dosya sisteminiz varsa, yerel olarak yazılabilir olmasa bile, uzak sistemde dosyalar oluşturabilir ve bunları normal şekilde kullanabilirsiniz.
  • İçeriğini umursamadığınız monte edilmiş bir bölüm varsa, hala çalışmakta olan bir sürücüde, içeriği, istediğiniz yürütülebilir dosyaları içeren aynı dosya sistemi türünün yeni bir görüntüsüyle değiştirebilirsiniz - catbunun için iyi olmalıdır. insanların genellikle kullandıkları rolleri ddgörür ve görüntüyü ağ üzerinden sağlayabilirsiniz.

    $ cat > /dev/sdb1 < ...

    Bu mantıklı, ancak tam olarak o bölümdeki bellekte neyin olduğuna bağlı olarak çalışmayacak çok yer var.

  • Varsa herhangi herhangi yazılabilir dosya sistemi üzerinde çalıştırma izni vardır erişilebilir dosya yapabilirsiniz cat >içine seçtiğiniz bir ikili ile içeriğini değiştirmek.

    $ cat > ~/test.py < ...
  • Bash hala çalışıyor olduğundan, chmod'u ortaya çıkaran sürece dinamik olarak bir Bash eklentisini yükleyebilirsiniz. Özellikle, Bash'e yabancı bir işlev arayüzü sağlayan, sonra da yükleyip yükleyebilirsinizctypes.shdlcall chmod ./netcat 511 .
  • Yapımınızın dinamik bir kütüphane dosyasını getirebilir foo.sove daha sonra, rasgele kod yürütmenize izin vererek cat, sizin adınıza yükleyebilirsiniz LD_PRELOAD.

    $ LD_PRELOAD=./hack.so cat /dev/null

    Örneğin, kesiyorsanız open:

    int open(const char *path, int flags, ...) {
        chmod(path, 0755);
        return -1;
    }
    

    o zaman orada ne yapman gerekiyorsa onu yapabilirsin.

Benim önerim busybox, ilk madde olarak statik olarak bağlantılı bir çalıştırılabilir öğeyi (ya da gerçekten yalnızca öğeyi) getirmekti.


3
Re "statik olarak bağlı busybox": sashBu tür bir kullanım durumu için özel olarak tasarlanmış ve bir tutam içinde daha kolay bulunabileceğini unutmayın (örn. Önceden takabilir ve bir kopyasını bir yerde çalıştırabilir, böylece sistem bellekte kalır) molalar ... ya da evcil hayvanlarınızı dağıtabilir ve bunun yerine bir sürü sığır satın alabilirsiniz, sanırım).
Kevin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.