这个实验是关于网络安全的,我们将使用现有的软件来检查远程机器和本地流量,同时扮演一个 强大的网络攻击者的角色。并且,本次实验使用 Go 语言来完成。
本次实验主要涉及到 nmap、Wireshark、ARP 欺骗、DNS 欺骗和中间人攻击。
Nmap Port Scanning
安装 nmap:
sudo apt install nmap
使用 TCP SYN 扫描。使用 -sS 选项即可。
启用操作系统检测、版本检测、脚本扫描和 traceroute,分别使用 -O -sV -sC -traceroute 选项即可,也可以使用 -A (Aggressive)这一个选项来代替。
执行快速扫描,使用 -T4 选项。
扫描所有端口,使用 -p- 选项。
因此,最终构造的命令如下:
sudo nmap -sS -A -T4 -p- sacnme.nmap.org
该域名对应的 IP 地址为 45.33.49.119,通过下面的结果可以看到:
Starting Nmap 7.80 ( https://nmap.org ) at 2023-05-05 10:49 CST Nmap scan report for sacnme.nmap.org (45.33.49.119) Host is up (0.24s latency). Other addresses for sacnme.nmap.org (not scanned): 2600:3c01:e000:3e6::6d4e:7061
rDNS record(反向 DNS 记录)是一种 DNS 记录,它将 IP 地址映射到域名,可以用于确定一个 IP 地址所属的主机名或域名。在进行网络扫描时,rDNS record 可以帮助识别目标主机的真实身份,从而帮助评估网络风险和制定安全策略。
rDNS record for 45.33.49.119: ack.nmap.org
扫描的结果如下:
Not shown: 65529 filtered ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.4 (protocol 2.0) | ssh-hostkey: | 2048 48:e0:c6:cd:14:00:00:db:b6:b0:3d:f2:0a:2a:3b:6d (RSA) | 256 88:2b:29:00:d0:c7:81:ac:dd:f4:90:42:d2:aa:f0:5b (ECDSA) |_ 256 64:d6:39:35:04:76:1c:ba:17:f3:fd:4f:1f:b3:71:61 (ED25519) 70/tcp closed gopher 80/tcp open http Apache httpd 2.4.6 |_http-server-header: Apache/2.4.6 (CentOS) |_http-title: Did not follow redirect to https://nmap.org/ 113/tcp closed ident 443/tcp open ssl/ssl Apache httpd (SSL-only mode) |_http-server-header: Apache/2.4.6 (CentOS) |_http-title: Did not follow redirect to https://nmap.org/ | ssl-cert: Subject: commonName=insecure.com | Subject Alternative Name: DNS:insecure.com, DNS:insecure.org, DNS:issues.nmap.org, DNS:issues.npcap.org, DNS:nmap.com, DNS:nmap.net, DNS:nmap.org, DNS:npcap.com, DNS:npcap.org, DNS:seclists.com, DNS:seclists.net, DNS:seclists.org, DNS:sectools.com, DNS:sectools.net, DNS:sectools.org, DNS:secwiki.com, DNS:secwiki.net, DNS:secwiki.org, DNS:svn.nmap.org, DNS:www.nmap.org | Not valid before: 2023-04-13T09:03:55 |_Not valid after: 2023-07-12T09:03:54 |_ssl-date: TLS randomness does not represent time 31337/tcp closed Elite
服务器的操作系统信息如下:
Aggressive OS guesses: Linux 2.6.32 - 3.13 (95%), Linux 2.6.22 - 2.6.36 (93%), Linux 3.10 - 4.11 (93%), Linux 2.6.39 (93%), Linux 3.10 (93%), Linux 2.6.32 (92%), Linux 3.2 - 4.9 (92%), Linux 2.6.32 - 3.10 (92%), Linux 2.6.18 (91%), Linux 3.16 - 4.6 (91%) No exact OS matches for host (test conditions non-ideal).
traceroute 结果较长,经过了 21 跳才抵达目标主机。本次扫描花费了 6 分钟左右。
Wireshark Packet Sniffing
服务器对发送到“closed”端口的 SYN 数据包的响应是什么 TCP 数据包类型?
通过 wireshark 抓包后,添加筛选规则 ip.addr == 45.33.49.119 and tcp.port == 70,这里的 ip 地址和 closed 端口通过第一部分就知道了,得到的结果如下:
for mac, count := range arpMac { if count > 5 { fmt.Println(mac) } }
运行结果如下,和实验文档上给的一致:
Monster-in-the-Middle Attack
在本任务中,我们将扮演网络攻击者的角色,诱使受害者的 web 浏览器连接到攻击者的 web 服务器,而不是受害者想要访问的实际网站。通过这样做,攻击者可以执行中间人攻击,在窃取机密信息的过程中,在不被注意的情况下将受害者的请求转发到网站或从网站转发。
要做到这一点,我们伪造 ARP 响应,以欺骗用户将攻击者的设备用作 DNS 服务器。然后,您需要发送一个伪造的 DNS 响应,诱骗用户将主机名 fakebank.com 与攻击者的 IP 地址而不是其真实地址相关联。一旦 DNS 响应被成功欺骗,您将接受受害者的连接,并将所有 HTTP 请求转发到 fakebank.com 的实际网络服务器。
通过 ARP 欺骗,伪装成 DNS 服务器,将用户要访问的 fakebank.com 解析到攻击者的 IP 地址上!
然后实现 HTTP 代码,对攻击用户不可感知。
当用户向 /login 页面发送 POST 请求时,我们窃取用户名和密码后将其转发;
当用户向 /transfer 页面发送 POST 请求时,我们将转账目标方修改为 Jason,再响应时修改回去,欺骗用户;
当用户向 /logout 页面发送 POST 请求时,关闭连接并退出;
当接收到 /kill 页面的请求时,程序退出;
其他请求,窃取 cookie 后原样转发。
首先,我们看 ARP 欺骗部分,首先,使用如下的结构体存储 ARP 包解析数据,这是因为只需要知道源 IP 和 MAC 以及目的 IP 即可,目的 MAC 由我们伪造:
arp := &layers.ARP{ AddrType: layers.LinkTypeEthernet, Protocol: layers.EthernetTypeIPv4, HwAddressSize: 6, // number of bytes in a MAC address ProtAddressSize: 4, // number of bytes in an IPv4 address Operation: 2, // Indicates this is an ARP reply SourceHwAddress: cs155.GetLocalMAC(), SourceProtAddress: intercept.DstProtAddress, DstHwAddress: intercept.SourceHwAddress, DstProtAddress: intercept.SourceProtAddress, } ethernet := &layers.Ethernet{ EthernetType: layers.EthernetTypeARP, SrcMAC: cs155.GetLocalMAC(), DstMAC: intercept.SourceHwAddress, }
// TODO #7: Populate the DNS layer (dns) with your answer that points to the attack web server // Your business-minded friends may have dropped some hints elsewhere in the network!