数据来源
扫描技术
背景
在渗透测试过程中,为了节省人力和时间,通常采用手工和工具相结合的方式。使用工具,就是将一些机械性的操作自动化实现,用来提高渗透测试的效率。例如,寻找内网网段[10.10.10,20/24]所有在线主机,如果一个一个去ping测试主机是否存活,显然是不合适的。
主机测探与端口扫描
主机测探是指确定目标主机是否存活。
端口扫描就是寻找在线主机所开放的端口,并且在端口上所运行的服务。甚至可以进步确定目标主机操作系统类型和更详细的信息。
- 基础知识
@ 常见的端口号
端口 | 描述 | 端口 | 描述 |
21 | FTP(文件共享) | 443 | HTTPS |
22 | SSH(远程管理) | 1433 | SQL Server |
23 | Telnet(远程管理) | 1521 | Oracle |
25 | SMTP(邮件发送协议) | 3306 | MySQL |
80 | HTTP | 3389 | RDP(远程桌面协议) |
445 | smb (Server 共享服务) |
- Nmap-扫描器之王
nmap被誉为“扫描器之王”,nmap为开源工具,并且是跨平台的。官方网站
我们可以使用kali虚拟机中的nmap(kali自带的)
- 重要常用参数
参数 | 描述 |
-sP | ping 扫描 |
-p | 指定端口范围 |
-sT | TCP 连接扫描 |
-sS | TCP SYN 扫描 |
-sU | UDP 扫描 |
-sV | 端口服务版本探测 |
-O | 启用操作系统探测 |
-A | 全面扫描 |
-oN | 保存 txt |
-oA | 保存到所有格式 |
使用示例:
准备:
1、开启虚拟机并配置IP
我这里开了一台Kali、一台windowsXP、一台windows2003,并都把虚拟网络桥接到vm2网络内(除了Kali,其他虚拟机开启啥都行,最后让他们处于同一局域网就好)
给虚拟机配IP就按上面的括补图来配置
给kali系统配置IP
命令:
ifconfig eth0 10.1.1.2/24 # eth0的“0”是网卡命令,“0”表示第一块网卡,“/24”是表示子网掩码转换成二进制就是24个1,8位为一组= 11111111,11111111,11111111,转换成十进制:255,255,255,写成子网掩码的形式:255.255.255.0。如果没有权限,在命令前面加:sudo 空格
ifconfig eth0 # 查看IP有没有配置成功
然后可以ping一下其他两台PC,测试这些虚拟机能不能互相通信了
ping 目标ip # ctrl + c 停止ping
扫描示例:
nmap -sP 10.1.1.1-100 # 扫描10.1.1.1 到10.1.1.100网段的存活地址
nmap -sP 10.1.1.0/24 # 扫描10.1.1.0整个网段的存活地址(包括10.1.1.1 - 10.1.1.254)
nmap -p 21,23-25,3389 10.1.1.3 # 扫描10.1.1.3指定的端口是否开放
nmap 10.1.1.3 # 简单扫描啥都不写,会先扫描在线状态再扫描所有端口号
@TCP 连接扫描 -sT 是会完成TCP完整的三次握手
nmap -sT 10.1.1.3 -p 3389 # 扫描10.1.1.3这台主机,测试3389端口是否可以被连接上
三次握手抓包图解
简单理解:我向目标发送一个SYN,他回我一个SYN,最后我再向他发送一个ACK完成三次握手。最终我向目标发送一个RST强制断开连接,使用的传输协议都是TCP。
端口关闭的情况
三次握手(源文)
所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立
目的:是建立可靠的通信通道,说到通信,简单来说就是数据的发生与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是否正常
- 第一次握手:Client(客户端)什么都不能确认,Server(服务器)确认了对方发送正常,自己接收正常
- 第二次握手:Client确认了:自己发送、接收正常,对方发送正常、接收正常;Server确认了:对方发送正常,自己接收正常
- 第三次握手:Client确认了:自己发送、接收正常,对方发送正常接收正常;Server 确认了:对方发送正常,接收正常,自己发送正常,接收正常。
@ 目标主机版本
nmap -p 21,23,455 10.1.1.3 # 扫描指定的端口
nmap -p 21,23,455 10.1.1.3 -sV # 扫描指定的端口的服务器版本
nmap -O 10.1.1.3 # 扫描目标系统版本及端口(不同的操作系统攻击方式就会不同)
nmap -A 10.1.1.3 # 全面扫描(IP、端口、端口的服务版本)
@ 保存扫描报告
- oN保存成txt纯文本格式
nmap -sT 21,23 10.1.1.3 -sV -oN result.txt # 扫描指定的端口并打印扫描结果
- oX保存成xml表格格式
nmap -p 21,23 10.1.1.3 -oX result.xml # 扫描指定的端口并打印扫描结果
口令破解
口令安全威胁概述现在很多地方都以用户名(账号)和口令(密码)作为鉴权的方式,口令(密码)就意味着访问权限。口令(密码)就相当于进入家门的钥匙,当他人有一把可以进入你家的钥匙,想想你的安全、你的财务、你的隐私、害怕了吧。例如网站后台、数据库、服务器、个人电脑、QQ、邮箱等等
- 口令安全现状
@ 弱口令。
类似于123456、654321、 admin123等这样常见的弱密码。
@ 默认口令
很多应用或者系统都存在默认口令。比如 phpstudy的 mysql数据库默认账密[ root/root ], Tomcat 管理控制台默认账密[ tomcat/ tomcat ]等。
@ 明文传输
比如http、ftp、telnet等服务,在网络中传输的数据流都是明文的,包括口令认证信息等。这样的服务,就有被嗅探的风险 。
破解方式
- 暴力破解
暴力破解就是利用所有可能的字符组成密码,去尝试破解。这是最原始,粗暴的破解方法,根据运算能力,如果能够承受的起时间成本的话,最终一定会爆破出密码。下表是不同字符集合不同位数密码的数量。
字符集 | 密码位数 | 密码空间 |
【0 - 9】 | 8位 | 10~8=100000000 |
【0 - 9】【a - z】 | 8位 | 36^8=28211099074560 |
【0 - 9】【a - z】 | 1 - 8位 | ?? |
下图为用真空密码字典生成器,生成的1到8位数的小写字母和数字字典,约占用空间
- 字典破解
如果能通过比较合理的条件,筛选或者过滤掉一些全字符组合的内容,就会大幅降低爆破的成本。我们把筛选出的密码组合成特定的字典。在用字典爆破密码也是可以的,但是这样做有可能会漏掉真正的密码。密码字典大致分为以下几类。
@弱口令字典
比如123456,dmin等这样的默认口令或弱口令。
@ 社工字典(社会工程学)
人们在设置密码的时候,往往为了便于记忆,密码的内容和组合会与个人信息有关,比如常见的密码组合“名字+生日”。社工字典更具针对性,准确率也比较高。
下图为,根据提供的用户信息,使用亦思社会工程学字典生成器生成的用户可能使用的密码,通过此字典进行密码破解。
- 字符集字典
如果能确定密码的字符集合,也将大大降低爆破的成本
windows口令破解
- windows口令远程爆破
我们可以通过Ntscan工具远程爆破 windows口令
工具 | Ntscan |
使用场景 | 本地网络(局域网) |
支持模式 | 139/445 | 支持IPC/SMB/WMI 三种扫描模式 |
字典文件 | NT user.dic/ NT pass.die |
如何防止 Ntscan扫描?
本地策略-->安全选项-->网络访问:本地账户的共享和安全模式属性-->仅来宾模式
例: 准备两台虚拟机如:windowsXP -- 模拟黑客攻击机 windows server2003 -- 模拟肉鸡
1)让两台虚拟机能互相通信(可以使用ping命令测试)如:windows server2003的IP配置成:10.1.1.1/24,windowsXP的IP配置成:10.1.1.2/24,然后把两台虚拟就桥接到同一个虚拟网络就行了。
2)在windowsXP使用软件进行破解密码
- windows账户 本地 hash 值破解
除了可以从远程爆破 windows密码,我们还可以在本地破解 windows 密码。本地indows账户破解主要有两种方式。
@ 从内存中读取 windows密码
我们可以是用gtpase直接从 windows 系统内存中读取庄户密码。 (针对win2003系统,win10不起效)
@ windows hash值破解(不是win2003系统,就可以用这种方式)
windows Hash 值破解一共需要两步操作。首先我们使用Quarks Pwdump工具读取(导出) windows账户密码hash值,然后再使用 Saminside工具破解 hash 值。
提取本机的哈希值
输入:QuarksPwDump.exe # 进入蓝色的命令行窗口
QuarksPwDump.exe -dhl # 提取哈希值
暴力破解哈希
1)把你认为可能是密码的字符串,使用密码本生成复制粘贴到上图软件的密码本文件中(密码本文件是运行程序才会自动生成)
2)选择要破解的哈希值文件(刚才创建的hash.txt文件 )
linux口令破解(linux里kali内的工具进行远程连接破解)
linux 口令破解,也分远程破解与本地破解。远程破解主要是爆破ssh服务,属于在线密码攻击。本地破解需要拿到linux的 shadow 文件,进行hash值破解,属于离线密码攻击。
在kali命令行输入 hydra 出现以下内容
- 破解SSH服务
-L 账户字典
-l 单个账户名
-p 单个密码
-P 密码字典
-vV 显示破解过程
我们使用 hydra 攻击破解ssh服务(22端口), hydra攻击己经自动集成在kali虚拟机中。命令如下
hydra -l administrator -P /root/dic/test_pwd.dic 10.1.1.3 ssh -vV # administrator(用户名) /root/dic/test_pwd.dic(密码本路径)
注意:要目标主机开启了相应的服务端口,才能暴力破解
测试21、23、445端口是否开启
准备好一个密码本(如果无法确定账号,可以再准备一个账号本)
hydra爆破telnet(23端口):-p # 使用密码 -P # 使用密码字典 -vV # 显示破解过程
hydra -l administrator -P /home/kali/桌面/test_pwd.txt 10.1.1.3 telnet # 通过23端口进行破解密码
hydra爆破FTP(21端口)
hydra -l administrator -P /home/kali/桌面/test_pwd.txt 10.1.1.3 ftp # 通过21端口进行破解密码
hydra爆破smb(445):
hydra -l administrator -P /home/kali/桌面/test_pwd.txt 10.1.1.3 smb # 通过21端口进行破解密码
总结:先扫描对方那个端口打开了,就使用那个端口进行破解
- 本地 shadow文件破解
我们可以使用john工具,破解 shadow 密码文件。
john有 windows版和linux版本。jhn也是自动集成在kali中。john破解的时候也需要准备一个字典。
john的具体命令如下
john --wordlist=/home/kali/桌面/test_pwd.txt /etc/shadow # 指定要使用的字典
john --show /etc/shadow # 开始破解