初始访问
前言
攻击者首先通过初始访问入侵目标用户网络,可以通过有针对性的网络钓鱼攻击或者利用互联网应用程序上的漏洞进行攻击,这也会影响整个攻击是否能持久化。攻击者不仅可以使用有效地凭证进行登录并远程控制,还可以更改密码导致原用户无法登陆。
在域中,初始访问的过程就是攻击者成为与用户进入内网的过程。整个过程可以分为信息收集和破解两个部分
信息收集
比较常见的是利用一些工具进行收集:比如Nmap、Metasploit、Powershell、ARP、Invoke-PortScan等,下面将对这些工具的常用方法进行梳理。
1.Nmap
Nmap素有系统漏洞扫描之王的称号,可以在Windows、Linux、Mac环境下进行网络扫描和工具包的嗅探。
Nmap可以点击https://nmap.org/download.html进行下载,此处我使用的是kali中自带的Nmap用于工作中的实验使用(题外话:不得不说,kali是一个很强大的工具,用了一年多了,除了自己做复现以外,kali中自带的很多工具也可以用于漏洞复现什么的,对于初学者来说,可以安装一个kali的虚拟机进行学习)。
快速学习Nmap的网站推荐(两个网站可以结合使用):
- https://nmap.org/man/zh/(中文版官方帮助文档,比较全面)
- Crayon’s blog(这个博客中举了一些实例)
命令参数
Nmap支持很多种扫描方式:
选项 | 描述 |
---|---|
-p | 判断某个IP是否开启了指定端口(可以指定端口范围) |
-sV | 在扫描端口时,检测服务端软件的版本信息 |
-O | 识别主机的操作系统 |
-sT | TCP连接扫描(利用的是TCP三次握手的原理) |
-sS | SYN扫描(利用的是发送SYN数据包) |
-sN | NULL扫描不设置任何控制位 |
-sF | FIN扫描(仅设置FIN标志位) |
-sX | XMAS扫描(会设置FIN、PSH和URG标志位) |
-sA | ACK扫描(可以检测目标系统是否采用了数据包状态监测技术防火墙,并能确定哪些端口被防火墙屏蔽) |
-sU | UDP扫描(可以扫描服务端程序) |
-sR | RPC 扫描扫描 |
-sP | ICMP扫描(即Ping扫描,ICMP用于网际协议中发送控制消息) |
-oN | 保存为txt |
-F | 快速扫描,将仅扫描100个常用端口 |
-r | 顺序扫描,程序将从按照从小到大的顺序扫描端口 |
使用方法
- 示例1:
//对114.114.114.114进行详细的SYN扫描,扫描端口范围为1-65535
nmap -sS -p 1-65535 -v 114.114.114.114
可以看到114.114.114.114开启了53端口(DNS)和80端口(HTTP)。
- 其他示例
nmap 114.114.114.114 -p 1-65535
nmap -sP 10.1.1.0/24 //扫描一个网段
nmap -sn 114.114.114.161-166 //扫描一个网段
nmap 114.114.114.114 -sA
nmap -sS 114.114.114.114
2.Metasploit
Metasploit是一款开源的安全漏洞检测工具,有着“世界上使用最广泛的渗透测试框架”的称号,一直以来,帮助安全团队验证漏洞提供了很多的帮助,提供了真正的风险情报。可以点击https://www.metasploit.com/download进行下载,此处我依旧使用kali中自带的Metasploit进行试验。
命令参数
首先,可以先了解Metasploit的用法,使用msfconsole命令即可,用法为:msfconsole -h
常用选项:
-E,--environment 环境设置Rails环境,默认为RAIL_ENV环境变量或'production'
数据库选项:
-M,--migration-path 指定包含其他数据库迁移的目录
-n,--no-database 禁用数据库支持
-y,--yaml PATH 指定包含数据库设置的YAML文件
框架选项:
-c FILE 加载指定的配置文件
-v,-V,-version 显示版本
模块选项:
--defer-module-loads 除非明确要求,否则推迟模块加载。
-m,--module-path 目录加载其他模块路径
控制台选项:
-a,--ask 在退出Metasploit之前询问或接受'exit -y'
-H,--history-file FILE 将命令历史记录保存到指定文件
-L,--real-readline 使用系统Readline库而不是RbReadline
-o,--output FILE 输出到指定文件
-p,--plugin PLUGIN 启动时加载插件
-q,--quiet 不要在启动时打印横幅
-r,--resource FILE 执行指定的资源文件(-对于stdin)
-x,--execute-command COMMAND 执行指定的控制台命令(使用;表示倍数)
-h,--help 显示此消息
使用方法
示例1:
- 先进入msfconsole
root@kali:/# msfconsole
- 查看有无可用的端口
msf5 > msfconsole portscan
- 从图中可以看到有一些辅助模块可以用于端口扫描,如使用ack进行扫描:
msf5 > use auxiliary/scanner/portscan/ack
msf5 auxiliary(scanner/portscan/ack) > show options
可以通过set
命令对其中的参数进行更改,如set PORTS 1-1000
就可以对端口号进行更改。
- 更改RHOST等参数
msf5 auxiliary(scanner/portscan/ack) > set RHOSTS 114.114.114.114
RHOSTS => 114.114.114.114
run
使用run
命令即可以启动:
msf5 auxiliary(scanner/portscan/ack) > run
其他示例:
use auxiliary/scanner/portscan/ack TCP ACK端口扫描
use auxiliary/scanner/portscan/ftpbounce FTP bounce端口扫描
use auxiliary/scanner/portscan/syn SYN端口扫描
3.地址解析协议
ARP(Address Resolution Protocol,地址解析协议)是通过IP地址获取MAC地址的协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。可以利用ARP的这一特点,进行信息的收集。
命令参数
-a 以替代(BSD)样式显示(所有)主机
-e 以默认(Linux)样式显示(所有)主机
-s,--set 设置新的ARP条目
-d,--delete 删除指定的条目
-v,--verbose 变得冗长
-n,--numeric 不解析名称
-i,--device 指定网络接口(例如eth0)
-D,--use-device 从给定设备读取<hwaddr>
-A,-p,-protocol 指定协议族
-f,--file 从文件或/ etc / ethers中读取新条目
使用方法
// 添加静态 arp 映射
arp -s IP MAC-ADDRESS(MAC地址)
arp -s 192.168.1.1 00:b1:b2:b3:b4:b5
// 删除 arp 缓存条目
arp -d ip地址
4.ICMP
ICMP(Internet Control Message Protocol,Internet控制报文协议)用于IP主机和路由器之间传递控制信息。利用ICMP的方法主要是使用Ping请求是否应答的方式,Ping是一种网络诊断工具, 主要是向特定的目的主机发送 ICMP Echo 请求报文,查看主机是否存活等相关信息。
5.Nbtscan
Nbtscan是一个局域网扫描工具,对给出范围内的每一个地址发送NetBIOS状态查询,并且以易读的表格列出接收到的信息,对于每个响应的主机,NBTScan可以收集到IP地址、NetBIOS计算机名、登录用户名和MAC地址等。
命令参数
-v 详细输出。打印来自每个主机所有收到的名字
-d 转储数据包。打印整个数据包内容。
-e 格式化输出为/ etc / hosts格式。
-l 以lmhosts格式格式化输出。
-t timeout 等待响应的超时毫秒数。默认值1000。
-b 带宽输出节流。
-r 使用本地端口137进行扫描。
-q 禁止显示横幅和错误消息,
-s 分隔符脚本友好的输出。
-h 打印可读的服务名称。
-m retransmits 重新发送的次数。默认值0。
-f filename 使用IP地址从文件filename扫描。
使用方法
// 扫描整个C类网络。
nbtscan -r 192.168.1.0/24
// 扫描范围从192.168.1.25到192.168.1.137
nbtscan 192.168.1.25-137
6.telnet
Telnet协议是Internet远程登录服务的标准协议和主要方式。可以通过telnet协议进行端口的测试,从而收集端口相关信息。
使用方法
示例:
telnet 192.168.0.1 22
telnet 192.168.0.1 80
也可以查看官网:https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/telnet
暴力破解
暴力破解一般使用的是枚举法,使用密码字典或者用户字典进行一一测试,除了枚举法,还是有不少工具可以使用进行暴力破解,接下来就聊聊暴力破解工具的使用。
1.Hydra
Hydra是自动化的开源爆破神器,kali中已经集成,支持众多协议。不想安装kali的话,也可以去官网下载安装。
命令参数
-R 恢复先前的中止/崩溃的会话
-i 忽略了现有的还原文件(不要等待10秒)
-S 执行SSL连接
-s PORT 如果服务在其他默认端口上,请在此处定义
-p PASS 或-P FILE 尝试输入密码PASS,或从FILE加载多个密码
-x MIN:MAX:CHARSET密码暴力破解生成,键入“ -x -h”以获取帮助
-y 禁止在bruteforce中使用符号
-e nsr 尝试使用“ n”空密码,将“ s”登录作为通过和/或“ r”反向登录
-u 环绕用户,而不是密码(有效!用-x暗示)
-C FILE 冒号分隔的“ login:pass”格式,而不是-L / -P选项
-M FILE 要攻击的服务器列表,每行一个条目,“:”指定端口
-o FILE 将找到的登录名/密码对写到FILE而不是stdout
-b FORMAT 指定-o FILE的格式:text(默认),json,jsonv1
-t TASKS 运行TASKS每个目标并行连接数(默认值:16)
-T TASKS 运行TASKS总体上并行连接(对于-M,默认值:64)
-w / -W 响应时间(32)/每个线程之间的连接等待时间(0)
-c 在所有线程上每次登录尝试的TIME等待时间(强制-t 1)
-4 / -6 使用IPv4(默认)/ IPv6地址(始终在[]中也输入-M)
-v / -V / -d 详细模式/每次尝试显示登录名+密码/调试模式
-O 使用旧的SSL v2和v3
-q 不显示有关连接错误的消息
-U 服务模块的使用详细信息
-h 更多命令行选项
-l 指定单个用户名,适合在知道用户名爆破用户名密码时使用
-L 指定多个用户名,参数值为存储用户名的文件的路径(建议为绝对路径)
-p 指定单个密码,适合在知道密码爆破用户名时使用
-P 指定多个密码,参数值为存贮密码的文件(通常称为字典)的路径(建议为绝对路径)
-C 当用户名和密码存储到一个文件时使用此参数。注意,文件(字典)存储的格式必须为 "用户名:密码" 的格式。
-s 指定端口,适用于攻击目标端口非默认的情况。例如:http服务使用非80端口
-S 指定爆破时使用 SSL 链接
-R 继续从上一次爆破进度上继续爆破
-f 一但爆破成功一个就停止爆破
server 代表要攻击的目标(单个),多个目标时请使用 -M 参数
service 攻击目标的服务类型(可以理解为爆破时使用的协议)
OPT 爆破模块的额外参数,可以使用 -U 参数来查看模块支持那些参数
使用方法
示例:
Hydra -l 用户名 -p 密码 10.1.1.1(攻击目标) telnet (测试telnet是不是这个账号名和密码)
Hydra -l 用户名 -P e:\pass.txt(密码字典) 10.1.1.1(攻击目标) rdp
Hydra -l 用户名 -P e:\pass.txt(密码字典) 10.1.1.1(攻击目标) smb
Hydra -l 用户名 -P e:\pass.txt(密码字典) 10.1.1.1(攻击目标) ftp
Hydra -l 用户名 -P e:\pass.txt(密码字典) 10.1.1.1(攻击目标) ssh
Hydra -l 用户名 -P e:\pass.txt(密码字典) 10.1.1.1(攻击目标) mysql
Hydra -L e:\user.txt(用户名字典) -P e:\pass.txt(密码字典) 10.1.1.1(攻击目标) rdp
如:
hydra -l user -P passlist.txt ftp://192.168.0.1
hydra -L userlist.txt -p defaultpw imap://192.168.0.1/PLAIN
hydra -l admin -p password ftp://[192.168.0.0/24]/
hydra -L logins.txt -P pws.txt -M targets.txt ssh
2.Hashcat
Hashcat是一种快速密码恢复工具,目前已经开源,在kali中也已经集成,可用于破解hash值,支持hashcat的散列算法有Microsoft LM哈希,MD4,MD5,SHA系列,Unix加密格式,MySQL和Cisco PIX等。官网下载:https://hashcat.net/hashcat/
常用参数
-a 指定要使用的破解模式,其值参考后面对参数。“-a 0”字典攻击,“-a 1” 组合攻击;“-a 3”掩码攻击。
-m 指定要破解的hash类型,如果不指定类型,则默认是MD5
-o 指定破解成功后的hash及所对应的明文密码的存放位置,可以用它把破解成功的hash写到指定的文件中
--force 忽略破解过程中的警告信息,跑单条hash可能需要加上此选项
--show 显示已经破解的hash及该hash所对应的明文
--increment 启用增量破解模式,你可以利用此模式让hashcat在指定的密码长度范围内执行破解过程
--increment-min 密码最小长度,后面直接等于一个整数即可,配置increment模式一起使用
--increment-max 密码最大长度,后面直接等于一个整数即可,配置increment模式一起使用
--outfile-format 指定破解结果的输出格式id,默认是3
--username 忽略hash文件中的指定的用户名,在破解linux系统用户密码hash可能会用到
--remove 删除已被破解成功的hash
-r 使用自定义破解规则
使用方法
hashcat -m 18200 -a 0 <AS_REP_responses_file> <passwords_file>
// 7位小写字母破解
hashcat64.exe -a 3 -m 0 --force 7a47c6db227df60a6d67245d7d8063f3 ?l?l?l?l?l?l?l
还想了解更加详细的hashcat的帮助信息,推荐几个网站:
此外,还有很多暴力破解工具,比如:Talon(https://github.com/optiv/Talon,主要是用于使用Kerberos枚举用户列表以标识哪些用户有效,并用于密码的自动猜测)、kerbrute(https://github.com/ropnop/kerbrute/)等等,小伙伴们可以横向地进一步学习。
总结
本系列主要是提供域控知识和安全相关的一些思路,本文主要讲的是信息收集阶段的主要思路,初学者可以借鉴思路自己多横向扩充一下知识面,不要仅限于本文提到的方法或工具。本文的内容中尚有不完美之处,欢迎指正,共同学习,共同进步(#^.^#)
系列相关内容
[域控知识与安全01:域控知识基础]:https://blog.csdn.net/weixin_44283446/article/details/113885122
[域控知识与安全03:权限提升]:https://blog.csdn.net/weixin_44283446/article/details/114013742