靶机来自vulnhub
内容
FTP、NFS渗透
web信息搜集
JSFuck解码
FTP多文件获取
文件图片隐写
摩斯密码解密
vim意外中断文件还原
getcap获取文件能力
tar获取rootFlag和shadow文件
polkit提权
nmap扫描
sudo nmap -sn 10.10.10.0/24 -oN nmap/host //只进行主机发现
10.10.10.115是新增主机
sudo nmap -p- –min-rate 10000 -oN nmap/port 10.10.10.115 //nmap端口扫描
开放21,80,111,2049,7822,34731,55403,58287,60301端口
sudo nmap -sT -sV -O -sC -oN nmap/TCP.txt -p21,80,111,2049,7822,34731,55403,58287,60301 10.10.10.115 //nmap用tcp扫描服务版本探测,常用脚本扫描
可以得出以下信息:
- 主机信息:扫描的目标主机是 10.10.10.115,主机处于运行状态,延迟为 0.00059 秒。主机的 MAC 地址是 00:0C:29:1E:F3:CB,表示该主机是一个 VMware 虚拟机。
- 端口扫描结果:
- 21/tcp:开放的 FTP 服务,版本为 vsftpd 2.0.8 或更高版本。
- 80/tcp:开放的 HTTP 服务,使用的是 Apache httpd 2.4.38 (Debian)。
- 111/tcp:开放的 rpcbind 服务,版本为 2-4 (RPC #100000)。rpcbind 是一个远程过程调用 (RPC) 服务,用于提供程序和端口映射。
- 2049/tcp:开放的 NFS (Network File System) 服务,版本为 3-4 (RPC #100003)。NFS 是一种分布式文件系统协议。
- 7822/tcp:开放的 SSH 服务,版本为 OpenSSH 7.9p1 Debian 10+deb10u1 (protocol 2.0)。
- 34731/tcp:开放的 nlockmgr 服务,版本为 1-4 (RPC #100021)。nlockmgr 是一个用于文件锁定管理的 RPC 服务,是NFS的辅助服务。
- 55403/tcp、58287/tcp、60301/tcp:开放的 mountd 服务,版本为 1-3 (RPC #100005)。mountd 是一个用于挂载远程文件系统的 RPC 服务。
- 操作系统信息:根据扫描结果,目标主机运行的操作系统是 Linux,可能是 Linux 3.X 或 4.X 内核版本。
总结:根据扫描结果,目标主机上开放了一些常见的网络服务,如 FTP、HTTP、SSH、NFS 等。操作系统可能是 Linux,并且可能是在虚拟机环境中运行。
sudo nmap -sU -p- –min-rate -oN nmap/UDP 10.10.10.114 //nmap用udp扫描端口
udp扫描没有新的服务发现
sudo nmap –script=vuln -oN nmap/vuln.txt -p21,80,111,2049,7822,34731,55403,58287,60301 10.10.10.115 //nmap用vuln脚本扫描
vuln脚本扫描出:
- http-sql-injection:发现可能存在 SQL 注入漏洞,给出了一系列可能存在 SQL 注入的 URL。
- http-enum:发现一些潜在有趣的目录和文件,如
/images/
和/manual/
。 - http-fileupload-exploiter:无法找到文件类型字段,无法确定文件上传漏洞。
RPC服务信息搜集
sudo rpcinfo 10.10.10.115 //列出靶机开启的rpc服务
没有额外的新发现
根据述扫描结果可以得出如下图的攻击点,针对如下攻击点可以有如下几种着手的方式优先级从上到下,这里把web放第一的原因是可以先随意浏览下网站,然后根据实际情况选则是否尝试CMS识别和目录爆破(因为这在真实环境中容易携带巨大的流量特征),如果没有着手点选择,目录爆破甚至是爬网可以可以在这种扫描中尝试其他服务的渗透
web渗透
根据首页得知这个站点是N为兄弟M准备的生日礼物
由于该页面没有任何链接到其他页面的地方,也没有隐写以外的其他着手点,尝试目录爆破,在目录爆破的过程中尝试其他服务
gobuster dir –url=http://10.10.10.115 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -o ./gobuster // gobuster目录爆破
NFS渗透尝试
showmount -e 10.10.10.115 //列出靶机可挂载文件
mkdir NFS //创建文件夹为挂载做准备
sudo mount -t nfs 10.10.10.115:/home/morris ./NFS //挂载共享文件-t(type)指定挂载类型为nfs
在.ssh文件中发现了ssh远程登录私钥和公钥,而且根据公钥可以知道用户是morris
把私钥复制到NFS外的目录中尝试私钥登录(直接在NFS目录下登录会显示没权限访问私钥)
sudo ssh morris@10.10.10.115 -i id_rsa -p7822 //这里端口是7822根据前面nmap端口扫描可以知道
FTP渗透尝试
ftp 10.10.10.115 //FTP连接
尝试了以刚才公钥中暴漏出来的morris登录也没成功
回到web渗透
查看刚才目录扫描的结果
images目录不知道会不会有隐写优先级排后
mysite目录可以尝试的文件
1.后缀是.cs在web渗透中是不太常见的拓展名
2.register.html可能是注册网页
下载cs文件后用记事本查看后发现了一系列奇怪的字符,根据查询发现是JS混淆的一种技术—JSFuck
JSFuck解码
这里原来js执行的是setInterval这句,原来原来的意思是打印3000遍a
为了把他交给JSFuck解码器,就先提取出里面的编码内容,可以把引号删了直接复制交给JSFuck解码器解码,我这里是修改源代码执行JS他们打印出来
添加console.log(b1+b2+b3+b4+b5+b6+b7+b8+b9+b10);后交给nodejs执行
node ./bootstrap.min.cs >jsfuck.txt
查看后得到完整的JSFuck
复制后交给在线的JSFuck解码器解码就行JSFuck – Write any JavaScript with 6 Characters: []()!+ (kamil-kielczewski.github.io)
得到shell
根据这里的提示可以想到ssh登录
刚开始用morris/Morris/Norris/root/norris试了密码Norris@2k19都不对
结果后面试了一整句就连上了
最后登录时 用户/密码是:norris/TryToGuessThisNorris@2k19
有点无语。。。。
获得norris用户flag:2c2836a138c0e7f7529aa0764a6414d0
ftp目录下
file *.*
file查看FTP文件中的所有文件格式
发现存在莫斯密码
摩斯密码解密
解密出来内容不完整,既然这里有FTP文件夹想到与前面的FTP服务有联系,用FTP获取文件
1.用norris用户登录FTP
2.把文件传输格式设置为binary避免一些莫名其妙的问题
3.prompt开启多文件传输
4.mget获取FTP先所有文件
exiftool game.jpg.bak //查看该文件详细信息
ExifTool 是一款功能强大的用于读取、编写和编辑图像、音频和视频文件中的元数据的工具。元数据是关于文件的附加信息,如拍摄日期、相机制造商、地理位置等。ExifTool 可以读取和修改各种文件格式的元数据,包括 JPEG、TIFF、RAW、MP3、MP4 等。
ExifTool 是由 Phil Harvey 开发的,并以 Perl 编写。它是一个跨平台的工具,可以在 Windows、macOS、Linux 等操作系统上运行。ExifTool 提供了命令行界面,可以通过命令行参数来执行各种操作,如查看、编辑、删除和复制元数据。此外,ExifTool 还有一些图形界面的前端工具,方便非技术人员使用。
ExifTool 在数字摄影、数字取证、媒体管理等领域得到广泛应用。它可以帮助用户查看和修改图像的拍摄参数、修复损坏的元数据、批量处理文件等。由于其功能强大和支持众多文件格式,ExifTool 成为了处理元数据的首选工具之一。
I AM SAVING THE GATEWAY TO MY DUNGEON IN A ‘SECRET FILE’ WHICH IS PUBLICLY ACCESSIBLE.这句话就很重要
根据这句话提示显然我们要找的下一个文件就是所谓的SECRET FILE
这段文本看起来像是一段带有一些故事情节或者隐藏信息的文字。让我来解释一下:
“HEYNORRIS, YOU’VE MADE THIS FAR. FAR FAR FROM HEAVEN, WANNA SEE HELL NOW?” 这句话似乎在向某人发出挑战,暗示他们已经离开了天堂,是否愿意去看地狱。
“HAHA, YOU SURELY MISSED ME, DIDN’T YOU?” 这句话暗示对方一定想念说话者。
“OH DAMN, MY BATTERY IS ABOUT TO DIE AND I AM UNABLE TO FIND MY CHARGERS SO QUICKLY.” 这句话表达了说话者的电池即将耗尽,而且他们无法快速找到充电器。
“LEAVING A HINT IN HERE BEFORE THIS SYSTEM SHUTS DOWN AUTOMATICALLY.” 这句话意味着在系统自动关闭之前,说话者在这里留下了一个提示。
“I AM SAVING THE GATEWAY TO MY DUNGEON IN A ‘SECRET FILE’ WHICH IS PUBLICLY ACCESSIBLE.” 这句话暗示说话者将通往他们地牢的入口保存在一个名为”SECRET FILE”的文件中,而这个文件是公开可访问的。
总的来说,这段文本似乎在暗示某种挑战或者隐藏信息的存在。然而,具体的含义可能需要更多的上下文或者解密来理解。
find / -name “secret*” 2>/dev/null //查找文件名中带有secret的文件,讲错误信息丢弃
发现在/var/www/html/下有一个secretfile的文件
而且还发现了其他的一些有趣的文件比如hits.txt
cat查看发现权限不够
既然属主是www-data直接在web页面上查看就行
在网页上查看secretfile,.secretfile.swp和hits.txt文件
下载了.secretfile.swp
用srtings和cat查看可以看到出现了相同的文字和一些奇怪的乱码
通过搜索知道.swp是vim意外退出保留的备份文件,可以利用其恢复出完整的文件
Vim 的 .swp
文件是用于保存临时编辑数据的文件。当你在使用 Vim 编辑文件时,如果突然意外退出 Vim,例如系统崩溃或你关闭终端窗口,Vim 将会在文件所在目录下创建一个以 .swp
为扩展名的文件,以保存你的临时编辑进度。
.swp
文件的命名方式通常是在原始文件名前加上一个点,并附加 .swp
扩展名。例如,对于文件 example.txt
,Vim 会创建一个名为 .example.txt.swp
的 .swp
文件。
.swp
文件包含了在编辑过程中未保存的更改,以及有关编辑会话的其他元数据。当你再次打开原始文件时,Vim 会检查是否存在 .swp
文件,并询问是否恢复之前未保存的编辑内容。
你可以选择恢复编辑会话,或者删除 .swp
文件并开始一个新的编辑会话。请注意,.swp
文件只是一个临时文件,它们并不是你的原始文件的副本或备份。因此,在正常情况下,当你退出 Vim 并保存文件时,.swp
文件会被自动删除。
恢复swp文件
vim -r .secretfile.swp
拿到一个字符串
既然这里提到了password
试一下能不能切换到root或者morris
拿到morris用户,不过该用户没有flag,而且权限一般
提权方法1—tar获取rootFlag和shadow文件
获取文件系统上所有文件的能力
/sbin/getcap -r / 2>/dev/null
以下是每个文件或目录的能力信息的解释:
/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper
:
- 能力:
cap_net_bind_service
(允许绑定低于1024的端口)、cap_net_admin
(允许网络管理操作) - 执行权限:
+ep
(允许以特权用户的权限执行)
/usr/bin/tar
:
- 能力:
cap_dac_read_search
(允许读取和搜索任意文件) - 执行权限:
+ep
(允许以特权用户的权限执行)
/usr/bin/gnome-keyring-daemon
:
- 能力:
cap_ipc_lock
(允许锁定内存页) - 执行权限:
+ep
(允许以特权用户的权限执行)
/usr/bin/ping
:
- 能力:
cap_net_raw
(允许发送原始网络数据包) - 执行权限:
+ep
(允许以特权用户的权限执行)
这些能力信息指示了这些文件或目录在执行时具有特定的权限,以便执行特定的操作,而无需完全的超级用户权限。这种细粒度的权限控制有助于提高系统的安全性。
/sbin/getcap -r / 2>/dev/null
是一个 Linux 命令,用于获取文件系统上所有文件的能力(capabilities)信息。能力是 Linux 中用于实现权限的一种机制,它可以赋予某些程序或进程特定的权限,而不需要完全依赖于传统的用户和组权限。
在该命令中,/sbin/getcap
是用于获取能力信息的程序,-r /
表示递归地获取整个文件系统的能力信息。2>/dev/null
是将标准错误输出重定向到 /dev/null
,以忽略任何错误信息。
执行该命令将输出文件系统上所有文件的能力信息,例如:
/path/to/file = cap_net_bind_service+ep
/path/to/another/file = cap_sys_admin+ep
...
每行显示一个文件路径,后面是该文件所具有的能力。能力信息以 +
开头,并在后面列出了具体的能力标识符。
需要注意的是,执行该命令需要具有足够的权限。通常情况下,只有超级用户(root)或具有特定权限的用户才能够获取文件的能力信息。
Linux 中的能力信息包括以下几种常见的能力:
cap_chown
:允许修改任意文件的所有者。cap_dac_override
:允许绕过文件的 DAC(Discretionary Access Control,自主访问控制)权限限制。cap_dac_read_search
:允许读取或搜索任意文件和目录。cap_fowner
:允许修改文件的所有者。cap_fsetid
:允许设置文件的 setuid 和 setgid 位。cap_kill
:允许发送信号给其他进程。cap_setgid
:允许修改进程的有效组 ID。cap_setuid
:允许修改进程的有效用户 ID。cap_setpcap
:允许修改进程的能力集。cap_linux_immutable
:允许修改文件的 Linux 不可变标志。cap_net_bind_service
:允许绑定低于 1024 的网络端口。cap_net_broadcast
:允许发送广播数据包。cap_net_admin
:允许进行网络管理操作。cap_net_raw
:允许进行原始套接字操作。cap_ipc_lock
:允许锁定共享内存段。cap_ipc_owner
:允许修改共享内存段的所有者。cap_sys_module
:允许加载和卸载内核模块。cap_sys_rawio
:允许进行裸设备 I/O 操作。cap_sys_chroot
:允许使用 chroot() 系统调用。cap_sys_ptrace
:允许跟踪和操作其他进程。
这只是一些常见的能力信息示例,实际上还有其他能力可用。每个能力都对应着不同的权限,具体的权限取决于应用程序和系统的配置。
利用tar获取root目录下的flag
tar -zcvf root.tar.gz /root //归档并解压root目录为gzip格式
tar -zxvf root.tar.gz // 解压缩root目录
之后就可以看到root目录下的所有文件了,自然也包括flag,linux下root用户默认不能远程登录(要修改/etc/ssh/sshd_config
文件,并将以下行的注释符号(#)去除:#PermitRootLogin yes
,才可以远程登录ssh)而且看了一下这里没有.ssh文件也验证靶机中使用了默认配置
获得root用户下的flag:8fc9376d961670ca10be270d52eda423
tar读取shadow文件提权尝试
既然可以通过利用tar读取到/root,也自然可以读取到/etc/shadow文件,再通过hash解密获得root密码(这里只提供一种思路,这个hash破解CMD5要付费。。。。。。)
尝试其他提权
提权方法2—polkit提权
查找具有suid权限的文件,这里框出来的几个都可能用来提权,不过还是要进一步确认,这里先尝试polkit-agent-helper 来提权
polkit-agent-helper 是一个用于帮助执行基于 PolicyKit(即 Polkit)的授权请求的工具,它通常用于 Linux 操作系统中。
在 Linux 系统中,PolicyKit 是一个用于管理系统范围的特权访问的工具。当需要执行需要特权的操作时,通常会向 PolicyKit 发送授权请求。PolicyKit 会检查请求者的身份,并基于定义的授权策略(即 polkit 规则)来决定是否授权该请求。
polkit-agent-helper 就是作为一个代理工具,协助应用程序向 PolicyKit 发送授权请求,并处理来自 PolicyKit 的响应。当一个应用程序需要执行特权操作时,它会调用 polkit-agent-helper,该工具会弹出一个对话框,提示用户输入其凭证(如密码),然后将这些凭证发送给 PolicyKit 进行验证。如果用户提供的凭证被验证成功,PolicyKit 就会授权该请求。
因此,polkit-agent-helper 的提权原理可以简单概括为:通过代理向 PolicyKit 发送授权请求,并通过用户提供的凭证验证来获得特权访问。因为polkit-agent-helper所属用户是root且有s权限,那么启用更高级的bash时,就会利用特权提权。
所以只要执行一个在执行过程中会调用polkit-agent-helper的命令都能借用polkit-agent-helper的权限,polkit-agent-helper又具有root权限,这样就将权限提升到了root,不过要获得root的bash,就要在执行bash的时候调用polkit-agent-helper,这里用systemd-run 执行bash,在systemd-run执行时又会调用polkit-agent-helper,这样bash就获得了root的权限
systemd-run -t /bin/bash
成功获取root权限