简介:一份聚焦Kali渗透测试实操的教程资料包,面向网络安全入门及中级学习者,覆盖局域网渗透与Web渗透典型场景。内容从arpspoof断网攻击、流量转发,到结合driftnet截取目标主机浏览图片、借助ettercap嗅探HTTP账号密码,再到基于sslstrip获取HTTPS账号密码、metasploit基础使用与sqlmap注入ASP/PHP程序的cookie注入等,由内网到Web逐步展开。压缩包共20个文件,核心为14个Markdown笔记,另有2个txt说明、yml配置、json与png示意图,整体仅106KB,便携可读。目录按工具分模块,arpspoof、metasploit、sqlmap各含README及分步命令笔记,适合按需查阅。目前已有519人学习下载,适合希望通过命令级笔记快速上手Kali渗透、理解常见攻击链路与关键操作思路的读者。
1. 这套Kali渗透测试教程:从arp欺骗到sqlmap注入的三条主线
拿到这套名为《Kali渗透测试教程,Kali渗透测试指南,Kali渗透测试详解》的资源包时,我翻了一下文件目录,发现它不是那种堆了一堆视频链接的骗点击资源,而是按工具拆好的Markdown文档:arpspoof、sqlmap、metasploit各成一个目录,每个目录里再按攻击场景拆成独立文件——比如arpspoof一个工具就拆了断网攻击、流量转发、图片截取、账号密码嗅探四个场景。对想入门Kali渗透测试的人来说,这种按场景组织的内容比按命令组织的好学得多,因为你能直接照着一篇文档复现一次完整攻击。本文把这三条主线拆开讲,涉及的命令都能在Kali自带终端里跑,适合刚装好Kali、想走一遍局域网内攻击流程的初学者,也适合想快速捡回某个工具用法的从业者。
2. arpspoof断网攻击与流量转发:先看懂链路再敲命令
2.1 arpspoof断网攻击:局域网内欺骗的第一步
arpspoof是dsniff套件里最常用的一个工具,原理一句话就能说清:ARP协议本身不校验身份,攻击机向目标主机发送伪造的ARP应答包,告诉它“网关的MAC地址是攻击机的MAC”,目标就把发往外网的数据包全部交给了攻击机。如果攻击机不转发,目标就断网;如果开了转发,攻击机的网卡就变成了一个天然的流量观测点。
在Kali里执行断网攻击,命令比想象中短:
arpspoof -i eth0 -t 192.168.1.3 192.168.1.100这条命令的参数拆开看:-i eth0指定使用eth0这块网卡;-t 192.168.1.3 192.168.1.100是target参数,前半段192.168.1.3是受害主机IP,后半段192.168.1.100是网关IP。语义就是“向192.168.1.3宣称我是192.168.1.100”,受害主机从此把发往网关的流量全部投递到攻击机。教程文档001.arpspoof断网攻击.md里把这条命令单独拎出来讲是合理的,因为它确实是全部arp欺骗的起点,后续的转发、嗅探、会话劫持全都建立在“让目标把攻击机当作网关”这个前提上。
有个细节需要留意:如果直接跑上面这条命令,攻击机不会转发流量,目标的网络会立刻瘫痪——没有开转发时的正常表现。想长期观测流量,就得配合下一节的内核转发开关。
实践中的常见做法是用-t做双向欺骗:同时对目标宣称自己是网关、对网关宣称自己是目标,这样目标发出去和收进来的流量都会经过攻击机。不过入门阶段先跑单条命令,确认目标断网、再恢复,能更快理解ARP欺骗的作用方向。
2.2 开启IP转发:arpspoof从断网到流量中继
断网攻击的效果立竿见影,但它只是“拒绝服务”,不是渗透。要让流量流经攻击机的同时目标还能正常上网,需要把Linux内核的IPv4转发功能打开。这一步教程里写得很清楚,就一条命令:
echo 1 > /proc/sys/net/ipv4/ip_forwardecho 1是往/proc/sys/net/ipv4/ip_forward这个虚拟文件写入数字1,表示开启转发;如果写0就是关闭。这个配置在重启后会重置为默认值(通常是0,即不转发),所以每次实验前都要先确认这个开关的状态,查看方式是cat /proc/sys/net/ipv4/ip_forward,输出1说明已开启、输出0说明没开。
开启转发后再执行ARP欺骗,目标主机的流量会经过攻击机但不会断网,此时攻击机相当于一条透明的链路。验证链路是否打通有个很直接的办法:在攻击机上用tcpdump -i eth0 host 192.168.1.3抓包,然后让目标主机访问任意网页,如果tcpdump持续刷出目标IP的流量,说明数据正在流经你的网卡——这个判断点是我后来排查问题时最常看的一个信号。
教程文档002.arpspoof流量转发.md里把这两条命令放在一起是有原因的:echo开转发和arpspoof发欺骗,是后续所有arp类攻击的基础前置,少了任何一条,后面的截取图片、抓账号密码都会跑空。我一般会把这两条命令写在同一个脚本里,中间加一个2秒的sleep,让ARP欺骗的生效有一个缓冲时间。
3. 嗅探进阶:driftnet截取图片与ettercap抓取HTTP账号密码的完整链路
3.1 driftnet截取目标主机浏览的图片:流量里的图片数据
Arp欺骗把目标流量引到攻击机之后,流量是二进制流,人没法直接看懂。driftnet干的活就是从这些二进制流里把图片数据剥离出来——它监听经过网卡的数据包,识别JPEG、PNG、GIF等图片格式的文件头特征,重组后展示或保存。教程文档003.arpspoof+driftnet截取目标主机浏览的图片.md给的命令顺序是:
echo 1 > /proc/sys/net/ipv4/ip_forward arpspoof -i eth0 -t 192.168.1.3 192.168.1.1第一行开IP转发,第二行做ARP欺骗。这里的192.168.1.1是网关IP,目标IP是192.168.1.3。欺骗生效后另开一个终端,启动driftnet:
driftnet -i eth0-i eth0指定监听网卡。driftnet运行时会在当前目录自动生成一个driftnet文件夹,把截到的图片按编号存进去,同时弹出一个X11窗口实时展示新截到的图片。如果是无桌面环境的Kali,运行前可能要加-b参数指定图片保存目录,或者用-a后跟目录名。
这个工具的实战效果依赖一个前提:目标主机得在浏览包含图片的网页。HTTP明文协议的图片能直接截到,但HTTPS加密流量里的图片driftnet是看不到的——这是很多新手跑完发现一张图都截不到的第一个原因。我会在教程的基础上加一个提示:先让目标访问一个纯HTTP站点(比如http的测试站),确认driftnet能出图,再往真实场景迁移。
3.2 ettercap解析HTTP账号密码:从抓包到过滤规则
arp欺骗+driftnet解决了“流量怎么来、图片怎么取”,账号密码的抓取交给ettercap。ettercap是一个集ARP欺骗、抓包、协议解析于一体的图形化工具,支持字符界面和图形界面。教程文档004.arpspoof+ettercap获取http账号密码.md里的操作分两步走:
echo 1 > /proc/sys/net/ipv4/ip_forward arpspoof -i eth0 -t 192.168.1.3 192.168.1.1这两条前面已经见过,作用是建立ARP欺骗链路。然后开另一个终端:
ettercap -Tq -i eth0-T指定使用文本界面而不是图形界面,-q是安静模式,只显示关键信息,-i eth0指定网卡。启动后ettercap会持续分析流经eth0的流量,当目标主机在HTTP网页上提交了一个表单,ettercap的文本界面里会直接打印出包含账号密码的POST数据。
这里的关键在于协议:ettercap能自动从HTTP的POST表单中提炼账号密码,是因为HTTP是明文传输;换成HTTPS就只能看到乱码加密流。教程文档005.arpspoof+ettercap+sslstrip获取https账号密码.md试图解决这个问题,它用sslstrip把HTTPS降级成HTTP再抓明文。sslstrip的工作原理是:攻击机与目标之间维持HTTP通信,攻击机与服务器之间走HTTPS,目标在地址栏看到的是http,实际加密链路是攻击机到服务器这一段——目标的安全感来自于地址栏,而sslstrip恰恰利用了这一点。
实际操作中sslstrip的成功率受两个瓶颈限制:一是目标浏览器如果启用了HSTS预加载,站点会强制HTTPS,降级请求直接失败;二是现在主流浏览器对混合内容做了严格限制,页面里混有不安全请求会被直接拦截。所以我在用这套教程做实验时,会先把sslstrip定位成“认识原理”的一节课,真在实验环境里抓账号密码,还是老老实实搭一个HTTP测试站来验证ettercap的能力。
3.3 从实验到排查:一次完整嗅探的链路关系
把这几篇文档串起来看,arpspoof、driftnet、ettercap其实是同一链路上的三个观测终端,它们共用同一个前置条件:ARP欺骗已经生效、流量已经经过攻击机网卡。区分点只在于处理流量的应用层能力不同——driftnet只看图片数据,ettercap解析明文协议里的表单字段,sslstrip则试图先做协议降级再交给ettercap。
我在实验环境里验证这套链路时,习惯按这个顺序检查:第一步看IP转发开关是否开启,第二步ping目标IP确认网络通,第三步在攻击机上tcpdump确认能看到目标的流量,第四步再开driftnet或ettercap。这个顺序能帮你把链路问题定位在ARP欺骗层还是工具层,不至于对着一个不工作的driftnet窗口干瞪眼。
4. sqlmap注入实战:asp、php与cookie三种场景的检测参数
4.1 sqlmap注入ASP程序:经典注入点的检测逻辑
sqlmap是SQL注入检测与利用的自动化工具,它把“判断是否存在注入”做成了一套标准流程:对目标URL的每个参数附带注入载荷,根据数据库返回结果判断是否存在SQL注入。教程文档001.sqlmap注入asp程序.md针对的是经典ASP站点的注入检测。
sqlmap -u "http://192.168.1.10/test.asp?id=1" --batch --dbs-u后跟目标URL,--batch让sqlmap自动选用默认选项、不用逐条确认,--dbs表示在当前条件下枚举数据库。第一次跑注入检测时建议加上--batch,因为sqlmap交互式提问很密集,新手容易卡在“是否继续测试其他参数”的确认上。
针对ASP程序有一个参数值得提前知道:--dbms="microsoft sql server"。ASP程序的后端数据库最常见的就是SQL Server和Access,指定了dbms之后,sqlmap可以跳过对其他类型数据库的探测,检测速度明显更快。教程里还提到一个适用小站点的做法:加--level 3提高检测等级,默认level是1,只测URL参数;level 2会尝试检测Cookie参数;level 3会连User-Agent、Referer这些HTTP头一起测。ASP程序如果前端对参数做了基础过滤,把注入载荷藏在User-Agent里是常见的绕过思路。
4.2 sqlmap注入PHP程序:参数调整与注入等级
PHP是另一个注入高发场景,教程文档002.sqlmap注入php程序.md给出的检测方式在思路上和ASP一致,但参数侧重点有差别:
sqlmap -u "http://192.168.1.11/news.php?id=1" --batch --risk=2 --level=3这里比ASP场景多了两个参数:--risk=2调高风险等级,--level=3调高检测深度。PHP配MySQL是最常见组合,--dbms=mysql也能省去识别数据库的时间。
跑检测的时候留意一个表现:如果sqlmap在basic test阶段就报custom conditional junction字样,说明目标存在WAF(Web应用防火墙)或者参数过滤,sqlmap的常规载荷被拦了。此时不要急着换工具,先用--tamper=space2comment这类脚本对载荷做编码变形,把空格替换成注释符,很多基础过滤就能绕过。教程没细讲tamper,我在实际测试中把它当作php场景下的高频参数——因为它直接决定了sqlmap能不能把手伸进去。
PHP场景下还有一个容易翻车的点:如果目标URL参数是id=1这种数字型参数,sqlmap默认按字符串去测,把数字型请求的payload改写成字符串会触发MySQL的类型转换报错,误报率偏高。处理方式是加--technique=BEUST调整注入技术集合,或者用--union-cols手动指定联合查询的列数。
4.3 cookie注入:当参数从URL移到请求头之后
教程文档003.sqlmap之cookie注入.md针对的是另一类场景:站点不把参数放在URL里,而是放在Cookie中。比如一个购物网站,购物车ID写成Cookie: cart_id=116,程序直接把cookie里的值拼进SQL语句,URL上没有任何注入点。
sqlmap -u "http://192.168.1.12/cart.asp" --cookie="cart_id=116" --level=2 --batch--cookie参数把Cookie传给sqlmap,--level=2表示开启Cookie参数的检测。如果不加level=2,sqlmap默认只测URL参数,完全不会把Cookie当作测试目标。这个坑很隐蔽——同一个站点,同一套数据,换个参数位置,sqlmap的默认行为就变了。
Cookie注入在教程里作为独立章节讲是有必要的,因为现在的Web程序越来越倾向于把状态数据放在Cookie里,SQL注入检测如果只盯着URL,会漏掉一大片攻击面。实际排查中还遇到过更隐蔽的情况:Cookie里的值被URL编码了一次,sqlmap在检测前会自动做一次解码,但如果应用层做了二次解码,sqlmap发的载荷就会失真。遇到这种情况,手动用--data参数配合--cookie一起控制,能减少一层不确定性。
5. 渗透测试避坑指南:环境失效与命令翻车的六个高频现场
5.1 断网攻击后目标一直上不了网:IP转发开关没开
现象:严格按照教程执行arpspoof,目标主机立刻断网,而且攻击结束(Ctrl+C停止arpspoof)后目标还是上不了网。
原因:两个层面。一是arpspoof运行时攻击机没有开启IP转发,目标发往真实网关的流量全部被丢弃;二是停止arpspoof后,目标主机的ARP缓存表还留着“网关MAC=攻击机MAC”的错误条目,ARP缓存有有效期,在过期前目标依然找不到真实网关。
解决:执行arpspoof前先确认ip_forward为1;攻击结束后再跑一次arpspoof -i eth0 -t 192.168.1.3 192.168.1.100(用真实网关IP),或者使用arp-scan --local手动发送正确的ARP响应来修复目标主机的缓存表。我在实验环境里通常直接重启目标主机的网络服务,简单粗暴且干净。
5.2 driftnet一张图都截不到:网卡混杂模式与镜像口
现象:arpspoof跑着,目标也在浏览网页,driftnet窗口始终空白。
原因:最常见的两个——一是没有开启IP转发或arp欺骗只做了一半,流量根本没有经过攻击机网卡;二是当前网卡没开混杂模式,网卡丢弃了非目标地址的数据包。
解决:先开转发再欺骗;确认无误后重新以driftnet -i eth0启动。如果跑在Kali虚拟机上,还要检查虚拟交换机的设置——VMware里如果虚拟网卡没有设置为混杂模式,即便arpspoof在宿主机的物理网卡上生效,虚拟机里的driftnet也看不到完整流量。这个坑在物理机和虚拟机混用的实验环境里特别容易踩。
5.3 ettercap抓到数据但看不到账号密码:HTTP与HTTPS的流量差异
现象:ettercap界面有大量数据刷新,但搜不到账号密码,全是乱码。
原因:目标访问的是HTTPS站点,POST数据在传输层就被TLS加密了,ettercap的协议解析器看到的是加密载荷,无法还原明文。教程里的sslstrip虽然能降级HTTPS,但现代浏览器普遍启用HSTS或预加载HSTS,sslstrip的成功率大幅下降。
解决:先用HTTP明文站点做功能验证,确认ettercap能解析账号密码;HTTPS场景要么丢弃,要么配合证书伪造+本机信任证书的方式实现中间人解密——后者的操作复杂度远高于教程描述,初学阶段不必强求。
5.4 sqlmap报错或跑得极慢:对方有WAF或注入点判断失误
现象:sqlmap在checking if the target is protected by some kind of WAF阶段停滞,或者大量载荷返回500、403,进度缓慢。
原因:目标部署了WAF,sqlmap的明显载荷被识别拦截;也可能是SQL语句本身是数字型参数,sqlmap按字符型去测,触发了应用层报错。
解决:先加--tamper参数对载荷做编码伪装;再确认参数类型,数字型参数优先尝试--technique=T或直接指定--union-cols;如果主动检测频繁触发封IP,降低探测频率用--delay=2给每个请求加2秒等待。
5.5 metasploit模块加载失败:数据库未初始化
现象:在msfconsole里执行search或者db_nmap时报数据库相关错误,模块列表也加载不全。
原因:metasploit的search功能依赖PostgreSQL数据库存储模块元数据,Kali里postgresql服务默认不是开机自启,数据库服务没起来,自然无法索引模块。
解决:启动数据库并初始化msf数据库,常规做法是执行systemctl start postgresql,然后msfdb init初始化数据库,再进msfconsole。这个坑不踩一次不容易想到——模块加载问题往往不是Kali安装包缺文件,而是底层服务没启动。
5.6 授权边界:只在自己的实验环境里复现
现象:教程里所有的攻击演示都拿局域网IP举例,新手容易产生“在任意网络里都可以跑一遍”的错觉。
原因:arp欺骗、中间人嗅探、SQL注入检测,这三类操作在没有授权的网络中都是违规行为,轻则干扰他人网络,重则触犯法律。
解决:所有命令只在自己搭建的靶场、虚拟机隔离网络或者获得书面授权的测试环境下执行。我在工作室指导新人的惯例是:先在VirtualBox里搭两台虚拟机(一台Kali、一台可被攻击的靶机),把教程里的命令全部跑通,再谈真实环境的测试方法论——这个习惯能避免很多不必要的风险。
6. 把教程变成自己的渗透流程:从复现到定制的最小习惯
这套资源包里的命令都拆好了,但它提供的不是终点,而是起点。我在复现完arpspoof和sqlmap的三四篇教程后,做了一个简化版的渗透测试流程,每接到一个新授权的测试目标,按这个顺序走:
第一步是信息收集,确认目标IP和网段,用nmap做一次主机存活扫描和端口识别。第二步是链路攻击,对测试目标执行arpspoof配合IP转发,用tcpdump记录流量,确认流量是否经过攻击机。第三步是流量分析,视目标协议决定开driftnet、ettercap还是先sslstrip试一轮。第四步是Web层渗透,对凭据发现的可疑站点跑sqlmap,先从--level=1开始,逐个加level。
这个流程几乎不依赖额外脚本,用的就是教程里的原始命令,只是把它们按阶段重组。我养成的强制习惯是:每次实验前先写一个环境检查命令序列,两行搞定——检查转发开关、确认网卡名称。很多问题到最后复盘时都出在这两个前置条件上。
这套教程对初学者的价值也在这里:不用先啃工具手册,直接拿一个场景文件对照跑通,就能理解渗透测试里“信息收集—权限获取—数据提取”的链路到底是什么样的。我从一开始拿到这个资源包自己跑通,到后来作为教学素材给团队里的人用,最大的体会是:工具命令是死的,链路意识是活的。希望这份拆解能帮到你,让你少走我走过的弯路。
本文还有配套的精品资源,点击获取