GDB, kök programlarda hata ayıklayabilir mi?


16

Ben aramalar bir program yazdım setuid(0)ve execve("/bin/bash",NULL,NULL).

Sonra yaptım chown root:root a.out && chmod +s a.out

Yürüttüğümde ./a.outbir kök kabuk alıyorum. Ancak bunu yaptığımda gdb a.out, işlemi normal kullanıcı olarak başlatır ve bir kullanıcı kabuğunu başlatır.

Yani ... bir setuid kök programında hata ayıklayabilir miyim?

Yanıtlar:


22

Bir setuid veya setgid programında sadece hata ayıklayıcı kök olarak çalışıyorsa hata ayıklayabilirsiniz. Çekirdek, ptraceekstra ayrıcalıklarla çalışan bir programı çağırmanıza izin vermez . Eğer öyleyse, programın herhangi bir şeyi yürütmesini sağlayabilirsiniz, bu etkili bir şekilde bir hata ayıklayıcıyı çağırarak bir kök kabuk çalıştırabileceğiniz anlamına gelir /bin/su.

Gdb'yi root olarak çalıştırırsanız, programınızı çalıştırabilirsiniz, ancak davranışını yalnızca root tarafından çalıştırıldığında gözlemlersiniz.

Kök tarafından başlatılmadığında programda hata ayıklamanız gerekiyorsa, programı Gdb dışında başlatın, zahmetli kısma gelmeden önce bir şekilde duraklatın ve attachGdb içindeki işlem ( at 1234burada 1234, işlem kimliği).


Evet bunu denedim, ancak işlem kök olarak başlatılır ve gdb'nin de kök sürecini ekleyebilmek için kök olarak başlatılması gerekir.
jyz

@jyzuz Evet, yazarken gdb'yi root olarak başlatmalısınız. İsterseniz uzaktan hata ayıklamayı kullanabilir ve gdbserverroot olarak çalıştırabilir ve normal bir kullanıcı olarak bağlanabilirsiniz. Yorumunuzdan basit bir şekilde (gdb'yi root olarak çalıştırmayı) başaramadınız ama neyin yanlış gittiğini anlamıyorum, bu yüzden yardım edemem.
Gilles 'SO- kötü olmayı bırak

7

İşlemi durduracak şekilde başlatmanın bir yolu. Bir bash betiği kullanın:

echo $BASHPID; kill -STOP $BASHPID; exec sudo -u unpriviledged_user -g the_group_if_not_primary command

Arka planda çalışmasını sağlayın.

Sonra başlatın gdbve yazdırılan pideye takın.

execKomutu ile adım gdbatmanız gerekecek, ancak en baştan hata ayıklayabilirsiniz.

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.