工具原理及使用

五、BloodHound 的使用

1、介绍

BloodHound 使用可视化图形显示域环境中的关系,攻击者可以使用 BloodHound 识别高度复杂的攻击路径,防御者可以使用 BloodHound 来识别和防御那些相同的攻击路径。蓝队和红队都可以使用 BloodHound 轻松深入域环境中的权限关系。

BloodHound 通过在域内导出相关信息,在将数据收集后,将其导入Neo4j 数据库中,进行展示分析。因此在安装 BloodHound 时,需要安装 Neo4j 数据库。

2、安装

因为 Neo4j 数据库需要 Java 支持,因此安装 BloodHound 需要先安装 Java,这里以 Windows 系统下的安装为例。

Java

JDK 需要下载最新版本,不然 Neo4j 运行可能会报错,JDK 下载地址:https://www.oracle.com/java/technologies/javase-downloads.html,下载之后,直接安装即可。

Neo4j

Neo4j 直接下载最新版本,下载地址:https://neo4j.com/download-center/#community

下载最新版本之后解压下载文件,打开 bin 目录,执行命令neo4j.bat console,之后打开浏览器访问 http://localhost:7474 登陆后台,输入以下信息连接到数据库说明安装就完成了。

URL:neo4j://localhost:7687
用户名(默认):neo4j
密码(默认):neo4j

BloodHound

BloodHound 项目地址:https://github.com/BloodHoundAD/BloodHound,下载后解压打开 BloodHound.exe,输入 Neo4j 数据库的账号密码即可完成安装。

3、使用

安装完成 BloodHound 后,需要进行数据的采集与导入,数据的采集可以使用 ps1 脚本或者使用 exe 程序收集,工具下载地址:https://github.com/BloodHoundAD/BloodHound/tree/master/Collectors

这里使用 SharpHound.exe 进行数据的采集,将 SharpHound.exe 拷贝到目标上,执行 SharpHound.exe -c all 进行数据采集。

如果使用 ps1 脚本收集,命令为:

采集到的数据会以 zip 压缩包的格式保存,将其拷贝到 BloodHound 所在主机上,在 BloodHound 右侧图标里点击 Upload Data,之后上传刚才生成的压缩包就可以导入数据了。

或者直接将 zip 压缩包拖拽到 BloodHound 里也可以导入数据。

在 BloodHound 右上角有三个板块:

1、Database Info(数据库信息),可以查看当前数据库中的域用户、域计算机等统计信息。

2、Node Indo(节点信息),单击某个节点时,在这里可以看到对应节点的相关信息。

3、Analysis(分析查询),在 BloodHound 中预设了一些查询条件,具体如下:

比如这里查询到域管理员的最短路径

路径由粗到细表示xx对xx有权限或关系

总的来说感觉 BloodHound 还是挺有意思的,可以很直观的看到域内主机间的关系。不过毕竟是辅助工具,还是需要不断提升自己的实力、经验才能更好的去分析这样的一个结果才是。

参考链接:

https://xz.aliyun.com/t/7311

https://www.freebuf.com/sectool/179002.html

六、ICMP隧道工具使用

1、介绍

在内网中,如果攻击者使用 HTTP、DNS 等应用层隧道都失败了,那么或许可以试试网络层的 ICMP 隧道,ICMP 协议最常见的场景就是使用 ping 命令,而且一般防火墙都不会禁止 ping 数据包。

因此我们便可以将 TCP/UDP 数据封装到 ICMP 的 ping 数据包中,从而绕过防火墙的限制。

2、建立 ICMP 隧道工具

用于建立 ICMP 隧道的工具常见有:ptunnel、icmpsh、icmptunnel 等

ptunnel

ptunnel 全称 PingTunnel,Kali 下自带该工具,Linux 下安装过程如下:

ptunnel 常用命令介绍:

目前有这样的一个场景,当前已经拿下了一台外网 Web Linux 服务器,想通过它利用 ICMP 协议连接内网的一台已经开启远程桌面的 Windows ,网络结构简化如下。

