文章目录
tomcat 弱口令
Tomcat支持后台部署War文件,默认情况下管理页面仅允许本地访问。
攻击条件
如果网站运维/开发人员手动修改配置文件中的信息允许远程IP进行访问(需求),且恶意攻击者拿到管理界面账户密码情况下,则可上传木马文件,控制系统。
攻击准备
- 先要配置好环境,我这里是用的云服务器搭建的docker环境,配置好可以直接访问,默认端口:8080。
- 我这里的文件目录是/home/vulhub/tomcat/tomcat8。然后输入docker-compose up -d开启docker环境。
- 准备好bp,我这里用的是新版bp,也要准备好字典。
攻击过程
-
先进入网址:
-
点击右侧manager app,会提示输入用户名和密码:
-
这里我们输入123,123并打开bp抓包:
-
并没有发现发送信息,但是在第4行发现basic ,典型base64加密,解密查看一下:
-
到这里我们有理由怀疑这是承载用户名和密码的地方,两者用‘:’拼凑后再用base64加密。
-
我们发送到intruder
intruder模块:
positions
-
攻击类型
这里用的是狙击手,顾名思义,只能打一个目标。
由于这里是采用的:“用户名:密码”再用base64加密的格式,所以就只有一个目标,而我们的目的就是拼凑出来这样的模式再利用base64加密完成。 -
攻击对象
两个$符中间就是我们要爆破的地方。(只有一处)
base64解码查看
payload
- 设置爆破位置和字典方式:
这里需要拼接,因此我们选custom iterator
附:
Simple list:简单字典
Runtime file:运行文件
Custom iterator:自定义迭代器
Character substitution:字符替换
Recursive grep:递归查找
Illegal unicode:非法字符
Character blocks:字符块
Numbers:数字组合
Dates:日期组合
Brute forcer:暴力破解
Null payloads:空 payload
Username generator:用户名生成
copy other payload:复制其他 payload
- 设置字典:
有一个好的字典就显得尤为重要,这里需要注意两处:
第一:由于我们需要拼接用户名和密码,因此我们需要用到两个字典,图中position 1是指第一个字段用什么字典,position 2就是指第二个字段用什么字典,以此类推。
第二:两者中间由“:”拼凑,因此我们需要在第一个位置后,增加分隔符。图中separator for position 1提供了这一功能,他的意思是,在第一个字典后增加符号。我们在此处填入“:”。 - 选择加密方式
点击add增添规则:
这里我们选加密,然后找到base64加密:
- 选择编码方式
在刚开始捕获到的报文中可以看到,base64加密后,其末尾的“=”并没有转化程%3d,因此我们并不需要进行url-encode:
附:
Add Prefix:添加一个文字前缀
Add suffix:添加一个文字后缀
Match/replace:将替换匹配的正则表达式
Substring:截取字符串的长度0开始
Reverse substring:倒着匹配字符串
Modify case:切换字母的大小写
Encode:通过URL,HTML,Base64的,ASCII码或十六进制字符串对payload进行编码
Hash: 取payload的hash值,MD5、SHA-512等
Add raw payload:在编码后的payload上再加上原来的payload
Skip if matches regex:如果匹配到正则表达式就跳过去
Invoke Burp Extension:调用扩展
Resource pool
- 线程数:
设置爆破的线程数及请求间隔。
设置完毕之后点击start attack开始攻击
等待少许,破解成功。
将其解码发现:
得到用户名密码。
尝试登录
登陆成功!
拿取shell
上传war包
- 查看冰蝎v4自带的jsp脚本:
密码为rebyond。 - 利用jar命令生成war包:
jar cvf shell.war shell.jsp
- 上传:
发现上传成功!
这里解释一个概念:上传war包的目的是什么?
war包是使用java进行开发一个网站下所有代码(前端+后端),开发完毕后会将源码打包给测试人员测试,测试完毕会使用war包进行发布,war包可以放在tomcat的webapps下,tomcat服务器启动后war包中的源代码会自动进行部署。也就是说,在上传后,网站会执行war包里面的代码,来进行部署。这里war包内容就是创建一个shell文件夹,在此文件夹下创建一个shell.jsp(payload)。
冰蝎连接
- 输入网址:
url:port/shell/shell.jsp
进行连接。 - 拿到shell:
可以进入容器验证
- tomcat默认存放地址在webapps下。
- ROOT和webapps都是将应用部署于tomcat下的初始目录,区别在于ROOT相比webapps服务器优先去webapps目录下找项目,如果有则显示,没有则去ROOT找,ROOT可以去除访问路径中的项目名,如果请求路径当前不想要目录名,那么可以通过在webapps下面创建ROOT目录,然后手动将war包解压到ROOT目录,然后删除原有的war包,这样tomcat启动的时候就不会自动解压war包,同时也不会生成对应war包名称的文件。
自定义目录的方式,则是彻底改变tomcat应用的初始目录,改到自己指定的目录(比如工程的输出目录)。