信息收集
被动信息收集
- 公开渠道可获得的信息
- 与目标系统不产生直接交互
- 尽量避免留下一切痕迹
收集内容
- IP地址段
- 域名信息
- 邮件地址
- 文档图片数据
- 公司地址
- 公司组织架构
- 联系电话/传真号码
- 人员姓名/职务
- 目标系统使用的技术构架(部分。主要还需要主动方式来收集)
- 公开的商业信息
信息用途
- 用信息描述目标
- 发现
- 社会工程学攻击
- 物理缺口
信息收集——DNS
- 域名解析成IP地址
- 域名与FQDN区别 (sina.com 域名 , www.sina.com 只是sina.com下的一条主机记录,称为FQDN)
- 域名记录:A、C name 、NS、MX、NS
FQDN(全限定域名):同时带有主机名和域名的名称
例如:主机名是bigserver,域名是mycompany.com,那么FQDN就是bigserver.mycompany.com。
- A记录:这个域名对应的IPv4地址
- AAAA记录:这个域名对应的IPv6地址
- CNAME记录:该域名指向了另外一个域名,这两个域名都指向同一个ip地址
- PTR记录:被称为指针记录,是A记录的逆向记录,作用是把ip地址解析成域名
- NS记录:NS记录是域名服务器记录,用来指定域名由哪台服务器来进行解析
- MX记录:邮件交换记录,指向这个域的smtp服务器地址
- TXT记录:为域名设置某条记录的说明
- SPF记录:SPF记录是TXT记录的一个运用。后面的备注需要按照指定的格式才能有效。
nslookup
- nslookup www.sina.com
- server(server命令设置使用其他DNS服务器。不使用本地运营商提供的DNS服务器)
- type = a、mx、ns、any
- nslookup -type= ns example.com 159.154.70.22
直接输入nslookup
> www.sina.com
或者set type=ns <==> set q = ns 再查询
> server 8.8.8.8
(用不同dns服务器解析可能会对域名解析出不同地址,这种情况经常出现,这是因为互联网大部分网站采用智能DNS,终端用户所处的网络不同,DNS查询的结果可能是不一样的,eg:在北京查询sina.com 返回sina.com域名放置在国内的服务器的地址,在纽约查询则返回sina.com域名放置在美国的服务器的地址,就不会做远距离跨国家出口的访问,为优化互联网流量开发出来的智能功能)
set q = any 查询出来既有ns记录也会有mx记录,关于域名的所有记录都有
text记录中的spf记录——用于反垃圾邮件
(spf记录作用也是将一个ip地址反向解析成对应域名,比如有一个邮件服务器,在上面配置了反垃圾邮件设置,开启反向的域名解析查询,当收到一封邮件的时候,服务器会对来源的地址进行spf记录的反向查询,查询到对应的域名,如果查询到的域名匹配到了发送方”填写”的域名,说明是正确的邮件服务器发来的邮件,匹配不到说明是伪造的域名发来的垃圾邮件)
DIG
- dig sina.com any @8.8.8.8 (只会查sina.com的结果,不会查www.sina.com等其他带有主机名的FQDN的相关记录)
- dig +noall +answer mail.163.com any (只输出的answer部分)
- 反向查询:dig -x 220.181.14.157 (其实就是查的ptr记录)
- bind版本信息: dig +noall +answer txt chaos VERSION.BIND @ns3.dnsv4.com
- DNS追踪: dig + trace example.com
补充:
- 一个ip可以绑定多个域名
- 通常情况下一个域名同一时刻只能对应一个ip。但是在域名服务商那里,你可以把服务器群里面的多个提供相同服务的服务器IP设置一个域名可以轮询。但是同一时刻,一个域名只能解析出一个IP供你使用。这些IP可以轮流着被解析。这些IP其实对应的服务器提供的是同一种的服务。(比如说DNS轮询技术(负载均衡技术)下去查询域名,可以查出多个对应ip)
- DNS轮询技术:是指将相同的域名解释到不同的IP,随机使用其中某台主机的技术,该项技术可以智能的调整网站的访问量到不同服务器上,减轻网站服务器的压力,实现负载匀衡
什么是bind?
Bind(Berkeley Internet Name Domain Service),它是一款实现DNS服务器的开放源码软件,够提供双向解析,转发,子域授权,view等功能,是世界上使用最为广泛的DNS服务器软件,目前Internet上半数以上的DNS服务器有都是用Bind来架设的。
一个最完美的dns信息收集是给一个域名,查出该域名以及其他FQDN对应的记录信息。变相思路就是渗透到DNS服务器去获取所有信息,通过dig查询bind版本可能可以得到可利用漏洞。(一般查不到..)
DNS追踪,绕过本地DNS服务器询问,直接去与根域服务器、com域服务器等进行迭代查询,这样就可以在查询过程中发现(com域服务器等)是否地址被改变(是否被劫持)。而直接向本地DNS服务器请求的递归查询是发现不了这个问题的。在实际抓包验证中,还是会先向本地DNS查询根域(本机默认是不知道这些根域的地址的),后续也一样的流程,相当于原来是由本地dns服务器做完后续的一切查询最后返回结果,中间过程无法得知。而trace的话是每一次对根域、com域的查询都由客户端DNS发起通过本地DNS为媒介去查询,每一次查询结果缓存在本地DNS中,下一次查询客户端信任本地DNS继续迭代查询。(递归查询抓包就2个包,trace的迭代查询抓包会出来很多包(如果本地DNS没有缓存的话),详细的迭代查询流程的包)
DNS区域传输
- dig @ns2.sina.com sina.com axfr (尝试从ns2.sina.com这台域名服务器中查询出sina.com的域名下的所有主机记录信息,增加攻击面) (大多情况连接53端口会被拒绝,axfr用的是TCP)
- host -T -l sina.com ns3.sina.com/ 8.8.8.8等域名服务器 (也是全区域传输查询)
DNS字典爆破
区域传输一般很少见,比较常见的方法是DNS字典爆破(爆破某域下的主机名)
- fierce -dnsserver 8.8.8.8 -dns sina.com.cn -wordlist a.txt (先会进行区域传输查询,失败则继续字典爆破)
- dnsdict6 -d4 -t 16 -x sina.com (速度快,字典质量较高)
- dnsenum -f dnsbig.txt -dnsserver 8.8.8.8 sina.com -o sina.xml
- dnsmap sina.com -w dns.txt (速度较慢)
- dnsrecon -d sina.com —lifetime 10 -t brt -D dnsbig.txt (速度也比较快)
- dnsrecon -t std -d sina.com -D dnsbig.txt
推荐:dnsdict6 、 dnsrecon 、 fierceb
DNS注册信息
- whois sina.com
- whois -h whois.apnic.net 192.0.43.10
搜索引擎
- 公司新闻动态
- 重要雇员信息
- 机密文档/网络拓扑
- 用户名/密码
- 目标系统软硬件技术构架
SHODAN
- 搜索联网设备
- Banner:http、ftp、ssh、telnet
- https://www.shodan.io/
- 常见filter:
- net (192.168.20.1) eg: net:8.8.8.8
- city
- country(CN、US)
- port (80、21、22、23)
- os
- Hostname
- server eg: server: Apache
- 200 OK cisco country:JP
- user:admin pass:password
- linux upnp avtech
搜索规则:https://www.shodan.io/explore
- +支付 -充值 (含有支付,不含有充值的搜索结果)
- 支付 充值(含有支付或者含有充值) “支付 充值” (就是搜索完整的一串支付充值)
- 北京的电子商务公司—— 北京 intitle:电子商务 intext:法人 intext:电话
- 阿里网站上的北京公司联系人—— 北京 site:alibaba.com inurl:contact
- 塞班司法案的PDF文档—— SOX filetype:pdf
- 法国的支付相关的页面—— payment site:fr
实例:
- inurl: “level/15/exec/-/show”
- intitle:”netbotz appliance” “ok” eg: http://207.150.248.14
- inurl:/admin/login.php
- inurl:qq.txt
- filetype:xls “username|password”
- inurl:ftp “password” filetype:xls site:baidu.com
搜索规则:GHDB——https://www.exploit-db.com/google-hacking-database
YANDEX
- 世界第四大搜索引擎——俄罗斯
- https://www.yandex.com/
- 偶尔有惊喜
用户信息
调用搜索引擎去实现,大量并发去搜索效率高
theharvester
邮件、主机
- theharvester -d sina.com -l 300 -b google
文件
- metagoofil -d microsoft.com -t pdf -l 200 -o test -f 1.html
MELTAGO
延展性的信息收集工具(图形化界面)
- 申请账号
- 登录使用
信息收集——其他途径
- 社交网络
- 工商注册
- 新闻组/论坛
- 招聘网站
- http://www.archive.org/web/web.php 搜索网页的历史版本的页面(快照)
个人专属密码字典
- 按个人信息生成其专属的密码字典
- CUPP——Common User Password Profiler
- git clone http://github.com/Mebus/cupp.git
- python cup.py -i
METADATA
- Exif图片信息
- exiftool a.jpg
- Foca(Windows下图片信息)
RECON-NG
- 全特性的web侦察框架、信息搜索框架
- 基于python开发
- 命令格式与msf一致
- 使用方法:
- 模块
- 数据库
- 报告
- recon-ng -w sina 进入“新浪”工作区
- 框架内help 查看命令
主动信息收集
- 直接与目标系统交互通信
- 无法避免留下访问的痕迹
- 使用受控的第三方电脑进行探测
- 使用代理或已经被控制的主机
- 做好被封杀的准备
- 使用噪声迷惑目标,淹没真实的探测流量
- 扫描
- 发送不同的探测,根据返回结果判断目标状态(ip层、端口层、服务层)
发现
- 识别活着的主机(不扫描端口)
- 潜在的被攻击目标
- 输出一个ip地址列表
- 2、3、4层发现
OSI理论7层模型(实际大多4-5层)
发现——二层发现
- 优点:扫描速度快、可靠
- 缺点:不可路由(大多数情况下)(即只在内网广播)
- Arp协议
- 抓包
(不同内网环境下可以使用的方法可能会受限,多了解)
arping
用来发现一个主机ip是否存活在网络里
- arping
- arping 1.1.1.1 -c 1 (发送一个数据包)
- arping 1.1.1.1 -d (发现重复响应,如果应答从两个不同mac地址发送出来响应同一个ip则中断——发现arp欺骗)(对网关进行检测)
- arping -c 1 1.1.1.1 | grep “bytes from” | cut -d “ “ -f 5 |cut -d “(“ -f 2 | cut -d “)” -f 1
- 脚本
- arping1.sh eth0 >addrs
- arping2.sh addrs
nmap
- nmap 1.1.1.1-254 -sn (发送arp包,还会有dns反向查询)
- nmap -iL iplist.txt -sn
Netdiscover
- 专用于二层发现
- 可用于无线和交换网络环境
- 主动和被动探测
- 主动
- netdiscover -i eth0 -r 1.1.1.0/24
- netdiscover -l iplist.txt
- 被动(混杂模式监听广播包)
- netdiscover -p
- 主动arp容易触发报警
Scapy
- Scapy
- 作为python库进行调用
- 也可以作为单独的工具使用
- 抓包、分析、创建、修改、注入网络流量
- apt-get install python-gnuplot
- Scapy
- ARP().display()
- Sr1()
- Python脚本编写
发现——三层发现
- 优点
- 可路由
- 速度比较快
- 缺点
- 速度比二层慢
- 经常被边界防火墙过滤(造成扫描结果不准确)
- IP、icmp协议
Ping
- ping 1.1.1.1 -c 2
- ping -R 1.1.1.1 / traceroute 1.1.1.1 (通过TTL值从1、2、3开始置起发送ICMP包,每经过一个路由TTL值减1,到0时发送回包,此时获得第n序列的路由器ip,这种方式来获取整个路由路径)
- ping 1.1.1.1 -c 1 | grep “bytes from” | cut -d “ “ -f 4 | cut -d “:” -f 1
- 脚本实现(scapy)(略)
nmap
- nmap -sn 1.1.1.1-255 (在本网段下发送的arp,在外网发送的icmp数据包,同样也会有DNS解析,另外还有TCP包)
- nmap -iL iplist.txt -sn
fping
比ping命令用法更丰富,可以对地址段进行ping,ping响应的内容也更多
- fping 1.1.1.1 -c 1
- fping -g 1.1.1.0 1.1.1.255
- fping -g 1.1.1.0/24
- fping -f iplist.txt
Hping3
几乎可以实现对包内容的每一个字段的自定义,类似scapy
- Hping
- 能够发送几乎任意TCP/IP包
- 功能强大但每次只能扫描一个目标
- hping3 1.1.1.1 —icmp -c 2
- 脚本方式实现:
- for addr in $(seq 1 254) : do hping3 1.1.1.$addr —icmp -c 1 >>handle.txt & done
发现——四层发现
此处只在于发现ip,不在于发现端口
- 优点
- 可路由且结果可靠
- 不太可能被防火墙过滤
- 甚至可以发现所有端口都被过滤的主机
- 缺点
- 基于状态过滤的防火墙可能过滤扫描
- 全端口扫描速度慢
- TCP
- 未经请求的ACK——RST(直接发第三阶段的ACK,服务器拒绝贸然发来的ack直接回应RST包,这样证明了该主机存活)
- SYN——SYN/ACK、RST (正常的请求过程)
- UDP
- ICMP端口不可达、一去不复返
通过scapy构造实现(略)
nmap
- nmap 1.1.1.1-254 -PU53 -sn
- nmap 1.1.1.1-254 -PA80 -sn 直接发ACK包
- nmap -iL iplist.txt -PA80 -sn
只做主机发现,不做端口扫描
hping3
- hping3 —udp 1.1.1.1 -c 1 返回ICMP端口不可达即证明主机存活 (UDP准确度不是很高)
端口扫描
UDP端口扫描
- 端口对应网络服务及应用端程序
- 服务端程序的漏洞通过端口攻入
- 发现开放的端口
- 更具体地攻击面
- UDP端口扫描
- 假设ICMP port unreachable 响应代表端口关闭
- 目标系统不响应ICMP port unreachable时则端口开放(与主机发现相反,可能产生误判)
- 完整的UDP应用层请求
- 准确性高
- 耗时巨大
nmap
- nmap -sU 1.1.1.1
- 默认的1000个端口
- ICMP host-unreachable (基于UDP就是基于这个特征来探测)
- nmap -sU 192.168.1.134 -p1-65535 或者 -p-
- nmap -iL iplist.txt -sU -p 1-200
TCP端口扫描
- 基于连接的协议
- 三次握手
- 隐蔽扫描
- 僵尸扫描
- 全连接扫描
- 所有的TCP扫描方式都是基于三次握手的变化来判断目标端口状态
隐蔽扫描——syn
- 不建立完整连接
- 应用日志不记录扫描行为——隐蔽
(应用层日志由于没建立连接所以不会有记录,网络层进行深度审计还是可以发现)
- nmap 192.168.1.134 -p1-100 默认按syn扫描 (加—open 只显示扫描出来的open的端口)
- nmap -sS 1.1.1.1 -p 80,21,25 (按syn扫描)
- hping3 1.1.1.1 —scan 80 -S
僵尸扫描
- 极其隐蔽
- 实施条件苛刻
- 可伪造源地址
- 选择僵尸机
- 闲置系统(足够空闲,没有其他主机与它通信)
- 系统使用递增的IPID
- 0
- 随机
(第三步如果扫描者接到的RST包IPID=x+2则可以判断之前伪造的扫描请求端口是开放的,否则不开放的情况下IPID=x+1)
- 查询是否能充当一个好的僵尸机
- nmap -p445 192.168.1.133 —script=ipidseq.nse
- 扫描目标
- nmap 192.168.1.134 -sI 【僵尸机ip(在同一个网络里别人的主机)】 -Pn -p 0-100
服务扫描
- 识别开放端口上运行的应用
- 识别目标操作系统
- 提高攻击效率
- Banner捕获
- 服务识别
- 操作系统识别
- SNMP分析
- SMB扫描
- 防火墙识别
Banner
- 软件开发商
- 软件名称
- 服务类型
- 版本号
- 直接发现已知的漏洞和弱点
- 连接建立后直接获取banner(不可避免留下连接痕迹)
eg: nc -nv 1.1.1.1 22
eg: 简单的一些函数测试(略)
1 | #python socket 控制台下 |
nmap扩展:/usr/share/nmap/scripts 自带了许多nmap脚本(lua语言编写
ls | grep ms-sql
eg: amap -B 192.168.1.133 1-445
服务识别
- 另类服务识别方法(banner提供的信息有限)
- 特征行为和响应字段
- 不同的响应可用于识别底层操作系统
eg: nmap 192.168.1.134 -p1-100 -sV 识别端口服务(不仅仅基于banner,还会基于指纹特征等)
eg: amap 192.168.35.1 20-30 -qb
操作系统识别
- 操作系统识别技术
- 种类繁多
- 好产品采用多种技术组合
- TTL起始值
- Windows:128(65-128)
- Linux/Unix:64(1-64)
- 某些Unix:255
eg:nmap 1.1.1.1 -O
eg:xprobe2 192.168.1.134 (不太准)
被动操作系统识别
- IDS
- 抓包分析
eg:p0f(自动监听流量并识别os)
SNMP
- 简单网络管理协议
- 信息的金矿
- Community strings(snmp的身份验证)
- 信息查询或重新配置
- 经常被错误配置
- public / private / manager
- MIB tree
- SNMP Management Information Base (MIB)
- 树型的网络设备管理功能数据库
- 1.3.6.1.4.1.77.1.2.25
- onesixtyone 1.1.1.1 public
- onesixtyone -c dict.txt -i hosts -o my.log -w 100
- snmpwalk hosts -c public -v 2c
SMB扫描
- Server Message Block 协议
- 微软历史上出现安全问题最多的协议
- 实现复杂
- 默认开放
- 文件共享
- 空会话未身份认证访问(SMB1)
- 密码策略
- 用户名
- 组名
- 机器名
- 用户、组ID
- nmap -v -p135,445 192.168.60.1-20
- nmap 192.168.1.132 -p139,445 —script=smb-os-discovery.nse
- nmap -v -p139,445 —script=smb-check-vulns —script-args=unsafe=1 1.1.1.1
- nbtscan -r 192.168.1.0/24(nbtscan局域网下可以跨网段扫描)
SMTP扫描
- 发现邮箱账号
- nmap smtp.163.com -p25 —script=smtp-enum-users.nse —script-args=smtp-enum-users.methods={VRFY}
防火墙扫描
- 通过检查回包,可能识别端口是否经过防火墙过滤
- 设备多种多样,结果存在一定误差
负载均衡识别
- 广域负载均衡
- DNS
- HTTP-load balancing
- Nginx
- Apache
- lbd www.baidu.com
- lbd mail.163.com
WAF识别
- WEB应用防火墙
- wafw00f -l
- wafw00f http://www.microsoft.com
- nmap www.microsoft.com —script=http-waf-detect.nse