在 Kali 攻击机上执行以下命令

在 Linux Web 跳板机上执行以下命令

之后访问 Kali 攻击机 172.16.214.6 的 1080 端口就会连接到 Win RDP 目标机 192.168.7.110 的 3389 端口了,不过实测发现这种方法有些不稳定。

icmpsh

icmpsh 使用很简单,直接在 github 上下载,运行时不需要管理员权限,但是在使用时需要关闭本地系统的 ICMP 应答,不然 shell 的运行会不稳定。

icmpsh 常用命令介绍:

目前有这样的一个场景,攻击机能通过 ICMP 协议访问到目标主机,但是目标上有防火墙,拒绝了敏感端口比如 22、3389 端口的访问,这个时候可以使用 icmpsh 利用 ICMP 协议建立反向 shell

在攻击机上运行:

在目标机上运行

此时在攻击机上可以看到通过 icmp 协议建立的 shell

icmptunnel

icmptunnel 的优势在于可以穿过状态防火墙或 NAT,同样在 github 上进行下载,值得注意的是该工具只有 Linux 版。

目前有这样的一个场景,攻击者为 Linux,但由于目标存在状态防火墙或者使用了 NAT 导致无法获得 shell,此时可以通过 icmptunnel 绕过限制。

在攻击机上运行:

在攻击机上新开启一个终端运行:

在目标机上运行:

在目标机上新开启一个终端运行:

至此,已经通过 ICMP 建立了一个点对点隧道。

在攻击机上,尝试通过 ssh 进行连接,可以看到通过刚才建立的隧道成功连接到目标机。

参考链接:

https://xz.aliyun.com/t/7875

https://www.freebuf.com/sectool/210450.html

七、lcx、netcat和socat的使用

1、lcx 使用

lcx 分为 Windows 版和 Linux 版,Linux 版叫 portmap

Windows

  • 内网端口转发

在建立连接后,访问公网代理主机的 5555 端口就能访问到内网失陷主机的 3389 端口了。

  • 本地端口映射

如果目标主机不能出网,这时可以利用内网中能够出网的主机,将其不能出网的主机端口映射到自身上,再借助端口转发到公网进行访问。

Linux

  • 内网端口转发

此时访问公网主机 IP 的 5555 端口,就会访问到内网失陷主机的 22 端口了。

2、netcat 使用

nc 下载地址:https://eternallybored.org/misc/netcat/

nc 全称 netcat,它的功能很多,这里简单记录下两个常用的功能,其他的比如文件传输、端口扫描等等的就不介绍了,毕竟平时使用频率有一说一还是比较少的。

获取 banner 信息

个人觉着最常用的功能,这个不仅可以用来查看 banner 信息,还能用来判断端口是否开放。

反弹shell

个人觉着这个也是最常用的功能,可以使用 -e 指定 /bin/bash 进行反弹,也可以直接 -c 指定 bash 或者 cmd

-e 指定反弹 shell

-c 指定反弹 shell

结合其他语言进行反弹 shell

除了 bash 也可以使用其他的语言进行反弹 shell,这里可以使用 msfvenom 生成反弹 shell,操作起来比较方便,使用 msfvenom -l payload | grep "cmd/"可查看可使用的 payload

比如使用 cmd/windows/reverse_powershell 这个 payload

将生成的 payload 复制到失陷主机上运行,即可收到反弹回的 shell

再比如使用 cmd/unix/reverse_python 这个payload

同样将生成的 payload 复制到失陷主机上运行,即可收到反弹回来的 shell,当然前提是目标主机安装了 python

3、socat 使用

socat 下载地址:http://www.dest-unreach.org/socat/,或者直接使用 apt-get install socat 安装,Mac 可使用 brew install socat 安装。

socat 全称 socket cat,可以视为 nc 的加强版,不过平时感觉 nc 也够用了,但是 nc 现在貌似会被杀软杀掉,而且貌似 nc 很久没更新了,反正多掌握点知识没坏处。

