主动信息收集

发现——二层发现


• arping

• arping 1.1.1.1 -c 1 (c:count)

• arping 1.1.1.1 -d (d:发现重复的IP地址,不同的MAC)

• 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 1.1.1.1-254 –sn  (sn:ping scan disable port scan)

• nmap -iL iplist.txt -sn  (iL:读取的文件)

发现——二层发现

• Netdiscover

• 主动和被动探测

• 主动


• netdiscover -i eth0 -r 1.1.1.0/24 (r:网络地址段)

• netdiscover -l iplist.txt

• 被动:passive(相当于网卡开启混杂模式)


• netdiscover -p

• 主动arp容易触发报警

发现——二层发现

• Scapy •作为Python库进行调用

    •也可作为单独工具使用

    •抓包、分析、创建、修改、注入网络流量

    • apt-get install python-gnuplot

• scapy

    • ARP().display()

    默认字段(arp包头):hwtype:硬件类型, ptype:协议类型,hwlen:硬件地址长度,plen:协议地址长度,op:option,hwsrc:发送者硬件源地址,psrc:发送IP,hwdst:目标硬件地址,pdst:目标IP。

    定义一个变量例如arp=ARP()并调用函数ARP

    更改字段arp.pdst=“xxx”

    • sr1() (发包) 例如sr1(arp.timeout=1)

• Python脚本

    • Arp1.py

    • Arp2.py

发现——三层发现

• 优点

    • 可路由

    • 速度比较快

• 缺点

    • 速度比二层慢

    • 经常被边界防火墙过滤

• IP、icmp协议

imcp包头,type字段,一共0~15个定义,每种定义为不同包

Type: 8 (Echo (ping) request)

Type: 0 (Echo (ping) reply)

Type: 13 (Timestamp request目标操作系统时间戳)

imcp应用场景:

  • traceroute命令:路由追踪

例如traceroute domain

trace和ping不同,trace会设置ttl值为1,达到目标路由器,将ttl减1,此时ttl为0,路由回包ttl exceeded in transit,后续的icmp包ttl会依次增加1


• ping 1.1.1.1 –c 2

• ping -R 1.1.1.1 / traceroute 1.1.1.1 (R:record route)

• ping 1.1.1.1 -c 1 | grep "bytes from" | cut -d " " -f 4 | cut -d ":" -f 1

• 脚本

    • pinger.sh 1.1.1.0


#! /bin/bash

if [ "$#" -ne 1 ];then

    echo "usage ./pinger.sh [/24 network address]"

    echo "example ./pinger.sh 192.168.1.1"

    echo "example will perform an ICMP ping sweep of the 192.168.1.1/24 network"

exit

fi

prefix=$(echo $1 | cut -d '.' -f 1-3)

for addr in $(seq 1 254);do

    ping -c 1 $prefix.$addr | grep "bytes form" | cut -d "" -f 4 | cut -d "." -f 1 &

  

done

• Scapy

• OSI多层堆叠手工声称ICMP包——IP/ICMP


• ip=IP()

• ip.dst=“1.1.1.1”

• ping=ICMP()

• a=sr1(ip/ping)

• a.display()

• Ping不存在的地址

    • a=sr1(ip/ping,timeout=1)

• a = sr1(IP(dst=“1.1.1.1")/ICMP(),timeout=1)


• nmap -sn 1.1.1.1-255 -sn参数:同一网段发arp包,不同网段发icmp包

• nmap -iL iplist.txt -sn


• fping 1.1.1.1 -c 1

• fping -g 1.1.1.1 1.1.1.2 (g指定起始ip到终止ip)

• 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

发现——四层发现

• 优点

    • 可路由且结果可靠

    • 不太可能被防火墙过滤

    • 甚至可以发现所有端口都被过滤的主机

• 缺点

    • 基于状态过滤的防火墙可能过滤扫描

    • 全端口扫描速度慢

• TCP

    • 未经请求的ACK——RST

    • SYN——SYN/ACK、RST

• UDP

    • icmp端口不可达,一去不复返

• ACK——TCP Port——RST (扫描目标服务器存在端口,服务器返回reset即IP在线)

• Scapy


• i = IP()

• i.dst="1.1.1.1"

• t = TCP()

• t.flags='A'   (A为ACK,R为RST,S为SYN)

• r = (i/t)         (r[IP].dst="xxx"同上)

• a = sr1(r)

• a.display()

• a = sr1(IP(dst="1.1.1.1")/TCP(dport=80,flags='A') ,timeout=1))

TCP包头中dport为目标端口

• ACK_Ping.py

• UDP——UDP Port——ICMP

当目标端口不存在时,服务器返回icmp包头中目标端口不可达,即IP在线。

当IP不存在,则包一去不复返,IP存在且该端口开放,包一去不复返


• u = UDP()

• u.dport= 33333

• r = (i/u)

• a = sr1(r,timeout=1,verbose=1)

• a.display()

• ICMP

• UDP_Ping.py

    • UDP发现不可靠

发现——四层发现

• nmap 1.1.1.1-254 -PU53 -sn (PU:upd 53端口 sn:不做端口扫描,只做主机发现)

• nmap 1.1.1.1-254 -PA80 –sn (PA:ack 80端口)

• nmap -iL iplist.txt -PA80 -sn


• hping3 --udp 1.1.1.1 -c 1

• 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,即IP在线