域控学Scapy

极客

域控学Scapy:从零开始,我用Python玩转了网络协议!

大家好呀!今天想跟你们聊聊我最近折腾的一个东西——域控学Scapy,说实话,一开始听到“域控”和“Scapy”这两个词放一起,我脑子是懵的,域控(域控制器)我懂啊,Windows那套AD环境嘛;Scapy我也听过,Python里发数据包的神器,但这俩咋凑一块儿了?后来自己动手试了试,哎哟,真香!今天就把我这段“域控学Scapy”的心路历程分享给你们,希望能帮到同样在坑里的兄弟。

域控学Scapy

为啥我要在域控环境里学Scapy?

先说说背景吧,我在公司内网做安全测试,域控环境那叫一个复杂——DNS、Kerberos、LDAP、SMB,各种协议满天飞,以前排查问题,要么用Wireshark抓包,要么用nmap扫端口,但总觉得不够灵活,直到有一天,我老大扔给我一句话:“你去试试Scapy,在域控里玩玩。”

我当时心里想:Scapy不是搞TCP/IP底层的吗?域控里那些高层协议它能行?结果一上手,真香警告!Scapy不仅能构造DNS查询、LDAP绑定请求,还能伪造Kerberos票据流量,甚至在域控环境里做ARP欺骗测试,关键是,它用Python写,想怎么改就怎么改,比那些固定工具爽太多了。

域控学Scapy第一步:环境准备

别急着写代码,先把环境搭好,我是在一台Windows Server 2019的域控上装的Python 3.8,然后pip install scapy,注意啊,Windows上装Scapy需要先装Npcap,不然抓包会报错,这个坑我踩过,折腾了半小时才反应过来。

装好之后,打开Python交互界面,输入from scapy.all import *,没报错就稳了,然后你可以试试ls(),会列出一大堆协议层,看到DNS、Kerberos、LDAP这些域控常用的协议都在里面,心里就有底了。

实战:用Scapy在域控里查DNS

域控环境里DNS是核心,没有DNS,域成员找不着域控,那我先用Scapy模拟一个DNS查询试试:

from scapy.all import *
dns_request = IP(dst="192.168.1.10")/UDP(dport=53)/DNS(rd=1, qd=DNSQR(qname="dc01.corp.local"))
response = sr1(dns_request, timeout=2)
if response:
    response.show()

跑完一看,响应里A记录、TTL啥的都出来了,那一刻我激动得拍桌子——原来域控学Scapy这么简单!后来我又试了试DNS动态更新、SRV记录查询,都能用Scapy构造,比起用nslookup,自己写包能控制每个字段,做渗透测试时简直不要太方便。

进阶:Kerberos流量伪造与检测

域控里最刺激的还是Kerberos,我试过用Scapy构造一个AS-REQ包,模拟用户请求TGT,虽然不能真的拿到票据(因为没密码),但可以用来测试域控的Kerberos服务是否正常响应。

更骚的是,你可以用Scapy写个脚本,监听域控的Kerberos流量,然后分析哪些用户在做认证、用的什么加密类型,这对域控安全审计来说,简直是神器,不过提醒一句:别在 production 环境乱搞,我是在自己的实验域里玩的,不然被网管追着打。

域控学Scapy的坑与心得

也不是一帆风顺,Scapy在Windows上抓包性能一般,高并发时容易丢包;还有,域控环境里很多协议是加密的,比如LDAPS,Scapy只能看到密文,所以别指望它万能,它更适合做协议层的构造和测试。

域控学Scapy最好的学习路径我觉得是:先懂域控原理(AD、DNS、Kerberos、LDAP),再学Scapy的包构造语法,最后结合两者做实验,不然你连LDAP的bindRequest长啥样都不知道,Scapy也帮不了你。

最后说两句

好了,这就是我这段“域控学Scapy”的折腾记录,说实话,一开始觉得这俩不搭,现在觉得它们是绝配,如果你也在域控环境里做安全或者运维,真心建议你花点时间学学Scapy,别怕难,从DNS查询开始,一步步来,你会发现——原来网络协议可以这么好玩

有啥问题欢迎留言,我们一起交流,下次我打算用Scapy写个域控ARP监控脚本,到时候再分享哈!

文章版权声明:除非注明,否则均为极客网安-咸鱼原创文章,转载或复制请以超链接形式并注明出处。

目录[+]