1. 项目概述当爆破遇上加密参数在渗透测试和Web应用安全评估的日常工作中Burp Suite的Intruder模块俗称“爆破模块”是每个安全工程师的“瑞士军刀”。我们用它来测试登录表单的弱口令、枚举用户ID、暴力破解验证码或者寻找隐藏的参数。然而现实世界中的靶场和真实应用早已不是简单的明文传输。越来越多的应用尤其是金融、电商等高安全要求的场景会在前端对提交的参数如密码、手机号、验证码进行加密处理然后再发送到后端。这就导致了一个经典困境你拿着一个包含“123456”、“admin”的明文字典去爆破但服务器收到的却是经过MD5、AES、RSA甚至自定义算法加密后的一串乱码你的爆破攻击自然石沉大海。这个项目标题“Burpsuite爆破模块参数加密Tips特殊技巧”精准地指向了这个实战中的核心痛点。它不仅仅是讲解如何使用Intruder而是深入到如何让Intruder“理解”并处理加密逻辑让我们的字典在发送前先“变身”成服务器能识别的密文格式。同时标题中提到的“Tips特殊技巧”暗示了在解决加密问题之外还有一些能极大提升爆破效率、绕过限制或处理复杂场景的“骚操作”。这就像你不仅学会了开车还掌握了漂移过弯和应急维修让你在渗透测试的道路上跑得更快、更稳。接下来我将以一个拥有十多年一线渗透经验的老兵视角为你彻底拆解这个主题。我会从最基础的加密参数识别讲起一步步带你实现Burp Suite与加密逻辑的联动并分享那些在官方文档里找不到、但在实战中能救命的特殊技巧。无论你是刚接触Burp的新手还是想深化Intruder使用技巧的老手这篇文章都将提供可直接“抄作业”的完整方案。2. 核心思路拆解让字典“活”起来面对加密参数最直接的思路是“以密文对密文”。但手动把整个字典加密一遍再导入不仅效率低下而且无法应对动态盐值Salt或时间戳等变量。因此我们的核心思路是让Burp Suite在发送每个Payload即字典中的每一项之前实时地对其进行加密处理。2.1 方案选型Payload Processing vs. 外部脚本Burp Suite提供了两种主流方式来实现这个目标Intruder内置的“Payload Processing”功能这是最常用、最集成化的方法。它允许你为Payload配置一系列处理规则如哈希MD5, SHA1、编码Base64, URL、添加前缀/后缀等。对于标准加密算法如MD5这是首选。使用“Extension”扩展/BApp或“Logger”等插件对于更复杂的加密比如需要调用JavaScript库如CryptoJS的自定义算法或者需要从页面动态获取密钥的场景我们可以编写Python或Java扩展或者利用Logger插件的强大功能来动态修改请求。结合“Macro”宏与“Session Handling Rules”会话处理规则当加密密钥需要从服务器响应中动态获取例如每次登录页面会返回一个不同的RSA公钥我们就需要先“录制”一个获取密钥的请求序列宏然后在爆破前自动执行这个宏并将获取到的密钥应用到Payload的加密中。为什么选择这种组合思路因为实战场景是复杂的。一个简单的MD5加密用Payload Processing一键搞定一个需要引入crypto-js.min.js的AES加密可能就需要写个简单的Python脚本而一个需要先请求/getPublicKey接口再加密的场景就必须动用宏和会话规则。我们将根据由简到繁的顺序逐一攻克。2.2 实战前的关键准备识别与抓包在开始任何操作之前准确的观察是成功的一半。步骤一拦截登录请求使用Burp Proxy拦截一个正常的登录请求。重点关注POST数据体或URL参数。一个典型的明文请求可能如下POST /login HTTP/1.1 ... usernameadminpassword123456而一个加密后的请求可能长这样POST /login HTTP/1.1 ... usernameadminpassworde10adc3949ba59abbe56e057f20f883esignabc123def456或者更复杂的POST /api/v1/auth HTTP/1.1 ... {username:admin,encryptedData:U2FsdGVkX12w5T7Z8K9JmAk3M6vFpLx...,timestamp:1697012345678}关键点你需要确认哪个参数被加密了。通常是password、pwd、data、encryptedData、sign签名等。同时观察加密后的特征MD5是32位十六进制字符串Base64编码的字符串通常以结尾且字符集特定AES加密后的数据则是一长串看似随机的字符。步骤二分析前端加密逻辑在浏览器中打开开发者工具F12查看登录按钮的点击事件所触发的JavaScript代码。搜索关键词如encrypt、MD5、CryptoJS、AES、RSA等。你可能会找到类似这样的代码function encryptPassword(pwd) { return CryptoJS.MD5(pwd).toString(); } // 或 var encrypted CryptoJS.AES.encrypt(password, key, {mode: CryptoJS.mode.ECB}).toString();找到这个加密函数是我们后续复现加密过程的关键。如果代码被混淆难度会增大可能需要动态调试。3. 核心细节解析三种加密场景的实战攻防识别出加密方式后我们就可以对症下药了。下面我将分三种典型场景详细讲解配置过程。3.1 场景一标准哈希加密如MD5, SHA1这是最简单也是最常见的场景。假设我们发现密码被MD5加密后传输。实操步骤配置Intruder攻击在Proxy的History中找到登录请求右键发送到Intruder。设置攻击位置在Positions标签页清空所有自动标记只将加密后的密码参数值例如e10adc3949ba59abbe56e057f20f883e选中点击Add §。确保攻击类型Attack type适合你的场景如Sniper对单个位置用字典爆破或Cluster bomb用户名和密码两个字典组合爆破。配置Payload加密切换到Payloads标签页。在Payload Options选择你的密码字典如rockyou.txt。关键步骤来了在下方找到Payload Processing区域点击Add。添加处理规则在弹出的规则列表中选择Hash-MD5。你还可以根据需要选择输出格式通常是十六进制小写Hex lowercase。发起攻击点击Start attackBurp会为字典中的每一个密码如123456实时计算其MD5值e10adc3949ba59abbe56e057f20f883e并替换到请求中发出。注意事项很多系统会在MD5基础上加盐Salt。例如密码可能是MD5(password 固定盐值)或MD5(固定盐值 password)。这时你需要在Payload Processing中使用Add prefix添加前缀或Add suffix添加后缀规则先拼接字符串再进行MD5哈希。顺序不能错。3.2 场景二复杂算法加密如AES, RSA或自定义JS当遇到AES、RSA或前端自定义的复杂加密函数时Payload Processing的内置规则就力不从心了。我们需要借助外部力量。方案A使用Python扩展推荐灵活强大编写加密脚本假设我们分析出前端使用CryptoJS进行AES-ECB加密密钥是1234567890123456。# encrypt_aes.py from Crypto.Cipher import AES import base64 import sys def encrypt(text, key): # 确保密钥和文本长度符合AES要求16, 24, 32字节 # PKCS7填充 pad lambda s: s (AES.block_size - len(s) % AES.block_size) * chr(AES.block_size - len(s) % AES.block_size) text pad(text) cipher AES.new(key.encode(utf-8), AES.MODE_ECB) encrypted_bytes cipher.encrypt(text.encode(utf-8)) return base64.b64encode(encrypted_bytes).decode(utf-8) if __name__ __main__: # 从命令行参数读取待加密的明文即Burp传来的Payload plaintext sys.argv[1] key 1234567890123456 ciphertext encrypt(plaintext, key) print(ciphertext) # 输出密文Burp会捕获这个输出在Burp中配置在Intruder的Payloads标签页Payload type选择Runtime file。点击Configure在Process each payload with a command中填入python3 /path/to/your/encrypt_aes.py §payload§Burp会依次将字典中的每个值作为参数传给脚本并读取脚本的输出作为最终的Payload。方案B利用“Logger”插件进行动态替换Logger是一个功能强大的历史记录和修改插件。对于某些无法简单命令行化的加密例如依赖浏览器环境的JS你可以先正常发起一次Intruder攻击此时发送的是明文。在Logger中捕获所有请求。使用Logger的“Mass Edit”功能结合其内置的JavaScript引擎编写一个函数选中所有请求的password参数值批量替换为加密后的值。这更像是一种“事后修正”的批处理方式适合对大量已发送的请求进行重放。实操心得对于自定义JS加密最稳妥的方法是使用Python的execjs或PyExecJS库直接将前端的加密JS代码在Python环境中执行。这样能100%还原加密过程。首先在浏览器控制台将关键的加密函数代码整理出来保存为一个.js文件然后在Python脚本中调用它。3.3 场景三动态密钥加密需要宏与会话处理这是最复杂的场景。服务器每次返回的加密密钥或盐值都不同。例如首次GET请求/login页面响应中包含一个隐藏字段input typehidden idcsrfToken valueabc123和一个公钥scriptvar publicKey MIGfMA0GCSqGSIb3...;/script。提交登录时需要用这个csrfToken和公钥对密码进行加密。解决方案使用Session Handling Rules会话处理规则录制宏Macro进入Project options-Sessions-Macros点击Add。在Macro Recorder中执行获取密钥的完整流程首先访问/login页面GET请求然后可以从这个请求的响应中提取我们需要的数据。Burp会自动记录这些请求。编辑这个宏重点是配置Custom parameter locations in response告诉Burp如何从响应中提取csrfToken和publicKey。通常使用正则表达式或简单的字符串截取。创建会话处理规则Session Handling Rule在Sessions-Session Handling Rules中点击Add。在Rule Actions中添加一个Run a macro的动作选择你刚录制的宏。配置宏的执行结果将宏提取到的csrfToken和publicKey值设置为会话变量如csrftoken和pubkey。在Intruder中引用会话变量回到Intruder的Positions在密码参数的位置你需要手动构造一个复杂的Payload。例如密码参数可能应该被设置为§RSA_Encrypt(§payload§, pubkey)§。但Intruder原生不支持这种函数调用。这时就需要回到方案APython扩展但修改脚本让它从环境变量或一个临时文件中读取Burp会话规则设置好的pubkey和csrftoken再进行加密。这需要更精细的脚本设计和Burp扩展开发知识是高级技巧。踩过的坑宏的录制和参数提取非常容易出错。务必使用Test macro功能确保宏能成功运行并提取到正确的值。否则整个爆破攻击会因为拿不到正确的密钥而失败。另外会话规则的作用范围要设置正确确保它应用于你的Intruder攻击。4. 实操过程以MD5加盐爆破为例让我们通过一个完整的、虚构的靶场例子将上述知识串联起来。假设目标登录接口/api/login接收参数user和pwd其中pwd的算法为MD5(password ‘SALT_2024’)盐值固定。步骤1侦察与抓包使用浏览器访问登录页输入测试账号test和密码test123通过Burp Proxy拦截请求。 原始请求体usertestpwdtest123但查看网页源码或调试JS发现提交前有一个encrypt()函数处理后实际发送的请求体为usertestpwdcc03e747a6afbbcbf8be7668acfebee5我们计算MD5(test123SALT_2024)结果正是cc03e747a6afbbcbf8be7668acfebee5验证了加密逻辑。步骤2配置Intruder将拦截到的请求发送到Intruder (Send to Intruder)。在Positions标签攻击类型选择Sniper。清除所有自动标记只选中pwd参数的值cc03e747a6afbbcbf8be7668acfebee5点击Add §将其设为攻击点。user参数我们设置为固定值admin假设我们要爆破admin用户的密码。步骤3配置Payload Processing进入Payloads标签Payload set为1Payload type为Simple list并加载你的密码字典文件。在Payload Processing区域点击Add添加规则。我们需要按顺序添加两条规则规则1Add suffix。值填写SALT_2024。这意味着Burp会先将字典中的每一项后面加上盐值字符串。规则2Hash - MD5。编码选择Hex lowercase。这意味着Burp会将上一步拼接好的字符串进行MD5哈希并输出十六进制小写字符串。规则3可选如果服务器要求全大写可以再加一个To uppercase的规则。步骤4执行攻击与结果分析点击Start attack弹出攻击窗口。Burp会为字典中每个密码如123456执行123456-123456SALT_2024-MD5(123456SALT_2024)- 将得到的哈希值填入请求并发送。观察结果。主要关注Length和Status列。通常登录失败和成功的响应长度或状态码会不同。找到那个响应长度与众不同的请求查看其Payload值对应的原始密码就是爆破成功的密码。核心技巧在攻击窗口中合理设置Grep - Match可以自动标记出包含特定关键词如“登录成功”、“欢迎”的响应极大提高结果筛选效率。5. 特殊技巧Tips提升爆破效率与成功率除了处理加密掌握下面这些技巧能让你的Intruder用起来如虎添翼。5.1 巧用“Cluster Bomb”与“Pitchfork”攻击类型Cluster Bomb集束炸弹这是最常用的组合爆破方式。它需要设置多个攻击点Payload set每个攻击点使用一个独立的字典。它会遍历所有字典的笛卡尔积。例如攻击点1是用户名字典admin, test, guest攻击点2是密码字典123456, password。它会尝试(admin, 123456),(admin, password),(test, 123456)...等所有组合。适用于用户名密码都未知的情况。Pitchfork草叉同样需要多个攻击点和字典但它不是遍历所有组合而是“一对一”对应。它从每个字典的同一位置取一个值进行组合。要求所有字典的行数相同。适用于已知用户名和密码对应关系列表即“撞库”数据的情况。5.2 Payload Processing的进阶组合处理规则可以多条组合顺序执行。这能应对复杂变形。例如一个系统要求密码先进行URL编码再进行Base64编码最后计算SHA256。你可以按顺序添加URL-encode(as required)Encode-Base64-encodeHash-SHA-256To uppercase5.3 利用“Extensions”实现条件化Payload有时Payload需要根据之前请求的响应来动态生成。这超出了标准Intruder的能力。我们可以写一个简单的Python扩展在IBurpExtender和IIntruderPayloadProcessor接口中实现processPayload方法。在这个方法里你可以访问之前的请求/响应历史。解析响应提取令牌、计数器等值。基于这些值和当前原始Payload生成新的Payload。返回这个新Payload给Intruder使用。这实现了真正意义上的“动态、有状态”的Payload生成。5.4 速率控制与错误处理疯狂发送请求会导致IP被封锁或请求被WAF拦截。设置Throttle节流在Intruder攻击窗口的Options标签下可以设置请求间隔如1000毫秒让攻击慢下来模拟真人操作。使用随机延迟勾选Use random jitter between requests让延迟时间在一定范围内随机波动行为更像人类。配置失败重试在Project options-Connections中可以设置网络错误时的重试次数和间隔避免因网络波动导致攻击中断。5.5 结果分析与过滤Intruder攻击会产生大量结果手动查看效率极低。Grep功能在攻击窗口的Options标签下Grep - Match可以标记响应中包含特定字符串的请求如“error”、“invalid”、“success”。Grep - Extract可以从响应中提取一段数据如用户ID、余额到结果表格中方便排序分析。差异比较选中两个结果右键选择Compare-Response to Compare可以高亮显示两个响应体的差异快速定位成功与失败响应的不同之处。6. 常见问题与排查技巧实录即使按照步骤操作也难免会遇到问题。这里记录了几个最常见的“坑”和解决方法。问题1Payload Processing规则加了但发送的请求里Payload还是明文。排查首先检查规则顺序是否正确。特别是涉及加盐的MD5必须是Add suffix-Hash的顺序。其次检查规则是否被意外禁用每个规则前有个复选框。最后在攻击窗口中查看Request原始数据确认发送出去的是什么。也可以开启Project options-Misc-Intruder下的Store requests/responses便于事后复查。问题2使用Python扩展时Burp报错“Failed to invoke external command”。排查这是路径或环境问题。第一确保命令中的python3或python在你的系统PATH中。可以在Burp的Extender-Options-Python Environment中配置全局Python路径。第二确保脚本路径正确且脚本文件有执行权限。第三在脚本开头添加import sys; print(sys.version)并直接在命令行测试确保脚本能独立运行。问题3宏录制成功了但会话规则运行时提取不到参数。排查这是最常见的问题。使用宏的Test功能一步步查看每个请求的响应和提取结果。确保你的正则表达式或字符串截取规则能精准匹配到目标值。注意响应可能是HTML、JSON或JS格式不同提取方式也不同。对于JSON可以使用JsonPath表达式如果Burp支持或更精确的正则。问题4攻击速度很慢或者大量请求超时。排查首先检查网络和目标服务器状态。其次在Intruder的Target标签和Options标签中检查连接超时和响应超时设置默认是30秒对于不稳定的目标可以适当延长。最后考虑是否触发了目标的速率限制或WAF规则尝试降低并发线程数Options-Request Engine-Number of threads并增加请求间隔。问题5如何判断加密算法是不是标准的经验法则32位十六进制很可能是MD5。40位十六进制可能是SHA1。64位十六进制可能是SHA256。末尾带的Base64样字符串可能是AES/CBC加密后的Base64输出也可能是单纯的Base64编码。长度不固定包含/、、的字符串很可能是Base64。非常长几百位的十六进制或Base64字符串可能是RSA加密。最准确的方法永远是分析前端JavaScript代码。掌握Burp Suite Intruder模块的加密参数处理和这些特殊技巧意味着你在Web渗透测试的“爆破”环节拥有了解决绝大多数现实挑战的能力。从简单的MD5到动态的RSA从内置规则到自定义脚本这套方法论的核心思想是“分析、模拟、自动化”。每一次成功的爆破背后都是对目标系统加密逻辑的精准还原。记住工具是死的人是活的最强大的“插件”始终是你的分析和思维能力。在实际操作中耐心和细致往往比复杂的技巧更重要一个字符的盐值错误就可能导致整个攻击失败所以每一步的验证都至关重要。
Burp Suite Intruder模块实战:加密参数爆破与高级技巧解析
1. 项目概述当爆破遇上加密参数在渗透测试和Web应用安全评估的日常工作中Burp Suite的Intruder模块俗称“爆破模块”是每个安全工程师的“瑞士军刀”。我们用它来测试登录表单的弱口令、枚举用户ID、暴力破解验证码或者寻找隐藏的参数。然而现实世界中的靶场和真实应用早已不是简单的明文传输。越来越多的应用尤其是金融、电商等高安全要求的场景会在前端对提交的参数如密码、手机号、验证码进行加密处理然后再发送到后端。这就导致了一个经典困境你拿着一个包含“123456”、“admin”的明文字典去爆破但服务器收到的却是经过MD5、AES、RSA甚至自定义算法加密后的一串乱码你的爆破攻击自然石沉大海。这个项目标题“Burpsuite爆破模块参数加密Tips特殊技巧”精准地指向了这个实战中的核心痛点。它不仅仅是讲解如何使用Intruder而是深入到如何让Intruder“理解”并处理加密逻辑让我们的字典在发送前先“变身”成服务器能识别的密文格式。同时标题中提到的“Tips特殊技巧”暗示了在解决加密问题之外还有一些能极大提升爆破效率、绕过限制或处理复杂场景的“骚操作”。这就像你不仅学会了开车还掌握了漂移过弯和应急维修让你在渗透测试的道路上跑得更快、更稳。接下来我将以一个拥有十多年一线渗透经验的老兵视角为你彻底拆解这个主题。我会从最基础的加密参数识别讲起一步步带你实现Burp Suite与加密逻辑的联动并分享那些在官方文档里找不到、但在实战中能救命的特殊技巧。无论你是刚接触Burp的新手还是想深化Intruder使用技巧的老手这篇文章都将提供可直接“抄作业”的完整方案。2. 核心思路拆解让字典“活”起来面对加密参数最直接的思路是“以密文对密文”。但手动把整个字典加密一遍再导入不仅效率低下而且无法应对动态盐值Salt或时间戳等变量。因此我们的核心思路是让Burp Suite在发送每个Payload即字典中的每一项之前实时地对其进行加密处理。2.1 方案选型Payload Processing vs. 外部脚本Burp Suite提供了两种主流方式来实现这个目标Intruder内置的“Payload Processing”功能这是最常用、最集成化的方法。它允许你为Payload配置一系列处理规则如哈希MD5, SHA1、编码Base64, URL、添加前缀/后缀等。对于标准加密算法如MD5这是首选。使用“Extension”扩展/BApp或“Logger”等插件对于更复杂的加密比如需要调用JavaScript库如CryptoJS的自定义算法或者需要从页面动态获取密钥的场景我们可以编写Python或Java扩展或者利用Logger插件的强大功能来动态修改请求。结合“Macro”宏与“Session Handling Rules”会话处理规则当加密密钥需要从服务器响应中动态获取例如每次登录页面会返回一个不同的RSA公钥我们就需要先“录制”一个获取密钥的请求序列宏然后在爆破前自动执行这个宏并将获取到的密钥应用到Payload的加密中。为什么选择这种组合思路因为实战场景是复杂的。一个简单的MD5加密用Payload Processing一键搞定一个需要引入crypto-js.min.js的AES加密可能就需要写个简单的Python脚本而一个需要先请求/getPublicKey接口再加密的场景就必须动用宏和会话规则。我们将根据由简到繁的顺序逐一攻克。2.2 实战前的关键准备识别与抓包在开始任何操作之前准确的观察是成功的一半。步骤一拦截登录请求使用Burp Proxy拦截一个正常的登录请求。重点关注POST数据体或URL参数。一个典型的明文请求可能如下POST /login HTTP/1.1 ... usernameadminpassword123456而一个加密后的请求可能长这样POST /login HTTP/1.1 ... usernameadminpassworde10adc3949ba59abbe56e057f20f883esignabc123def456或者更复杂的POST /api/v1/auth HTTP/1.1 ... {username:admin,encryptedData:U2FsdGVkX12w5T7Z8K9JmAk3M6vFpLx...,timestamp:1697012345678}关键点你需要确认哪个参数被加密了。通常是password、pwd、data、encryptedData、sign签名等。同时观察加密后的特征MD5是32位十六进制字符串Base64编码的字符串通常以结尾且字符集特定AES加密后的数据则是一长串看似随机的字符。步骤二分析前端加密逻辑在浏览器中打开开发者工具F12查看登录按钮的点击事件所触发的JavaScript代码。搜索关键词如encrypt、MD5、CryptoJS、AES、RSA等。你可能会找到类似这样的代码function encryptPassword(pwd) { return CryptoJS.MD5(pwd).toString(); } // 或 var encrypted CryptoJS.AES.encrypt(password, key, {mode: CryptoJS.mode.ECB}).toString();找到这个加密函数是我们后续复现加密过程的关键。如果代码被混淆难度会增大可能需要动态调试。3. 核心细节解析三种加密场景的实战攻防识别出加密方式后我们就可以对症下药了。下面我将分三种典型场景详细讲解配置过程。3.1 场景一标准哈希加密如MD5, SHA1这是最简单也是最常见的场景。假设我们发现密码被MD5加密后传输。实操步骤配置Intruder攻击在Proxy的History中找到登录请求右键发送到Intruder。设置攻击位置在Positions标签页清空所有自动标记只将加密后的密码参数值例如e10adc3949ba59abbe56e057f20f883e选中点击Add §。确保攻击类型Attack type适合你的场景如Sniper对单个位置用字典爆破或Cluster bomb用户名和密码两个字典组合爆破。配置Payload加密切换到Payloads标签页。在Payload Options选择你的密码字典如rockyou.txt。关键步骤来了在下方找到Payload Processing区域点击Add。添加处理规则在弹出的规则列表中选择Hash-MD5。你还可以根据需要选择输出格式通常是十六进制小写Hex lowercase。发起攻击点击Start attackBurp会为字典中的每一个密码如123456实时计算其MD5值e10adc3949ba59abbe56e057f20f883e并替换到请求中发出。注意事项很多系统会在MD5基础上加盐Salt。例如密码可能是MD5(password 固定盐值)或MD5(固定盐值 password)。这时你需要在Payload Processing中使用Add prefix添加前缀或Add suffix添加后缀规则先拼接字符串再进行MD5哈希。顺序不能错。3.2 场景二复杂算法加密如AES, RSA或自定义JS当遇到AES、RSA或前端自定义的复杂加密函数时Payload Processing的内置规则就力不从心了。我们需要借助外部力量。方案A使用Python扩展推荐灵活强大编写加密脚本假设我们分析出前端使用CryptoJS进行AES-ECB加密密钥是1234567890123456。# encrypt_aes.py from Crypto.Cipher import AES import base64 import sys def encrypt(text, key): # 确保密钥和文本长度符合AES要求16, 24, 32字节 # PKCS7填充 pad lambda s: s (AES.block_size - len(s) % AES.block_size) * chr(AES.block_size - len(s) % AES.block_size) text pad(text) cipher AES.new(key.encode(utf-8), AES.MODE_ECB) encrypted_bytes cipher.encrypt(text.encode(utf-8)) return base64.b64encode(encrypted_bytes).decode(utf-8) if __name__ __main__: # 从命令行参数读取待加密的明文即Burp传来的Payload plaintext sys.argv[1] key 1234567890123456 ciphertext encrypt(plaintext, key) print(ciphertext) # 输出密文Burp会捕获这个输出在Burp中配置在Intruder的Payloads标签页Payload type选择Runtime file。点击Configure在Process each payload with a command中填入python3 /path/to/your/encrypt_aes.py §payload§Burp会依次将字典中的每个值作为参数传给脚本并读取脚本的输出作为最终的Payload。方案B利用“Logger”插件进行动态替换Logger是一个功能强大的历史记录和修改插件。对于某些无法简单命令行化的加密例如依赖浏览器环境的JS你可以先正常发起一次Intruder攻击此时发送的是明文。在Logger中捕获所有请求。使用Logger的“Mass Edit”功能结合其内置的JavaScript引擎编写一个函数选中所有请求的password参数值批量替换为加密后的值。这更像是一种“事后修正”的批处理方式适合对大量已发送的请求进行重放。实操心得对于自定义JS加密最稳妥的方法是使用Python的execjs或PyExecJS库直接将前端的加密JS代码在Python环境中执行。这样能100%还原加密过程。首先在浏览器控制台将关键的加密函数代码整理出来保存为一个.js文件然后在Python脚本中调用它。3.3 场景三动态密钥加密需要宏与会话处理这是最复杂的场景。服务器每次返回的加密密钥或盐值都不同。例如首次GET请求/login页面响应中包含一个隐藏字段input typehidden idcsrfToken valueabc123和一个公钥scriptvar publicKey MIGfMA0GCSqGSIb3...;/script。提交登录时需要用这个csrfToken和公钥对密码进行加密。解决方案使用Session Handling Rules会话处理规则录制宏Macro进入Project options-Sessions-Macros点击Add。在Macro Recorder中执行获取密钥的完整流程首先访问/login页面GET请求然后可以从这个请求的响应中提取我们需要的数据。Burp会自动记录这些请求。编辑这个宏重点是配置Custom parameter locations in response告诉Burp如何从响应中提取csrfToken和publicKey。通常使用正则表达式或简单的字符串截取。创建会话处理规则Session Handling Rule在Sessions-Session Handling Rules中点击Add。在Rule Actions中添加一个Run a macro的动作选择你刚录制的宏。配置宏的执行结果将宏提取到的csrfToken和publicKey值设置为会话变量如csrftoken和pubkey。在Intruder中引用会话变量回到Intruder的Positions在密码参数的位置你需要手动构造一个复杂的Payload。例如密码参数可能应该被设置为§RSA_Encrypt(§payload§, pubkey)§。但Intruder原生不支持这种函数调用。这时就需要回到方案APython扩展但修改脚本让它从环境变量或一个临时文件中读取Burp会话规则设置好的pubkey和csrftoken再进行加密。这需要更精细的脚本设计和Burp扩展开发知识是高级技巧。踩过的坑宏的录制和参数提取非常容易出错。务必使用Test macro功能确保宏能成功运行并提取到正确的值。否则整个爆破攻击会因为拿不到正确的密钥而失败。另外会话规则的作用范围要设置正确确保它应用于你的Intruder攻击。4. 实操过程以MD5加盐爆破为例让我们通过一个完整的、虚构的靶场例子将上述知识串联起来。假设目标登录接口/api/login接收参数user和pwd其中pwd的算法为MD5(password ‘SALT_2024’)盐值固定。步骤1侦察与抓包使用浏览器访问登录页输入测试账号test和密码test123通过Burp Proxy拦截请求。 原始请求体usertestpwdtest123但查看网页源码或调试JS发现提交前有一个encrypt()函数处理后实际发送的请求体为usertestpwdcc03e747a6afbbcbf8be7668acfebee5我们计算MD5(test123SALT_2024)结果正是cc03e747a6afbbcbf8be7668acfebee5验证了加密逻辑。步骤2配置Intruder将拦截到的请求发送到Intruder (Send to Intruder)。在Positions标签攻击类型选择Sniper。清除所有自动标记只选中pwd参数的值cc03e747a6afbbcbf8be7668acfebee5点击Add §将其设为攻击点。user参数我们设置为固定值admin假设我们要爆破admin用户的密码。步骤3配置Payload Processing进入Payloads标签Payload set为1Payload type为Simple list并加载你的密码字典文件。在Payload Processing区域点击Add添加规则。我们需要按顺序添加两条规则规则1Add suffix。值填写SALT_2024。这意味着Burp会先将字典中的每一项后面加上盐值字符串。规则2Hash - MD5。编码选择Hex lowercase。这意味着Burp会将上一步拼接好的字符串进行MD5哈希并输出十六进制小写字符串。规则3可选如果服务器要求全大写可以再加一个To uppercase的规则。步骤4执行攻击与结果分析点击Start attack弹出攻击窗口。Burp会为字典中每个密码如123456执行123456-123456SALT_2024-MD5(123456SALT_2024)- 将得到的哈希值填入请求并发送。观察结果。主要关注Length和Status列。通常登录失败和成功的响应长度或状态码会不同。找到那个响应长度与众不同的请求查看其Payload值对应的原始密码就是爆破成功的密码。核心技巧在攻击窗口中合理设置Grep - Match可以自动标记出包含特定关键词如“登录成功”、“欢迎”的响应极大提高结果筛选效率。5. 特殊技巧Tips提升爆破效率与成功率除了处理加密掌握下面这些技巧能让你的Intruder用起来如虎添翼。5.1 巧用“Cluster Bomb”与“Pitchfork”攻击类型Cluster Bomb集束炸弹这是最常用的组合爆破方式。它需要设置多个攻击点Payload set每个攻击点使用一个独立的字典。它会遍历所有字典的笛卡尔积。例如攻击点1是用户名字典admin, test, guest攻击点2是密码字典123456, password。它会尝试(admin, 123456),(admin, password),(test, 123456)...等所有组合。适用于用户名密码都未知的情况。Pitchfork草叉同样需要多个攻击点和字典但它不是遍历所有组合而是“一对一”对应。它从每个字典的同一位置取一个值进行组合。要求所有字典的行数相同。适用于已知用户名和密码对应关系列表即“撞库”数据的情况。5.2 Payload Processing的进阶组合处理规则可以多条组合顺序执行。这能应对复杂变形。例如一个系统要求密码先进行URL编码再进行Base64编码最后计算SHA256。你可以按顺序添加URL-encode(as required)Encode-Base64-encodeHash-SHA-256To uppercase5.3 利用“Extensions”实现条件化Payload有时Payload需要根据之前请求的响应来动态生成。这超出了标准Intruder的能力。我们可以写一个简单的Python扩展在IBurpExtender和IIntruderPayloadProcessor接口中实现processPayload方法。在这个方法里你可以访问之前的请求/响应历史。解析响应提取令牌、计数器等值。基于这些值和当前原始Payload生成新的Payload。返回这个新Payload给Intruder使用。这实现了真正意义上的“动态、有状态”的Payload生成。5.4 速率控制与错误处理疯狂发送请求会导致IP被封锁或请求被WAF拦截。设置Throttle节流在Intruder攻击窗口的Options标签下可以设置请求间隔如1000毫秒让攻击慢下来模拟真人操作。使用随机延迟勾选Use random jitter between requests让延迟时间在一定范围内随机波动行为更像人类。配置失败重试在Project options-Connections中可以设置网络错误时的重试次数和间隔避免因网络波动导致攻击中断。5.5 结果分析与过滤Intruder攻击会产生大量结果手动查看效率极低。Grep功能在攻击窗口的Options标签下Grep - Match可以标记响应中包含特定字符串的请求如“error”、“invalid”、“success”。Grep - Extract可以从响应中提取一段数据如用户ID、余额到结果表格中方便排序分析。差异比较选中两个结果右键选择Compare-Response to Compare可以高亮显示两个响应体的差异快速定位成功与失败响应的不同之处。6. 常见问题与排查技巧实录即使按照步骤操作也难免会遇到问题。这里记录了几个最常见的“坑”和解决方法。问题1Payload Processing规则加了但发送的请求里Payload还是明文。排查首先检查规则顺序是否正确。特别是涉及加盐的MD5必须是Add suffix-Hash的顺序。其次检查规则是否被意外禁用每个规则前有个复选框。最后在攻击窗口中查看Request原始数据确认发送出去的是什么。也可以开启Project options-Misc-Intruder下的Store requests/responses便于事后复查。问题2使用Python扩展时Burp报错“Failed to invoke external command”。排查这是路径或环境问题。第一确保命令中的python3或python在你的系统PATH中。可以在Burp的Extender-Options-Python Environment中配置全局Python路径。第二确保脚本路径正确且脚本文件有执行权限。第三在脚本开头添加import sys; print(sys.version)并直接在命令行测试确保脚本能独立运行。问题3宏录制成功了但会话规则运行时提取不到参数。排查这是最常见的问题。使用宏的Test功能一步步查看每个请求的响应和提取结果。确保你的正则表达式或字符串截取规则能精准匹配到目标值。注意响应可能是HTML、JSON或JS格式不同提取方式也不同。对于JSON可以使用JsonPath表达式如果Burp支持或更精确的正则。问题4攻击速度很慢或者大量请求超时。排查首先检查网络和目标服务器状态。其次在Intruder的Target标签和Options标签中检查连接超时和响应超时设置默认是30秒对于不稳定的目标可以适当延长。最后考虑是否触发了目标的速率限制或WAF规则尝试降低并发线程数Options-Request Engine-Number of threads并增加请求间隔。问题5如何判断加密算法是不是标准的经验法则32位十六进制很可能是MD5。40位十六进制可能是SHA1。64位十六进制可能是SHA256。末尾带的Base64样字符串可能是AES/CBC加密后的Base64输出也可能是单纯的Base64编码。长度不固定包含/、、的字符串很可能是Base64。非常长几百位的十六进制或Base64字符串可能是RSA加密。最准确的方法永远是分析前端JavaScript代码。掌握Burp Suite Intruder模块的加密参数处理和这些特殊技巧意味着你在Web渗透测试的“爆破”环节拥有了解决绝大多数现实挑战的能力。从简单的MD5到动态的RSA从内置规则到自定义脚本这套方法论的核心思想是“分析、模拟、自动化”。每一次成功的爆破背后都是对目标系统加密逻辑的精准还原。记住工具是死的人是活的最强大的“插件”始终是你的分析和思维能力。在实际操作中耐心和细致往往比复杂的技巧更重要一个字符的盐值错误就可能导致整个攻击失败所以每一步的验证都至关重要。