文件操作

读取文件

写入文件

网络操作

连接远程端口

监听端口

端口转发

转发 TCP 端口

个人觉着这个是比较常用到的功能,在使用 CS 做重定向器时,就可以使用 socat 进行端口的转发。

这样在访问当前主机的 80 端口时,就会访问到 123.123.123.123 的 80 端口了,也可以使用 -d 调整输出信息的详细程度,最多使用四个 d,推荐使用两个,即 -dd

转发 UDP 端口

和上面一样,将 TCP 改成 UDP 即可

NAT 映射

通过 socat 可以将内网端口映射到公网上,不过这种场景还是更推荐用 frp

此时访问公网主机的 5555 端口就可以访问到内网主机的 3389 端口了

考虑到 socat 的其他功能平时也很少使用到,这里就不过多介绍了,网上相关文章也有很多,在此就不赘述了。

参考链接:

https://www.sqlsec.com/2019/10/nc.html

https://www.hi-linux.com/posts/61543.html

八、powercat 的使用

1、下载安装 powercat

powercat 可以视为 nc 的 powershell 版本,因此也可以和 nc 进行连接。

powercat 可在 github 进行下载,项目地址为:https://github.com/besimorhino/powercat

下载下来 powercat.ps1 文件后,直接导入即可

如果提示未能加载指定模块,则可能是权限问题,可以参照之前写的 【内网学习笔记】2、PowerShell 文章中的方法对其赋予权限,即在管理员模式下运行以下命令

之后就可以导入 powercat 了,导入成功后,输入 powercat -h 可以看到帮助信息。

如果没有权限,也可以直接下载远程文件进行绕过。

不过由于 github 在国内可能会无法打开,因此可以使用 web 代理站点或者把 powercat.ps1 文件放到自己的服务器上进行下载。

2、powercat 的使用

powercat 命令参数

可以看到和 nc 的命令还是很相似的。

正向连接

Kali 上的 nc 连接到靶机

靶机开启监听,等待 Kali 连接

反向连接

Kali 上开启监听

靶机向 kali 发起连接

返回 powershell

攻击机上运行

靶机上运行

作为跳板使用

测试环境为:

将 win7 作为跳板机,让 kali 通过 win7 连接到 windows10

在 win10 中执行以下命令

在 win7 中执行以下命令

最后在 kali 下连接 win7

powercat 生成 payload

在攻击机上运行以下命令生成 shell.ps1 payload 文件

将 shell.ps1 文件拷贝到目标主机上后,执行 shell.ps1 文件

之后在攻击机上运行以下命令即可获得 shell

反向连接也可以

在攻击机上生成 ps1 文件,并开启监听

之后在靶机上,运行 ps1 文件就会上线了,如果不想生成文件,也可以使用 -ge 生成经过编码的 payload

在攻击机上生成 payload,并开启监听

在靶机上执行刚生成的 payload

建立 dns 隧道连接

powercat 的 dns 隧道是基于 dnscat 设计的,因此在服务端需要使用 dnscat 连接。

在服务端上安装 dnscat ,以 kali 为例

命令运行完之后,执行以下命令开启服务端

在靶机下,执行以下命令,建立 dns 隧道

此时,在 kali 上就能看到回连的会话了

不过实测,虽然能返回会话,但不能执行命令,暂不清楚原因是什么。

powercat 暂时就记录这些,其他的比如文件传输什么的就不记了,毕竟使用频率几乎为零,平时使用最多的可能还是拿它来反弹 shell,不过为什么不用 CS 或者 MSF 呢,不更香嘛。

参考链接:

https://blog.csdn.net/qq_32393893/article/details/108904697

https://cloud.tencent.com/developer/article/1772183

来源: TeamsSix 文章作者: TeamsSix 文章链接: https://teamssix.com/210601-155103.html#toc-heading-6 本文章著作权归作者所有,任何形式的转载都请注明出处。

Last updated

Was this helpful?