- 引言
- 主动信息收集
- 信息收集-发现
- 信息收集-端口扫描
- 信息收集-服务扫描
- 信息收集-操作系统识别
- 信息收集-SNMP扫描
- 信息收集-SMB扫描
- 信息收集-SMTP扫描
- 信息收集-防火墙识别
- 信息收集-负载均衡识别
- 信息收集-WAF识别
- NMAP详解
引言
根据苑房弘老师讲的安全牛KALI渗透过程总结
FANGHONG.YUAN@163.COM
主动信息收集
-
原因
通过被动信息收集能了解到公司大概的信息,而且大多信息都是”过时”的信息,不够准确不够真实,所以要用主动信息收集的方式来使信息更准确
-
概念
与目标系统交互通信,不可避免地留下访问痕迹
为了降低被发现的可能性,我们需要使用受控的第三方电脑进行探测:代理-肉鸡
-
方法
或者使用噪声迷惑目标,淹没真实的探测流量(发送大量的垃圾流量,伪造大量虚假ip访问目标系统)
-
扫描
发送不同的探测,根据返回结果判断目标状态
-
信息收集-发现
-
目的
识别活主机,潜在被攻击目标
输出一个IP地址列表
2,3,4层发现
-
层次
主要指OSI七层模型
-
发现–二层发现(链路层ARP)
-
内网发现
-
优点
扫描速度快、可靠
-
缺点
不可以路由,不可以发现路由之外的主机
二层发现—ARPPING(工具)
-
概述
不支持ping一个网段,只能单个,但是可以用脚本实现
-
参数
man arping
查看详细解释 -
流程
-
例
arping x.x.x.x
#不停地发起pingarping x.x.x.x -c x
#发送x个包到指定地址arping 192.168.1.1 -d
#发现重复IP的MAC地址,发现ARP欺骗行为,一个IP地址有两个响应包arping 1.1.1.1 -c 1|grep"bytes from"|cut -d" " -f 5|cut -d"(" -f 2|cut -d")" -f 1|
ping一个包,匹配bytes from
字段,然后我们只需要ip地址,所以使用分割命令,分别进行取第五列、第二列、第一列最终得到IP地址 -
脚本
#!/bin/bash interface=$1 prefix=$(ifconfig $interface | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 |cut -d '.' -f 1-3) for addr in $(seq 1 254);do arping -c 1 $prefix.$addr |grep"bytes from"|cut -d" " -f 5|cut -d"(" -f 2|cut -d")" -f 1 >> addr.txt done
file=$i for addr in $(cat $file);do arping -c l $addr|grep "bytes from"|cut -d " " -f 5 |cut -d "(" -f 2 | cut -d ")" -f 1 done
二层发现—NMAP(工具简介)
-
简介
可以实现整个地址段的扫描。并且有很多强大的功能,甚至可以通过结合脚本实现漏洞扫描功能
-
参数
-sn #Ping Scan只做主机发现 -iL xx.txt -sn #通过文件导入要扫描的段
二层发现—Netdiscover(工具)
-
简介
专用于二层发现的工具,可用于无线和交换网络环境,并且用于主动和被动探测
-
原理
-
主动:
发送arp包,判断响应
-
被动:
保持侦听模式,混杂网卡模式,记录听到的arp包
-
-
用法
netdiscover -i eth0 -r 192.168.1.0/24
netdiscover -l iplissst.txt
#读列表netdiscover -p
#开启侦听模式
二层发现—Scapy(强大工具)
-
简介
- 可以作为python库文件被调用
- 也可以直接作为工具使用
- 抓包、分析、创建、修改、注入网络流量
-
用法
apt-get install python-gnuplot scapy#进入Scapy程序接口 ARP().display() arp=ARP() #创建一个新名字 arp.display() arp.pdst="192.168.1.1" #赋值 sr1(arp) #发送包 answer=sr1(arp) #变量赋值 answer.display()
-
脚本
发现–三层发现(TCP/IP)
-
优点
- 可路由
- 速度比较快
-
缺点
- 速度比二层慢
- 经常被边界防火墙过滤
-
IP、ICMP协议
三层发现—Ping(命令)
-
概述
-
参数
-c#指定ping包个数
-
注意
traceroute
返回离请求主机比较近的接口的IP地址ping -R
返回离请求主机比较远,离被请求主机较近的路由接口的IP地址
三层发现—Scapy(工具)
-
eg
sr1(IP(dst=’192.168.1.1’)/ICMP())
三层发现—Nmap(工具)
-
特征
nmap除了icmp包还会发DNS包尝试解析域名查记录
三层发现—fping(工具)
-
使用
• fping 1.1.1.1 -c 1 • fping -g 1.1.1.1 1.1.1.2 • fping -g 1.1.1.0/24 • fping -f iplist.txt
三层发现—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包回应(目标在线)
- SYN————SYN/ACK、RST
-
UDP
- ICMP端口不可达、一去不复返
四层发现—nmap(工具)
-
用法
- nmap 1.1.1.1-254 -PU53 -sn#UDP扫描,sn只主机发现不端口扫描
- nmap 1.1.1.1-254 -PA80 -sn
- nmap -iL xxx.txt -PA80 -sn
-
tips
-
扫描方法
-PU扫描两遍判断是否在线 -PA发送ACK包检测RST包检测是否在线
-
四层发现—hping(工具)
-
用法
- hping3 –udp 1.1.1.1 -c 1 ```s for addr in $(seq 1 254); do hping3 –udp 1.1.1.$addr -c 1 » r.txt; done
grep Unreachable r.txt | cut -d “ “ -f 5 | cut -d “=” -f 2 ```
- ./udp_hping.sh 1.1.1.0
- hping3 1.1.1.1 -c 1 (TCP)
- Hping3 1.1.1.1
- ./TCP_hping.sh
- Flag 0 —— ACK̵RST
-
特点
-
判断方法
所有的标志位都是0,发送的包是FLAG 0,如果对应机器发送ACK,RST的话就判断是在线的
-
信息收集-端口扫描
-
概述
通过前一发现阶段已经找到活动主机,现在就针对活动主机进行进一步的更具体的端口扫描
-
目的
- 发现端口对应网络服务及应用端程序
- 找到服务端程序的漏洞通过端口攻入
- 发现开放的端口
- 更具体的攻击面
端口扫描–UDP端口扫描
-
方法
向目标ID端口发送一个包,如果返回端口不可达证明端口没开
因为是活着的主机,所以端口只有两种状态(开着、关闭)
开放的端口会有回馈
-
特点
- 准确性高
- 耗时巨大(其实TCP耗时更大)
UDP端口扫描—Scapy
-
用法
#!/usr/bin/python import logging logging.getLogger("scapy.runtime").setLevel(logging.ERROR) from scapy.all import * import time import sys if len(sys.argv)!=4: print "Usage - ./udp scan.py [Target-IP] [First Port] [Last port]" sys.exit() ip=sys.argv[1] start=int(sys.argv[2]) end=int(sys.argv[3]) for port i range(start,end) a=sr1(IP(dst=ip)/UDP(dport=dport),timeout=5,verbose=0) time.sleep(1)#等待包发送完成 if a ==None: print port#没收到响应证明开着 else: pass#响应了代表不可达(发送了端口不可达消息),就pass掉
-
示例
chmod u+x syn_scan.py ./ udp_scan.py 192.168.1.1 1 100#扫描从1-100端口
UDP端口扫描—Nmap
-
简介
Nmap默认扫描1000个端口 原理还是基于ICMP host-unreach信息(端口不可达)
-
用法
nmap 1.1.1.1 -sU -p 53 nmap -iL iplist.txt -sU -p 1-200 #指定地址范围、端口范围 nmap 1.1.1.1 -p-#一横杠代表所有端口
端口扫描–TCP端口扫描
-
简介
- 基于连接的协议扫描
- 连接例子:三次握手
-
隐蔽扫描:
大流量连接会触发安全机制
不建立完整连接->不产生应用层访问日志、只在网络层有迹象可循
-
僵尸扫描:使用python脚本nmap实现,几乎不产生直接会话,就可以判断,极其隐蔽,但是前提苛刻,不适用于所有情况
-
全连接:完成三次握手
- 所有的TCP扫描都是基于三次握手的变化来判断目标端口的状态
TCP端口扫描—隐蔽扫描
-
不建立完整连接
SYN扫描:SYN-SYN/ACK-RST
应用层无迹象,但是网络层有流量
Scapy实现
- 演示
```s
scapy>>
a=sr1(IP(dst="192.168.197.142")/TCP(flags="S"),timeout=1,verbose=0)#向目标主机发送一个SYN包并赋值给1
#一共返回三个包,第一个是SYN,第二个是收到的SYN/ACK,第三个是操作系统不知道scapy发送包收到一个没来由的包,自动发送RST包
```
-
脚本
#!/usr/bin/python import logging logging.getLogger("scapy.runtime").setLevel(logging.ERROR) from scapy.all import * import time import sys if len(sys.argv)!=4: print "Usage - ./udp scan.py [Target-IP] [First Port] [Last port]" print "Example - ./syn_scan.py 10.0.0.5 1 100" print "Example will TCP SYN scan ports 1 through 100 on 10.0.0.5" sys.exit() ip=sys.argv[1] start=int(sys.argv[2]) end=int(sys.argv[3]) for port in range(start,end): a=sr1(IP(dst=ip)/TCP(dport=port),timeout=1,verbose=0) if a== None: pass else: if int(a[TCP].flags)==18:#ACK+SYN符号位(查看数据包中符号位Flags 0 2 4 8 16就可以知道)二进制等于18,就是返回SYN+ACK print port else: pass
chmod u+x syn_scan.py
遇到的小问题
- from scapy.all import *报错,重新用pip或者pip3导入一下scapy
- Defaulting to user installation because normal site-packages is not writeable
[参见](https://blog.csdn.net/sandalphon4869/article/details/107693774) pip install xxx pip3 install xxx 改成⬇ python -m pip install xxx python3 -m pip install xxx
nmap 实现
- 用法
```s
namp -sS 1.1.1.1 -p 80,21,25,110,443
nmap -sS 1.1.1.1 -p 1-65535 --open
nmap -sS 1.1.1.1 -p- --open
nmap -sS -iL iplist.txt -p 80,21,22,23
#-sS就是SYN扫描
```
hping 实现
-
用法
hping3 1.1.1.1 --scan 80 -S hping3 1.1.1.1 --scan 80,21,25,443 -S hping3 1.1.1.1 --scan 0-65535 -S hping3 -c 10 -S --spoof 1.1.1.2 -p ++1 1.1.1.3#地址欺骗,每次端口号每次加一,扫描十个端口
TCP端口扫描—僵尸扫描
-
极度隐蔽
-
实施条件苛刻
-
源地址伪造
扫描发起方和被扫描方的地址必须是可以伪造的 (现在互联网环境源地址伪造很难)
-
必须要有僵尸机
僵尸机
:在互联网中闲置,IPID必须是递增的,不可以是随机IPID, (就是说接收到IP包之后回应的时候IPID的值是递增的,不是随便给一个值)IPID
:流量包中IP头中的ID字段(Identification) -
必须足够闲置
有一点ARP等低层的数据可以,但是不能有其他连接导致IPID发生改变
-
-
实现过程
目标端口开放
- 发一个SYN/ACK给僵尸机,僵尸机返回一个RST包
(IPID=X)
- 扫描者向一个服务器发送一个SYN包(IP.SRC=Zombie)
- 僵尸机收到服务器返回的一个SYN/ACK
-
僵尸机返回服务器一个RST
(IPID=X+1)
#因为这是闲置僵尸机收到的第二个包 -
扫描者再向僵尸机发送一个SYN/ACK,僵尸机返回RST包
(IPID=X+2)
- 此时就可以做出判断,对应端口是开放的,因为这是僵尸机返回的第三个包
目标端口不开放
- 伪造IP发送SYN之后,服务器返回僵尸机一个RST包
- 僵尸机收到RST无动作
- 这时候如果攻击者再向僵尸机发送一个SYN/ACK,僵尸机返回的RST就会是
(IPID=X+1)
- 发一个SYN/ACK给僵尸机,僵尸机返回一个RST包
-
实现脚本
Scapy实现
#Scapy--zombie.py i=IP() t=TCP() rz=(i/t)#僵尸机包 rt=(i/t)#服务器包 rz[IP].dst=IPz#僵尸机地址 rz[TCP].dport=445 rz[TCP].flags="SA"#将返回RST rt[IP].src=IPz#地址伪造 rt[IP].dst=IPt rt[TCP].flags="S"#将向僵尸机发SA,僵尸机返回RST rt[TCP].dport=22 az1=sr1(rz) && at=sr1(rt) && az2=sr1(rz) az1.display() | az2.display()
#!/usr/bin/pythonn import logging logging.getLogger("scapy.runtime").setLevel(logging.ERROR) from scapy.all import * def ipid(zombie): replay1=sr1(IP(dst=zombie)/TCP(flags="SA"),timeout=2,verbose=0) send(IP(dst=zombie)/TCP(flags="SA"),verbose=0) replay2=sr1(IP(dt=zombie)/TCP(flags="SA"),timeout=2,verbose=0) if replay2[IP].id==(replay1[IP].id+2): print "IPID sequence is incremental and target appears to be idle.ZOMBIE LOCATED" response=raw_input("Do you want to use this zombie to perfore a scan?(Y or N):") if response=="Y": target=raw_input("Enterr the IP address of the target system:") zombiescan(target.zombie) else: print "Either the IPID sequence is not incremental or the target is not idle.NOT A GOOD ZOMBIE" def zombiescan(target,zombie): print "\nScanning target"+target+"with zombie"+zombie print"\n---------openn ports on target--------\n" for port in range(1,100): try: start_val=sr1(IP(dst=zombie)/TCP(flags="SA",dport=port),timeout=2,verbose=0) send(IP(src=zombie,dst=target)/TCP(flags="S",dport=port),verbose=0) end_val=sr1(IP(dst=zombie)/TCP(flags="SA",dport=port),timeout=2,verbose=0) if end_val[IP].id==(start_val[IP].id+2): print port except: pass print "------Zombie Scan Suite-------\n" print"1- Identify Zomie Host\n" print"2- Perform Zombie Scan\n" ans=raw_input("Select an Option(1 or 2):") if ans =="1": zomie=raw_input("Enter IP address to test IPID sequence:") ipid(zombie) else: if ans=="2": zombie=raw_input("Enter IP address for zombie system:") target=raw_input("Enter IP address for scan target:") zombiescan(target,zombie)
nmap 实现
-
发现僵尸机
nmap -p445 192.168.197.142 --script=ipidseq.nse
#nmap里面有很多脚本可以用 -
扫描目标
nmap 192.168.197.142 -sI 192.168.197.132 -Pn -p 0-100
TCP端口扫描—全连接端口扫描
-
简介
-
非常规扫描方式,只是在特殊情才会使用,因为不隐蔽
- Syn扫描不需要 raw packages
- 但是实现有一个小问题,内核认为syn/ack是异常包,会直接发RST终止,导致连接不能建立。
-
Scapy实现
- 脚本
```python
#!/usr/bin/python
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
import time
import sys
SYN=IP(dst="192.168.197.142")/TCP(dport=25,flags="S")
print "--SENT--"
SYN.display()
print "\n\n--RECIVED--"
response=sr1(SYN,timeout=1,verbose=0)
response.display()
if int(response[TCP].flags)==18:
print"\n\n--SENT--"
A=IP(dst=192.168.197.142)/TCP(dport=25,flags="A",ack=(response[TCP].seq+1))
A.display()
print"\n\n--RECIVED--"
response2=sr1(A,timeout=1,verbose=0)
response2.display()
else
print"SYN-ACK not returned"
```
-
解决问题方法
-
iptables
iptables在内核之前,所有的包经过iptables检测,所以我们现在设置让其对收到指定IP发送的包后对发出的RST包进行DROP
iptables -A OUTPUT -p tcp --tcp- flags RST RST -d 192.168.197.142 -j DROP
iptables -L
查看规则
-
namp 实现
-
简介
-sT就是TCP全连接方式 比隐蔽方式慢于SYN扫描
-
用法
nmap -sT 1.1.1.1 -p 80 nmap -sT 1.1.1.1 -p 80 nmap -sT 1.1.1.1 -p 80,21,25 nmap -sT 1.1.1.1 -p 80-2000 nmap -sT -iL iplist.txt -p 80 #默认1000个常用端口
其他方法实现
-
dmitry
-
简介
-h
功能简单,但使用简便,参数很少 默认150个最常用端口 -
用法
dmitry -p 192.168.197.142
dmitry -p 192.168.197.142 -o output
-
-
nc
-
简介
nc -z
实现扫描功能 -
用法
nc -nv -w 1 -z 192.168.197.142 1-100
#-v表示详细内容 #-n表示后面跟数字,不做域名解析 #-w表示超时1s pass #端口号
for x in $(seq 20 30); do nc -nv -w 1 -z 1.1.1.1 $x;done|grep open for x in $(seq 1 254); do nc -nv -w 1 -z 1.1.1.$x 80; done
-
信息收集-服务扫描
-
简介
-
识别开放端口上运行的应用
之前的发现技术可以扫描到有哪些主机活跃,开放了哪些端口,但是不能通过端口号识别其后开放的应用,因为应用可以开放在不同平常的端口
-
识别目标操作系统
操作系统的漏洞
-
-
方向
-
banner捕获
但是banner很可能是伪造的用来迷惑攻击者的,通常有改banner的要求
-
服务识别
通过应用指纹信息识别
- 操作系统识别
-
SNMP
SNMP服务配置不当
-
防火墙识别
识别边界防火墙,有利于绕过
-
服务扫描–BANNER捕获
-
BANNER信息
-
软件开发商
apache、microsoft
- 软件名称
- 服务类型
-
版本号
直接发现已知漏洞和弱点
- 连接建立之后直接获取banner
-
另类服务识别方法
特征行为和响应字段 不同的响应可用于识别底层操作系统
-
-
SNMP
- 简单网络管理协议
-
community string
默认密码、默认认证信息
-
信息查询或者重新配置
知道可读可写密码之后就可以查交换机配置,有写权限可以对交换机配置进行修改
-
识别和绕过防火墙筛选
banner捕获—nc
-
nc
nc -nv 192.168.197.142 25#连接对应端口获取信息,连接成功就会显示 nc -nv 192.168.197.142 80
banner捕获—python
-
python
python socket ```python import socket bangrab=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#TCP连接 bangrab.connect(“192.168.197.142”,21) bangrab.recv(4096)#接收数据大小 bangrab.close() exit() #如果BANNER不允许抓取,recv函数无返回将挂起
>python脚本2 ```python #!/usr/bin/python import socket import select import sys if len(sys.argv)!=4: print"Usage - ./banner_grab.py [target IP] [First port] [Last port]" sys.exit() ip=sys.argv[1] start=int(sys.argv[2]) end=int(sys.argv[3]) for port in range(start,end): try: bangrab=socket.socket(socket.AF_INET,socket.SOCKET_STREAM) bangrab.connect(ip.port) ready=select.select([bangrab],[],[],1) if ready[0]:#表示没有被挂起 print "TCP Port"+str(port)+"-"bangrab.recv(4096) bangrab.close() except: pass
banner捕获—dimitry
-
dmitry
dimitry -p 192.168.197.142
dimitry -pb 192.168.197.142
banner捕获—nmap
-
nmap
nmap -sT 192.168.197.142 -p 22 --script=banner.nse
banner捕获—amap
-
简介
专门开发用来发现服务的工具,-B参数就是用banner方式发现
-
amap
amap -B 192.168.197.142 21 amap -B 192.168.197.142 1-65535 amap -B 192.168.197.142 1-65535 |grep on#寻找开放的
服务扫描–服务识别
-
简介
用banner信息抓取能力有限,并且不准确
服务识别—工具
———–nmap————-
- 原理
根据*特征*进行分析,根据相应特征signature
-
实现
nmap 192.168.197.142 -p 1-100 -sV
———–nc—————
-
实现
nc -nv 192.168.197.142 80
———-amap———–
-
实现
amap 192.168.197.142 80 amap 192.168.197.142 20-30 amap 192.168.197.142 20-30 -q amap 192.168.197.142 20-30 -qb
信息收集-操作系统识别
-
简介
操作系统识别技术种类繁多,要采用多种技术产品组合
识别操作系统有利于直接使用操作系统漏洞攻击
-
TTL起始值
windows
:128(65-128)linux/unix
:64(1-64)某些Unix
:255 -
被动操作系统识别
向被扫者发包,抓包结合特征分析 基于网络监听
操作系统识别—工具
-
python
from scapy.all import * win="win.ip" linu="linux.ip" aw=sr1(IP(dst=win)/ICMP()) al=sr1(IP(dst=linu)/ICMP()) if al[IP].ttl<=64: print "host is linux" else: print "host is linux"
-
nmap
nmap 192.168.197.142 -O#OS识别
-
xprobe2
xprobe 192.168.197.142
但是xprobe结果有误差,不精准
-
p0f
被动式扫描
部署在网络出口处,持续监听
* 结合ARP地址欺骗识别全网OS
信息收集-SNMP扫描
-
简介
UDP端口 161(被管理端)(服务端) 162(客户端)
SNMP–简单网络管理协议,当网络初具规模,使用人工方法检测耗时耗力,所以采用SNMP对网络进行统一管理,通过SNMP可以监控交换机、服务器、了解网络情况、网络通信情况
经常被错误配置
有一串community特征字符,相当于密码
public / private / manager
明文传输
-
MIB Tree
SNMP Management Information Base(MIB)
被检测内容都有自己的编号,通过编号查找对应运行情况
有必须遵守的MIB库,也有厂家自己加的MIB库
SNMP扫描—工具
-
onesixtyone(161)
名字用的就是其端口161
-
用法
onesixtyone 1.1.1.1 public onesixtyone -c dict.txt -i hosts -o my.log -w 100
-
tips
dpkg -L onsixtyone
#查看软件包内容
-
-
snmpwalk
-
更加全面
-
用法
snmpwalk 192.168.197.142 -c public -v 2c 1.1.1.1 1.3.6.1.4.1.77.1.2.25#-v是版本 1 2c 3 如果知道具体OID就输入,上面查当前系统账号 查出来的结果开头都是各项信息的OID
-
-
snmpcheck
-
简介
可读性更好
-
用法
snmpcheck -t 192.168.197.142 snmpcheck -t 192.168.197.142 -c private -v 2 snmpcheck -t 192.168.197.142 -w#检测可写权限
-
信息收集-SMB扫描
-
简介
Server Message Block协议(服务信息块)
-
是微软历史上出现安全问题最多的最最常用的协议
-
该服务默认开放
-
实现文件共享
-
空会话未身份认证访问(SMB1)
无需账号密码直接登录,获取SID
-
SMB扫描–工具
-
nmap
https://www.cnblogs.com/demonxian3/p/8528050.html smb-vuln-check.nse已经被取消换成了六个不同种类的漏洞验证脚本,如果不确定执行哪一个可以使用
smb-vuln-*.nse
nmap -v -p139,445 192.168.60.1-20 nmap 192.168.60.4 -p139,445 --script=smb-os-discovery.nse nmap -v -p139,445 --script=smb-check-vulns --scripart-gs=unsafe=1 1.1.1.1#向脚本传输参数,可能会造成破坏,但是更加精准
-
脚本介绍
脚本里面都有脚本内容的说明与解释,如果不知道脚本作用以及如何使用,可以直接打开脚本查看其内容
-
-
nbtscan
nbtscan -r 192.168.197.0/24
-
优点
能扫到另外网段的机器,防火墙过滤不严格能跨网段扫描,正常的arp到路由会被丢弃
-
-
enum4linux
enum4linux -a 192.168.197.142
-
特点
不支持大网段扫描,但是对单个机器进行扫描非常精准
-
信息收集-SMTP扫描
-
简介
主要用来发现目标系统的邮箱账号,对邮件服务器发现账号
账号用途主要就是社会工程学
一旦邮件服务器被攻陷,将被利用给其他人发送大量的垃圾邮件钓鱼邮件
-
使用
VRFY root
nmap smtp.163.com -p25 --script=smtp-enum-users.nse --script-args=smtp-enumusers.methods={VRFY}#对25端口检测 查root账户 nmap smtp.163.com -p25 --script=smtp-open-relay.nse#一旦打开openrelay服务,将被利用给其他人发送大量的垃圾邮件钓鱼邮件 smtp-user-enum -M VRFY -U users.txt -t 10.0.0.1#指定对应的账号进行查找
-
脚本
#!/usr/bin/python import socket import sys if len(sys.argv)!=2: print"Usage:smtp.py <username>" sys.exit(0) s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) connect=s.connect(('开放25的目标机器',25)) banner=s.recv(1024) print banner+"aaaaaa" s.send('VRFY'+sys.argv[1]+'\r\n') result=s.recv(1024) print result s.close()
信息收集-防火墙识别
-
简介
网络边界一般都有防火墙,要对防火墙进行识别其过滤端口,防火墙只允许向外连接不允许向内连接
-
四种防火墙规则
Send Response Type 1 SYN NO Filtered ACK RST Filtered 2 SYN SYN+ACK/SYN+RST Filtered ACK NO Filtered 3 SYN SYN+ACK/SYN+RST Unfiltered/Open ACK RST Unfiltered/Open 4 SYN NO CLOSED ACK NO CLOSED -
识别
nmap -sA 192.168.197.142
#发syn ack
信息收集-负载均衡识别
-
简介
-
广域网负载均衡
DNS,一个域名对应多个IP
-
HTTP-Loadbalacing(服务器负载均衡)
Nginx
Apache
-
-
工具
lbd(load balace detect)#负载均衡检测
lbd www.baidu.com
信息收集-WAF识别
-
WEB应用防火墙
主要是防护WEB层攻击
-
工具
wafw00f
wafw00f -l#查看能识别的WAF wafw00f http://www.microsoft.com
nmap
nmap www.microsoft.com --script=http-waf-detect.nse
NMAP详解
目标发现
-
-iL
把所有目标地址存成一个文件,然后使用这个文本进行目标确定扫描
-
-iR
无需指定目标,nmap会根据参数后跟的主机数随机扫描主机
nmap -iR 100 -p 22#随即扫100个地址的22端口
-
–exclude
一个段中的一些ip地址不想扫,用这个参数排除
namp 192.168.197.0/24 --exclude 192.168.197.1-100#扫除了地址为1-100的该网段地址
-
–excludefile
把要排除的地址写一个文件,然后直接–excludefile xxx.txt排除
主机发现
-
-sL
不做扫描,只是列出地址段,让你检查是否是这些目标
-
-sn
不做端口扫描
-
-Pn
有些目标机器会丢包或者拒绝,默认扫描可能视为down,这个参数会将所有该扫的都扫,最后判断是否是目标
-
-PS/PA/PU/PY[portlist]
PS/PA—TCP SYN/ACK PU—UDP PY—SCTP
-
-PE/PP/PM
ICMP timestamp 时间戳 netmask 查子网掩码
-
-PO
IP 协议ping扫描
-
-n/-R
不做DNS解析/做反向解析
-
–dns-servers
扫描的时候调用一个DNS扫描目标,因为目标网站可能有智能DNS,加这个参数调用其他dns扫描
-
–dns-system
用本地机器的dns
-
–traceroute
返回路径上路由
nmap www.baidu.com --traceroute -p 80
端口发现(Scan techniques)
-
-sS/sT/sA/sW/sM
SYN扫描/完整TCP扫描/ACK扫描/TCP窗口扫描/Maimon 扫描(ACK+Finish:17)
不同的flag组合扫描
-
-sU
UDP扫描
-
-sN/sF/sX
TCP flag标志位全空/flag FIN/Xmas scans
Xmas(FIN+PUSH+URG)
-
–scanflags
自定义标志位发送,必须是能知道
-
-sI
僵尸扫描
-
-sY/sZ
SCTP协议扫描
-
-sO
IP扫描
-
-b
FTP中继扫描
PORT SPECIFICATION AND SCAN ORDER
指定扫描端口
-
-p
-p U:53 192.168.197.142
UDP扫描端口-p T:80 192.168.197.142
TCP端口扫描–exclude 排除某些端口
-
-F
快速模式,扫少数端口,默认模式100个,快速模式少于1000个
-
-r
按顺序扫描端口,默认情况是随机扫描的
-
–top-ports [number]
扫最常用的n个端口
-
–port-ratio
扫使用率大于ratio的端口
服务侦测
-
-sV
-
–version-intensity <0-9>
扫描深入程度,数字越大越深,0–light,9–all ports
-
–version-light
轻量级扫描,相当于上面的2等级
-
–version-all
相当于9等级
-
–version-trace
跟踪扫描过程
-
脚本扫描
-
-sC(相当于–script)
-
–script=
选择脚本
-
–script-args=<n1=v1,[n2,n3,…]>
向脚本提供参数
-
–script-args-file=filname
从一个文件读取NSE脚本参数
-
–script-trace
显示脚本发送的数据和收到的数据
-
–script-updatedb
更新脚本库
-
–script-help=
查看脚本使用方法
/usr/share/nmap/scripts/#脚本存放目录
系统识别
-
-O
-
–osscan-limit
限制OS检测
-
–osscan-guess
更进一步猜测是什么操作系统
-
时间性能和特征
扫描时间过快或者有特征会暴露
-
-T<0-5>
-
–min-hostgroup/max-hostgroup
最小或者最大扫描并行组,同时扫多少机器
-
–min-parallelism/max-parallelism
探针?
-
–min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout
最大,最小,初始rtt时间,每一轮发送的响应时间值(从开始到收到response)
-
–max-retries
最大探测次数
-
–host-timeout
目标主机超时时间
-
–scan-delay/–max-scan-delay
每次探测间隔多少
-
–min-rate
每秒探测最小多少
-
–max-rate
每秒探测最大多少
-
防火墙和IDS躲避与欺骗
-
-f
-
–mtu
设置最大传输单元
-
-
-D <decpy1,…>
伪造源地址,增加噪声地址,混杂数据
nmap -D 192.168.1.11,192.168.1.12,192.168.1.141 192.168.197.142#用三个地址向142地址发数据包
-
-S
欺骗源地址
nmap -S 192.168.197.11 -e eth0 192.168.197.142#伪造源地址扫描
-
-e
指定网卡
-
-g/–source-port
指定发包源端口
nmap -g 10000 192.168.197.142#用10000端口发包
-
–proxies <url1,url2,…>
支持代理,指定代理服务器,用它进行扫描
-
–data
通常扫描data无数据,用该参数给数据字段加十六进制内容
nmap -p 22 192.168.197.142 --data=FFFFFF
-
–data-string
data加ascii码
-
–data-length
在数据字段加指定字长的随机内容
-
–ip-options
自定义数据包头内容
-
–ttl
设定ttl值
-
–spoof-mac <mac address/prefix/vendor name>
欺骗mac地址
-
–badsum
差错校验(checksum)值造成错误的,通过不同设备处理badchecksum方法不同来欺骗防火墙和IDS达到放过目的
杂项
-
-6
扫IPv6地址
-
-A
代表OS detection(操作系统识别)、version detection(版本识别)、script scanning、traceroute参数的组合,直接全包含