Windows 安全基础——Windows WPAD篇
WPAD全称Web Proxy Auto-Discovery Protocol, 也就是Web代理自动发现协议。(这里的代理就是我们在渗透中使用BURP的时候修改的代理设置。)它的作用是让局域网浏览器自动发现内网中的代理服务器,并且自动设置成该代理来连接企业内网或者互联网。
若系统开启了WPAD,那么主机就会在当前连接的局域网中寻找代理服务器,找到之后再代理服务器中下载PAC(Proxy Auto-Config,代理自动配置)文件。这个PAC文件会定义用户在访问什么地址的时候使用什么代理。
1. WPAD实现方式
主机会在当前连接的局域网中自动寻找代理服务器,而它的实现方式主要有两种。
(1)DHCP
在DCHP服务器中,252选项是被用于查询或者注册的指针。可以在DHCP服务器中添加一个用于查找WPAD主机的252选项,内容是部署在WPAD主机上的PAC文件的URL。当客户端Web浏览器要访问某个地址时,Web浏览器会向DHCP服务器发送DHCP INFORM数据包来查询PAC文件的位置, DHCP服务器收到请求后会返回DHCP ACK数据包(其中包含选项和配置列表)进行响应。在这些返回选项中的252选项就是代理自动配置文件的位置,Web浏览器就可以据此执行下载PAC文件请求。下图是以DHCP方式获取PAC的示意图。
目前大多数内网中已经不再使用DHCP服务器来配置客户端的WPAD, 而采用较为简单的DNS服务器方式。
(2)DNS
这种方式是目前使用较为广泛的。通过DNS方式实现WPAD的原理是:先由Web浏览器向DNS服务器发起WPAD+X查询, DNS服务器接收到查询请求后返回提供WPAD主机的IP地址,Web浏览器通过该IP地址的80端口下载wpad.dat(浏览器配置文件)和wspad.dat(防火墙配置用文件)以实现自动配置。例如:用户的计算机网络名称为test.xx.example.com, 浏览器将依次尝试下图中的URL,以期在客户端的域中找到一个代理配置文件。
2. PAC文件内容
PAC文件的最主要作用是控制浏览器如何处理使用HTTP/HTTPS的流量。其实在每个PAC文件中都会有一个FindProxyForURL函数,用来定义Web浏览器是将流量直接发送到Internet还是发送到代理服务器的规则。以下是PAC文件的具体配置内容。
function FindProxyForURL(url, host) {if (shExpMatch(host, "*.example.com")){return "DIRECT";}if (isInNet(host, "10.0.0.0", "255.255.248.0")){return "PROXY fastproxy.example.com:8080";}return "PROXY proxy.example.com:8080; DIRECT";}
1)shExpMatch尝试将主机或URL与指定的shell表达式匹配。如果匹配, 则返回true。
2)isInNet函数判断主机名的IP地址是否在指定的在网内,如果在,则返回true。如过传递了主机名,则该函数会将主机名解析为IP地址。
3)如果在host中匹配到了.example.com,就会返回true。DIRECT的意思是直连,这句话的意思就是:如果访问了.example.com的URL,那么就会直接连接,不通过代理。
4)如果host在指定的IP范围内,那么就会通过代理fastproxy.example.com:8080访问。