信息收集
*****免责声明*****
此处介绍的技术仅作为研究,学习,交流用,严禁任何个人,机构,公司,组织,团体使用这里公布的技术对任何类似上述的第三方实体进行未经授权,非法的渗透测试与攻击入侵,同时本博文作者不承担由此造成目标的任何(包括但不限于)经济损失,用户数据丢失或泄漏,业务亏损等后果产生的相应法律责任
被动信息收集
-
信息收集-DNS
- DNS 信息收集-NSLOOKUP
- ctrl+shift++ 终端字体放大
- ctrl+ - 终端字体缩小
-
使用 nslookup 查看域名
-
Server: 192.168.1.1 #DNS 服务器 Address: 192.168.1.1#53 #DNS 服务器地址
-
www.baidu.com canonical name = www.a.shifen.com.
www.a.shifen.com canonical name = www.wshifen.com.
Name: www.wshifen.com 和 www.baidu.com 是彼此的域名别名
Address: 103.235.46.39
-
DNS 信息收集-DIG
语法: dig (选项) 需要查询的域名
@<DNS 服务器地址>: 指定进行域名解析的域名服务器;
any #显示所有类型的域名记录。默认只显示 A 记录
-
-
dig baidu.com dig @114.114.114.114 baidu.com dig @114.114.114.114 baidu.com any #any 表示查询所有
-
使用-x 参数 IP 反查域名
-
-
dig -x 114.114.114.114 114.114.114.114.in-addr.arpa. 22 IN PTR public1.114dns.com 注:114.114.114.114 反向解析为 public1.114dns.com
-
查询 DNS 服务器 bind 版本信息
查询 DNS 版本信息的目的:可以通过版本信息来查找相关版本漏洞的利用方式
例 1: 查看 dnspod 的域名服务器 ns3.dnsv4.com 使用 bind 的软件版本信息
-
-
dig txt chaos VERSION.BIND @ns3.dnsv4.com
-
;; QUESTION SECTION:
;VERSION.BIND. CH TXT
;; ANSWER SECTION:
VERSION.BIND. 0 CH TXT "1.1.1711.01" #这是软件包版本信息
查询网站的域名注册信息和备案信息
-
通过 Web 接口查询:
- 阿里云:https://whois.aliyun.com/
- 站长之家:http://whois.chinaz.com/
-
Whois 命令查询
-
whois baidu.cn
-
-
备案信息查询
-
天眼查https://www.tianyancha.com/
-
http://icp.chinaz.com/http://www.beian.miit.gov.cn/
-
使用 Maltego 收集子域名信息
-
挖掘子域名的重要性
- 子域名是某个主域的二级域名或者多级域名,在防御措施严密情况下无法直接拿下主域,那么就可以采用迂回战术拿下子域名,然后无限靠近主域。
-
1. 子域名挖掘工具 :Maltego 子域名挖掘机。2. 搜索引擎挖掘 如: 在 Google 中输入 site:qq.com3. 第三方网站查询:http://tool.chinaz.com/subdomain、https://dnsdumpster.com/4. 证书透明度公开日志枚举:https://crt.sh/ 、http://censys.io/5. 其他途径:https://phpinfo.me/domain 、http://dns.aizhan.com
-
使用 Maltego CE 进行子域名挖掘
Shodan 信息收集
- FQ后访问:Shodan 官网:https://www.shodan.io
Google 搜索引擎的使用技巧
-
Google 常用语法说明site 指定域名inurl URL 中存在的关键字页面intext 网页内容里面的关键字Filetype 指定文件类型intitle 网页标题中的关键字link 返回你所有的指定域名链接info 查找指定站点信息cache 搜索 Google 里的内容缓存
- 谷歌黑客数据库:https://www.exploit-db.com/google-hacking-database
主动信息收集
主动信息收集的原理
-
主动信息收集的特点
- 直接与目标系统交互通信
- 无法避免留下访问的痕迹
- 使用受控的第三方电脑进行探测,使用代理或已经被控制的机器,做好被封杀的准备
- 扫描发送不同的探测,根据返回结果判断目标状态
-
发现目标主机的过程
- 识别存活主机,发现潜在的被攻击目标
- 输出一个 IP 地址列表比如 IP 地址段 IP 地址范围
- 使用二、三、四层进行探测发现
-
OSI 七层模型和 TCP/IP 五层模型
-
基于 OSI 模型进行扫描的优缺点
-
二层扫描的优缺点优点:扫描速度快、可靠缺点:不可路由
-
三层扫描的优缺点优点:可路由,速度较快缺点:速度比二层慢,经常被边界防火墙过滤使用 IP、icmp 协议
-
四层扫描的优缺点优点:可路由且结果可靠不太可能被防火墙过滤可以发现所有端口都被过滤的主机缺点:基于状态过滤的防火墙可能过滤扫描全端口扫描速度慢
-
基于 ping 命令的探测
- PING
- PING 命令是我们常用的判断主机之间网络是否畅通,同样也是能判断我们的目标主机是否存活。
-
我们从当前主机到目标主机之间肯定要经过很多网络设备,我们怎么才能知道中间经过了哪些网络设备?Traceroute 命令也可以对路由进行跟踪
-
ARPING
-
ARP 协议概述:ARP 协议是“Address Resolution Protocol”(地址解析协议)的缩写。计算机通过 ARP 协议将 IP 地址转换成 MAC 地址。
- 使用 arping 命令查看局域网中的 IP 是否有冲突
-
使用 Netdiscover 进行被动方式探测局域中存活的机器
- Netdiscover 是一个主动/被动的 ARP 侦查工具。使用 Netdiscover 工具可以在网络上扫描 IP 地址,检查在线主机或搜索为它们发送的 ARP 请求。
-
主动模式:主动模式顾名思义就是主动的探测发现网络内主机,但是这种方式往往会引起网络管理员的注意
-
netdiscover -i eth0 -r 192.168.1.0/24
参数:-i device: your network device-r range: scan a given range instead of auto scan. 192.168.6.0/24,/16,/8 -
被动模式:被动模式的方法更加隐蔽,但是速度会比较慢,网卡被设置为混杂模式来侦听网络内的 arp 数据包进行被动式探测,这种方式就需要网络内设备发送 arp 包才能被探测到。
-
netdiscover -p
参数:-p passive mode: do not send anything, only sniff
-
- HPING3
-
Hping3 是一个命令行下使用的 TCP/IP 数据包组装/分析工具,通常 web 服务会用来做压力测试使用,也可以进行 DOS 攻击的实验。同样 Hping 只能每次扫描一个目标。对 baidu.cn 进行压力测试
hping3 -c 1000 -d 120 -S -w 64 -p 80 --flood --rand-source baidu.cn
-c 1000 = 发送的数据包的数量。-d 120 = 发送到目标机器的每个数据包的大小。单位是字节-S = 只发送 SYN 数据包。-w 64 = TCP 窗口大小。-p 80 = 目的地端口(80 是 WEB 端口)。你在这里可以使用任何端口。--flood = 尽可能快地发送数据包,不需要考虑显示入站回复。洪水攻击模式。--rand-source = 使用随机性的源头 IP 地址。这里的伪造的 IP 地址,只是在局域中伪造。通过路由器后,还会还原成真实的 IP 地址。
-
-
使用 FPING 查看局域中运行了哪些机器
-
Fping 就是 ping 命令的加强版他可以对一个 IP 段进行 ping 扫描,而 ping 命令本身是不可以对网段进行扫描的。
fping -g 192.168.1.0/24 -c 1 > fping.txt
-g 表示对地址段进行扫描如果不加可以对某个 IP 进行扫描-c 表示 ping 的次数>fping.txt 表示将扫描的结果重定向到 fping.txt ,原因是如果扫描一个网段的话输出结果是非常多的,我们输出重定向到文件中只会获得存活的主机信息。cat fping.txt
-
基于 Nmap 的扫描方式
-
Nmap 的基本扫描方式Nmap,也就是 Network Mapper,最早是 Linux 下的网络扫描和嗅探工具包。注:Nmap 的功能非常强大后面会单独用一节课来进行讲解例:扫描 192.168.1.0 这个网段
nmap -sn 192.168.1.0/24
或nmap -sn 192.168.1.1-254
-sn 参数说明:表示只 ping 扫描,不进行端口扫描 -
使用 nmap 进行半连接扫描nmap 扫描类型主要有 TCP 的全连接扫描(会在被扫描机器留下记录),半连接扫描(不会留下记录)
-
nmap -sS 101.200.128.35 -p 80,81,21,25,110,443
-sS 表示使用 SYN 进行半连接扫描
- 使用 nc 扫描端口
-
nc 是 netcat 的简写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具
-
nc 的作用:1. 实现任意 TCP/UDP 端口的侦听,nc 可以作为 server 以 TCP 或 UDP 方式侦听指定端口2. 端口的扫描,nc 可以作为 client 发起 TCP 或 UDP 连接3. 机器之间传输文件4. 机器之间网络测速
-
nc 参数:-nv 表示我们扫描的目标是个 IP 地址不做域名解析-w 表示超时时间-z 表示进行端口扫描
-
nc -nv -w 1 -z 192.168.1.1 1-100
-
使用 scapy 定制数据包进行高级扫描
-
scapy 概述
-
Scapy 是一个可以让用户发送、侦听和解析并伪装网络报文的 Python 程序。这些功能可以用于制作侦测、扫描和攻击网络的工具。
-
-
scapy 定制 ARP 协议
-
INFO: Can't import matplotlib. Won't be able to plot.如果提示 INFO 找不到某个模块可以使用 apt-get install python-matplotlib安装时我们输入 exit() 退出 scapy
-
不过我们还可以看到一些 WARNING 信息,这个信息不影响我们使用。我们使用 ARP().display()来查看 ARP 函数的用法
>>> ARP().display() #查看 ARP 函数的用法,如下 ###[ ARP ]### hwtype= 0x1 硬件类型 ptype= 0x800 协议类型 hwlen= 6 硬件地址长度(MAC) plen= 4 协议地址长度(IP) op= who-has who-has 查询 hwsrc= 00:0c:29:6a:cf:1d 源 MAC 地址 psrc= 192.168.1.53 源 IP 地址 hwdst= 00:00:00:00:00:00 pdst= 0.0.0.0 向谁发送查询请求
-
例:定义向 192.168.1.1 发送 arp 请求的数据包sr1 函数作用:sr1 函数包含了发送数据包和接收数据包的功能。
>>> sr1(ARP(pdst="192.168.1.1")) Begin emission: .........................Finished sending 1 packets. ...* Received 29 packets, got 1 answers, remaining 0 packets <ARP hwtype=0x1 ptype=0x800 hwlen=6 plen=4 op=is-at hwsrc=f0:98:38:b8:e0:92 psrc=192.168.1.1 hwdst=00:0c:29:6a:cf:1d pdst=192.168.1.53 |<Padding load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>> >>> exit() #退出 scapy
注:发现源地址 psrc=192.168.1.1,说明已经收到网关的应答包。
-
-
scapy 定制 PING 包
-
Scapy 的功能是非常强大的,我们前面只是简单的介绍了他的 ARP 探测方式,下面我们简单讲一下IP/ICMP 的方式下面两条命令可以直接看到我们的数据包格式
-
###[ IP ]### version= 4 版本:4,即 IPv4 ihl= None 首部长度 tos= 0x0 服务 len= None 总长度 id= 1 标识 flags= frag= 0 标志 ttl= 64 生存时间 proto= hopopt 传输控制协议 IPv6 逐跳选项 chksum= None 首部校验和 src= 127.0.0.1 源地址 dst= 127.0.0.1 目的地址 ICMP().display() ###[ ICMP ]### type= echo-request 类型,标识 ICMP 报文的类型 code= 0 代码 chksum= None 校验和 id= 0x0 标识 seq= 0x0
-
注: IP()生成 ping 包的源 IP 和目标 IP ,ICMP() 生 ping 包的类型。使用 IP()和 ICMP()两个函数,可以生成 ping 包,进行探测。
-
思路:1、修改 IP 包头的 dst,也就是我们的目的地址2、拼接上 ICMP 的数据包类型3、使用 sr1()进行发送数据包并接收数据包
-
>>> sr1(IP(dst="192.168.1.1")/ICMP(),timeout=1) Begin emission: .Finished sending 1 packets. * Received 2 packets, got 1 answers, remaining 0 packets <IP version=4 ihl=5 tos=0x0 len=28 id=32131 flags= frag=0 ttl=64 proto=icmp chksum=0x79d7 src=192.168.1.1 dst=192.168.1.53 options=[] |<ICMP type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |<Padding load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>>
注:大家复制命令时,>>>提示符和命令之间不能有空格。
-
-
scapy 定制 TCP 协议 SYN 请求
- tcp 三次握手过程中 flags 的标记
-
#查看 TCP()函数的用法
>>> TCP().display()
###[ TCP ]###sport= ftp_data TCP 源端口 - #查看 TCP()函数的用法
###[ TCP ]### sport= ftp_data TCP 源端口 dport= http TCP 目的端口 seq= 0 32 位序号 ack= 0 32 位确认序号 dataofs= None 4 位首部长度 reserved= 0 保留 6 位 flags= S 标志域,紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、 完成发送数据标志。按照顺序排列是:URG、ACK、PSH、RST、SYN、FIN window= 8192 窗口大小 chksum= None 16 位校验和 urgptr= 0 优先指针 options= [] 选项
sr1(IP(dst="192.168.1.1")/TCP(flags="S" ,dport=80),timeout=1)flags=”S”表示 SYN 数据包dport=80 表示目标端口 80我们的到一个 flags=SA 的数据包。SA 标志即 SYN+ACK。我们收到服务器 tcp 三次握手中的第二个包,能收到回应,表示端口开放。注:这种基于 tcp 的半链接扫描,更隐密,更不容易被发现。
实战 2-僵尸扫描
做渗透最重要是什么? 思维!学僵尸扫描实用性不大,但是僵尸扫描的这个种思维值得你学习。
-
僵尸扫描概述
-
僵尸主机:僵尸主机是指感染僵尸程序病毒,从而被黑客程序控制的计算机设备。但是僵尸扫描中的僵尸主机指得是一个闲置的操作系统(这里的闲置是指主机不会主动和任何人通信),且此系统中 IP 数据包中 ID 是递增的。IPID:指的是通信过中,IP 数据包中的 ID。僵尸扫描拥有极高的隐蔽特性,但是实施条件苛刻。
-
1. 目标网络可伪造源地址进行访问2. 选择僵尸机,僵尸机需要在互联网上是一个闲置的操作系统,需要系统使用递增的 IPID,比如 XP系统。
-
前提是:你在公网或局域网上先拿到了肉机。 僵尸扫描可以不拿到肉机权限,只要对方的 IPID 是自增长上的就可以了。
- 端口关闭状态扫描原理
-
第一步:参考图 1。(1)、攻击者向僵尸机发送 SYN/ACK 确认包。(2)、僵尸主机返回我们 RST 数据包关闭链接,数据包中包含了 IPID 信息。假设 IPID=X注:三次握手的第一个包是 SYN,目标主机收到 SYN 才会应答 SYN/ACK,因为僵尸主机没有向我们发送 SYN 请求。所以僵尸主机返回我们 RST 数据包关闭链接。
-
第二步:参考图 2。(1)、攻击者修改 IP 包头的 SRC 字段为僵尸主机的 IP,伪装成僵尸主机给目标主机发 SYN 请求。(2)、目标主机收到请求,如果端口是关闭的。就会返回给僵尸主机一个 RST 的数据包。(3)、僵尸主机收到目标主机发来的 RST 包,关闭链接不对外发送数据包。此僵尸主机的 IPID 值还是 X。
-
第三步:参考图 3。(1)、攻击者再次向僵尸主机发送 SYN/ACK 确认包(2)、僵尸主机同样向攻击者返回了一个 RST 数据包,此僵尸主机对外发出一个数据包,所以僵尸主机的 IPID 值+1。此时 IPID 值为 X+1。
-
第四步:计算 3 次通信过中的 IPID 值。(1)、攻击者查看僵尸主机返回的数据包中 IPID 值为 X+1。(2)、攻击者对比在第一步中的 IPID 值 X,发现增加了 1。
-
结论:肯定目标主机和僵尸主机没有通信了。没能通信,就说明目标主机端口是关闭的。
- 同理,开发则为X+2
-
-