Burpsuite暴力破解实战:四种攻击模式详解与靶场演练

📅 发布时间:2026/8/12 10:13:57
Burpsuite暴力破解实战:四种攻击模式详解与靶场演练
1. 项目概述为什么Bruteforce_Test是Burpsuite入门的绝佳靶场如果你刚开始接触Web安全测试或者想系统性地掌握Burpsuite这个“瑞士军刀”的核心攻击模块那么Bruteforce_Test这个靶场绝对是你绕不开的经典练手项目。它不像那些复杂的综合靶场一上来就给你几十个漏洞点让人无从下手。Bruteforce_Test顾名思义就是专门为“暴力破解”攻击设计的目标极其纯粹一个登录框。这恰恰是学习攻击工具最理想的状态——剥离复杂的业务逻辑和干扰项让你能聚焦于工具本身的使用逻辑、参数配置和攻击模式的选择。我见过很多新手一拿到Burpsuite就直奔Intruder模块看着四个攻击模式Sniper, Battering ram, Pitchfork, Cluster bomb发懵随便选一个就开始跑结果要么是请求乱发一通毫无效果要么就是字典配置不对跑出来的结果根本没法看。这不仅打击信心更糟糕的是形成了错误的使用习惯。Bruteforce_Test这个靶场就像驾校里的“倒车入库”项目它把“暴力破解登录”这个最常见的攻击场景拆解成了最基础的几个考核点你能否正确抓包、能否精准定位攻击参数、能否根据场景选择合适的攻击模式、以及能否配置高效可用的字典。这次我就以这个靶场为例带你完整走一遍流程。我们不只讲“怎么点”更要讲清楚“为什么这么点”。我会详细拆解四种攻击模式各自的适用场景和底层逻辑并分享我多年来积累的、针对登录爆破场景的字典配置心得包括如何避免触发账户锁定策略、如何提升爆破效率等实战技巧。无论你是刚安装好Burpsuite的新手还是想巩固基础的老手这篇手把手的指南都能让你对Intruder模块有一个透彻的理解。2. 环境准备与靶场搭建2.1 Burpsuite社区版与专业版的抉择工欲善其事必先利其器。首先你得有个Burpsuite。很多教程一上来就让你找破解版我强烈不建议这么做。一来有安全风险二来不稳定最重要的是PortSwigger官方提供的社区版Community Edition对于学习核心功能来说已经完全够用。Intruder模块在社区版中功能完整只是速度上有限制每秒请求数受限但这对于学习Bruteforce_Test靶场恰恰是好事——它能让你更清晰地观察每个请求和响应而不是“唰”一下全跑完了你还不知道发生了什么。去PortSwigger官网下载安装包过程很简单。安装后首次运行它会让你选择临时项目还是磁盘项目。对于练习选“Temporary project”就行。关键是配置浏览器代理。我习惯用Chrome安装SwitchyOmega插件来管理代理是最清晰的方式。将代理设置为127.0.0.1:8080并确保Burpsuite的Proxy - Options里代理监听器Proxy Listeners是运行在8080端口的。注意首次启动Burpsuite浏览器访问网页可能会提示证书错误。这是因为Burpsuite作为中间人需要生成自己的CA证书来解密HTTPS流量。你需要在浏览器中访问http://burp下载CA证书并导入到浏览器的“证书管理机构”中。这一步至关重要否则你抓不到HTTPS的包。2.2 Bruteforce_Test靶场部署实战Bruteforce_Test靶场通常是一个简单的PHP或Python Web应用。网上有很多开源版本核心就是提供一个带有用户名和密码输入框的登录页面后端逻辑就是比对固定的几组凭证。为了模拟最真实的学习环境我建议你在本地自己搭建。假设你使用PHP环境一个最简单的靶场index.php代码如下?php session_start(); $valid_users array(admin password123, test test123, user 123456); $username $_POST[username] ?? ; $password $_POST[password] ?? ; if (!empty($username) !empty($password)) { if (array_key_exists($username, $valid_users) $valid_users[$username] $password) { $_SESSION[loggedin] true; $_SESSION[username] $username; echo h1Login Successful! Welcome, $username./h1; } else { echo h1Login Failed! Invalid credentials./h1; } } ? form methodPOST Username: input typetext nameusernamebr Password: input typepassword namepasswordbr input typesubmit valueLogin /form将这段代码保存放在你的PHP服务器根目录比如XAMPP的htdocs或www目录。访问http://localhost/你的目录/index.php就能看到登录页面。这个靶场预设了三组有效凭证admin/password123test/test123user/123456。我们的目标就是通过Burpsuite的Intruder尝试用字典暴力破解出其中任意一组。实操心得自己搭建靶场的好处是你可以完全控制后端逻辑。例如你可以修改代码添加登录失败次数限制、延迟响应等机制来模拟更真实的防护场景从而练习更高级的绕过技巧。这是直接使用现成在线靶场无法获得的灵活度。3. 攻击流程核心四步解析3.1 第一步精准抓包与请求分析一切攻击始于抓包。打开Burpsuite的Proxy - Intercept确保拦截是“Intercept is on”状态。然后回到浏览器访问你的本地靶场地址在登录框中随意输入一个用户名和密码比如aaa和bbb点击登录。此时请求会被Burpsuite拦截。你会在Raw标签页看到类似如下的HTTP POST请求POST /bruteforce_test/index.php HTTP/1.1 Host: localhost Content-Type: application/x-www-form-urlencoded Content-Length: 25 usernameaaapasswordbbb这个原始的请求数据包就是我们后续所有攻击的“模板”。关键动作来了右键点击请求报文选择“Send to Intruder”。这样这个请求就被发送到了Intruder模块等待我们配置攻击。进入Intruder - Positions标签页。Burpsuite会自动用§符号标记一些它认为可能是参数的部位。但自动标记往往不准我们需要手动清除并重新定义。点击右边的“Clear §”按钮然后手动选中aaa和bbb这两个值分别点击“Add §”按钮。完成后你的请求应该变成这样username§aaa§password§bbb§这表示我们定义了两个攻击位置Payload Positionsusername和password。Intruder将会用我们提供的字典内容替换这两个§符号包裹的部分生成大量不同的请求进行测试。注意事项很多新手会忽略Content-Length头。当你用不同长度的Payload替换原始值时Content-Length会自动变化吗在Burpsuite的Intruder模块中默认情况下“Update Content-Length”这个选项是勾选的它会自动重新计算并更新请求头中的Content-Length值。这是一个非常贴心且重要的默认设置确保你的请求格式始终正确。除非你有特殊需要否则不要取消它。3.2 第二步攻击模式深度解读与选型这是本次实战的核心也是很多人最困惑的地方。Intruder提供了四种攻击模式它们决定了Payload如何被应用到多个攻击位置上。选对模式事半功倍选错模式徒劳无功。#### 3.2.1 Sniper狙击手模式这是最常用、最直观的模式。它只有一个Payload集合Payload set。攻击时它会用这个集合里的每一个Payload依次替换每一个攻击位置而其他攻击位置则保持你设置的原始值即aaa和bbb。适用场景当你只有一个不确定的变量时。比如你知道用户名是admin但不知道密码或者你知道密码是123456但不知道用户名。这时你只需要标记一个位置用户名或密码使用Sniper模式用一个字典去遍历这个位置即可。在我们的靶场中如果我们假设用户名是admin想爆破密码那么就应该只标记password参数使用Sniper模式和一个密码字典。#### 3.2.2 Battering ram攻城锤模式这个模式也只有一个Payload集合。它的特点是用Payload集合里的同一个值同时替换所有被标记的攻击位置。比如你标记了username和password两个位置Payload集合是[‘admin’ ‘test’ ‘root’]。那么Battering ram模式会生成三个请求usernameadminpasswordadminusernametestpasswordtestusernamerootpasswordroot适用场景非常特定即测试“用户名和密码是否相同”的情况。在实战中确实存在一些系统默认或用户习惯设置用户名密码相同。但总体来说这个模式使用频率较低。#### 3.2.3 Pitchfork草叉模式这是功能强大的模式。它为每一个攻击位置分配一个独立的Payload集合。攻击时它会从每个Payload集合里按顺序各取一个值组合成一个请求。假设我们标记了两个位置为位置1username配置了Payload集A:[‘admin’ ‘test’]为位置2password配置了Payload集B:[‘123456’ ‘password’]。Pitchfork模式会生成两个请求usernameadminpassword123456取A[1]和B[1]usernametestpasswordpassword取A[2]和B[2]适用场景当你拥有成对的、一一对应的数据列表时。这是爆破登录的“理想”模式。例如你通过信息收集得到了目标系统的一批用户名并且通过社工库或默认密码规则为每个用户名推测了一个最可能的密码。这时你就可以使用Pitchfork模式将用户名列表和对应的密码列表分别载入两个Payload集进行精准的“撞库”攻击效率远高于盲目组合。#### 3.2.4 Cluster bomb集束炸弹模式这是最“暴力”的模式用于测试所有可能的组合。它同样为每个攻击位置分配独立的Payload集合。攻击时它会进行笛卡尔积运算即用第一个Payload集的每一个值去搭配第二个Payload集的每一个值以此类推。沿用上面的例子集束炸弹模式会生成四个请求usernameadminpassword123456usernameadminpasswordpasswordusernametestpassword123456usernametestpasswordpassword适用场景当你没有任何先验信息需要对用户名和密码进行完全的交叉组合测试时。这是最经典的“暴力破解”模式。但它的缺点是请求量会爆炸式增长乘积关系。如果用户名字典有1000个密码字典有10000个那么总请求量就是1000万。因此在使用此模式前务必精简你的字典。回到Bruteforce_Test靶场由于我们事先不知道任何有效凭证需要对用户名和密码进行全组合测试因此Cluster bomb模式是我们的首选。接下来我们就基于此模式进行配置。3.3 第三步Payloads字典配置的艺术选好Cluster bomb模式后切换到Intruder的Payloads标签页。你会看到Payload set的编号因为我们标记了两个位置所以会有Payload set 1和Payload set 2。Burpsuite默认会将第一个标记的位置username对应set 1第二个password对应set 2。#### 3.3.1 用户名字典配置Payload set 1在Payload set 1的下拉菜单中选择“Simple list”。这里就是粘贴或加载用户名字典的地方。对于靶场练习一个精简的、常见的用户名列表就足够了。你可以手动输入也可以从文件加载。一个基础的靶场用用户名字典示例admin administrator test user root guest manager点击“Paste”粘贴进去或者点击“Load...”从文本文件载入。关键技巧来了在实战中用户名字典的构建依赖于信息收集。你可以从网站robots.txt、页面源码注释、注册页面、甚至公司员工邮箱命名规则如姓名缩写中收集潜在用户名。对于Bruteforce_Test我们上面这个简单列表已经覆盖了靶场预设的有效用户。#### 3.3.2 密码字典配置Payload set 2在Payload set 2中同样选择“Simple list”。密码字典是暴力破解的核心其质量直接决定成败。一个针对靶场和弱口令测试的基础密码字典应包括空密码(空行)超弱口令password,123456,admin,test,12345678,qwerty,abc123与用户名相同 这是一个Payload选项我们稍后配置。简单变形password123,admin123,test123,123456789靶场预设密码password123,test123,123456这是我们已知的答案用于验证流程将以上密码列表粘贴到Payload set 2中。#### 3.3.3 高级Payload处理巧用“密码用户名”规则很多系统存在用户将密码设为与用户名相同的情况。在Cluster bomb模式下如果我们想测试这种组合不需要在密码字典里为每个用户名重复添加一次。Burpsuite提供了强大的“Payload Processing”功能。在Payload set 2密码集的底部找到“Payload Processing”区域点击“Add”。规则选择Add prefix 前缀留空。再点击“Add”添加第二条规则Fetch from request-User-defined location-Base64-encode? 不这里有个更直接的方法。更简单的做法是使用“Recursive grep”功能但针对“密码用户名”这个需求最优雅的配置其实在Payload set的类型里。我们可以为密码集配置一个“Runtime file”类型的Payload然后在攻击过程中动态生成密码。但这对新手稍复杂。一个更直观的“土办法”是直接在你的密码字典最前面添加一个特殊的占位符比如{USER}。然后在Payload Processing中添加一条规则Substitute 将{USER}替换为来自Payload set 1的当前用户名。不过Burpsuite社区版的Payload Processing功能可能有限。对于靶场练习和大多数入门场景我建议采用一种更务实的方法将常见的用户名也直接加入到密码字典中。虽然这会让密码字典变大但在小规模测试中是可以接受的。你的密码字典可以变成(空行) password 123456 admin test 12345678 qwerty abc123 password123 admin123 test123 123456789 # 直接把用户名也当作密码测试一遍 admin test user这样当Cluster bomb运行时就会自然组合出usernameadmin, passwordadmin这样的请求。实操心得字典管理是门学问。永远不要用一个几十MB的“万能字典”开始爆破那会浪费大量时间并可能触发防护。我的习惯是准备“三级字典”一级字典极精简 10-20个最常用的用户名和密码用于快速试探目标是否存在极弱口令。二级字典场景化 根据目标类型OA系统、CMS、路由器整理的数百个针对性口令。三级字典综合大字典 在确认目标无速率限制和锁定策略后作为最后手段使用。 对Bruteforce_Test我们用一级字典就够了。3.4 第四步发起攻击与结果甄别所有配置完成后点击Intruder界面右上角的“Start attack”按钮。Burpsuite会弹出一个新窗口开始发送攻击请求。攻击窗口的表格会实时显示每个请求的序号、Payload组合、状态码、响应长度、响应时间等信息。我们的核心任务就是从这海量的“失败”请求中找出那个“成功”的请求。如何甄别主要看以下几个列状态码Status 登录成功和失败返回的HTTP状态码可能不同。常见的是失败返回200带错误信息成功可能返回302重定向到后台或者返回200但内容不同。但这并非绝对很多应用成功失败都返回200。响应长度Length这是最常用、最可靠的判断指标。登录失败的页面通常会显示“用户名或密码错误”等固定文本因此响应长度是固定的。而登录成功的页面可能会显示用户昵称、跳转链接或不同的欢迎语导致响应长度与失败页面显著不同。在攻击结果表中点击“Length”列进行排序长度与众不同的那个请求极有可能就是成功的。响应内容 直接查看响应Response的Raw数据搜索“欢迎”、“登录成功”、“dashboard”等关键词或者对比失败响应的HTML结构。在我们的靶场攻击中当你看到有一个请求的响应长度与其他绝大多数请求明显不同时点击查看其响应内容你大概率会看到“Login Successful! Welcome, admin.”这样的字样。同时查看该请求的Payload列你会发现它使用的就是usernameadmin和passwordpassword123或其他有效组合。恭喜你至此你已经成功使用Burpsuite的Cluster bomb模式完成了对Bruteforce_Test靶场的暴力破解。4. 四种攻击模式在靶场上的对比实战为了让你彻底理解这四种模式的区别我们最好在同一个靶场上用不同的模式各操作一次对比其过程和结果。4.1 Sniper模式实战已知用户名的密码爆破假设我们通过某种方式比如页面提示、默认配置得知靶场的有效用户名之一是admin。我们的目标就变成了爆破admin的密码。抓包与标记 像之前一样抓取登录请求。但这次我们只标记password参数。即usernameadminpassword§bbb§。username参数保持为固定的admin不添加§符号。选择模式 在Positions标签页攻击模式选择“Sniper”。配置Payload 切换到Payloads标签页现在你只有一个Payload set针对password位置。载入你的密码字典可以比之前Cluster bomb用的密码字典更大一些因为现在只需要遍历密码。发起攻击 点击Start attack。观察结果通过响应长度差异找到正确的密码password123。这个过程中请求总数等于你的密码字典的行数。效率比Cluster bomb高得多。4.2 Battering ram模式实战测试用户名密码相同这个模式在靶场中可能无法直接成功因为我们的预设账户密码并不相同。但我们可以用它来测试“用户名密码相同”这个假设。抓包与标记 同时标记username和password两个参数。选择模式 选择“Battering ram”。配置Payload 只有一个Payload set。载入一个用户名列表例如[‘admin’ ‘test’ ‘user’ ‘root’]。发起攻击 系统会生成admin/admin,test/test,user/user,root/root四个请求。在我们的靶场中这些组合都会失败响应长度一致。这告诉我们靶场不存在用户名密码相同的账户。4.3 Pitchfork模式实战使用成对凭证列表假设我们通过信息收集得到一份疑似有效的用户名密码对列表例如从其他泄露的类似系统中获取admin:admin888 test:test999 user:pass2024 administrator:Password123抓包与标记 同时标记username和password。选择模式 选择“Pitchfork”。配置PayloadPayload set 1: 载入用户名列表[‘admin’ ‘test’ ‘user’ ‘administrator’]Payload set 2: 载入密码列表[‘admin888’ ‘test999’ ‘pass2024’ ‘Password123’]必须确保两个列表的顺序一一对应发起攻击 Burpsuite会生成四个请求admin/admin888,test/test999,user/pass2024,administrator/Password123。在我们的靶场中前三个都会失败因为密码不匹配。这个模式验证了我们的“撞库”列表对此靶场无效。4.4 Cluster bomb模式实战完全未知的暴力破解这就是我们最开始详细演练的模式。它不依赖任何先验信息用用户名字典和密码字典进行全组合测试。请求总量 用户名字典大小 × 密码字典大小。在靶场的小字典下瞬间完成在实战的大字典下可能需要极长时间并可能触发警报。通过这四种模式的对比操作你应该能深刻体会到选择攻击模式的本质是基于你对目标了解多少信息。信息越多攻击就可以越精准模式选择就越具体。5. 高级技巧与实战避坑指南掌握了基本操作我们来看看如何提升成功率和规避风险。这些技巧在实战中至关重要。5.1 利用Grep-Match和Grep-Extract自动化识别手动看长度和状态码毕竟效率低。Intruder提供了“Grep-Match”和“Grep-Extract”功能可以自动从响应中提取信息并做标记。Grep-Match匹配关键词在Intruder的Options标签页找到“Grep-Match”区域。点击“Add”输入登录失败页面特有的字符串比如“Login Failed”、“Invalid”、“错误”。攻击运行时如果响应中包含这些字符串该请求对应的“Grep-Match”列会被打勾。那么没有打勾的请求就可能是成功的。这能帮你快速筛选。同样你也可以添加成功的关键词如“Welcome”、“Logout”、“管理后台”来直接标记成功请求。Grep-Extract提取关键信息有时成功登录后页面会包含一些独特信息比如用户ID、会话令牌、邮箱片段。在“Grep-Extract”区域点击“Add”Burpsuite会让你选择一个之前的响应作为样本。在样本响应中用鼠标选中你想提取的信息比如“Welcome,admin”中的adminBurpsuite会自动生成提取规则通常基于前后的文本。攻击时它会尝试从每个响应中提取这个信息并显示在结果表的“Grep-Extract”列。这对于批量测试时快速获取成功凭证非常有用。5.2 应对防护机制速率限制与账户锁定真实的网站绝不会像靶场这样“躺平”。常见的防护有速率限制Rate Limiting 单位时间内来自同一IP的登录请求过多会被暂时禁止或要求输入验证码。账户锁定Account Lockout 连续多次登录失败后该账户会被锁定一段时间。应对策略降低频率 在Intruder的Options - “Request Engine”中可以设置请求间隔Throttle。例如设置为500毫秒即每0.5秒发一个请求这能有效绕过简单的速率限制。使用代理池 在“Request Handling”中配置上游代理Upstream Proxy Servers将请求通过多个不同的代理IP发出分散请求来源。“低慢速”攻击 结合速率限制和超大字典将攻击时间拉长到数小时甚至数天模拟正常用户的零星失败登录。优先测试弱口令 使用前面提到的“三级字典”策略先用极小的字典试探避免一上来就触发锁定策略。如果发现某个账户几次失败后就无法登录响应内容变化则将其从字典中暂时移除标记为“可能被锁定”。识别锁定响应 将“您的账户已被锁定请30分钟后重试”这类信息添加到Grep-Match中以便快速识别哪些账户触发了锁定从而调整策略。5.3 字典的优化与生成字典是暴力破解的灵魂。除了从网上下载现成的字典自己生成针对性字典是高级玩家的必备技能。基于目标的字典生成公司名/产品名组合 如果目标是某公司系统将公司名、产品名、品牌名与常见数字后缀2024, 123, 888、简单变形公司名首字母大写后加!或组合。个人信息组合 通过社工收集到的目标员工姓名、生日、电话号码、车牌号等进行组合变换。可以使用Crunch、Cewl等工具。Cewl是一个可以爬取指定网站并生成基于其内容的关键词列表的工具这些关键词常被用作密码。使用Hashcat规则进行变形你可以准备一个基础密码种子文件如passwordadmin然后使用Hashcat的规则功能对种子进行大量的变形大小写转换、前后加数字、符号替换等生成海量的变异密码字典。虽然Burpsuite Intruder本身不支持规则但你可以先用其他工具生成最终字典再导入。字典去重与排序合并多个字典后一定要用sort -u命令Linux或相关工具去重。将最有可能成功的密码如password123Admin2024放在字典文件的开头以提高早期命中的概率。6. 完整实战复盘与延伸思考让我们回到Bruteforce_Test靶场进行一次完整的、带有策略的复盘攻击。攻击假设我们对靶场一无所知。攻击目标找出至少一对有效登录凭证。策略选择采用“低慢速”Cluster bomb攻击先小后大。步骤一信息收集观察登录页面无验证码无错误次数提示。初步判断防护较弱。步骤二准备极精简字典用户名字典users.txt(5个):admin,test,user,administrator,root密码字典pass_top50.txt(50个): 包含空密码、123456、password、admin、test、12345678、qwerty以及它们的常见变形123、2024后缀等。步骤三配置攻击抓包标记username和password。攻击模式Cluster bomb。Payload set 1 载入users.txt。Payload set 2 载入pass_top50.txt。Options - Grep-Match添加“Login Failed” (假设失败页面包含此文本)。Options - Request Engine: Throttle 设置为1000毫秒1秒1次。步骤四执行与观察点击攻击。总请求数 5 * 50 250个以每秒1个的速度大约4分钟跑完。 在攻击结果表中我们很快发现有几个请求的“Grep-Match”列是空的且长度不同。查看响应确认找到了admin/password123和test/test123。步骤五攻击延伸如果我们第一次没有用Top50密码字典成功下一步不是盲目扩大密码字典。而是分析失败响应 是否所有账户的失败响应都一样有没有某个账户失败提示不同如“密码错误” vs “用户不存在”这可以帮助我们筛选出存在的用户。切换模式 如果通过响应差异找到了一个存在的用户例如admin则立即停止Cluster bomb改用Sniper模式针对admin用户使用更大的密码字典进行爆破。社会工程学 思考靶场可能使用的密码。如果是教学靶场密码很可能就是password123、test123这类。将其加入字典优先级。通过这个完整的流程你将暴力破解从一个无脑的“跑字典”工具变成了一个需要观察、分析、调整策略的智力活动。Burpsuite的Intruder模块提供的四种攻击模式和丰富的配置选项正是为了支持这种灵活的测试思路。最后记住一点所有这些技术和工具仅限用于你拥有明确书面授权测试的系统或像Bruteforce_Test这样的本地学习靶场。未经授权的攻击是违法行为。将你的技能用于安全建设、漏洞挖掘和防护提升才是正确的道路。