测试工具

序号工具版本备注
1JDK环境1.7及以上burpsuite工具运行所需
2Burpsuite1.4及以上请根据个人情况,选择Community或Professional版本
3DVWA当前最新是1.9集成多种渗透测试工具,可根据测试场景,调整应用程序的安全等级,环境部署参考点击此处

常规暴力破解

  对于一般或中小型项目软件来说,用户进行登录操作时,发送的鉴权请求可能只有一条,以用户账号、密码、验证码(若有)作为入参,发送给服务器进行验证,根据鉴权结果返回登录失败或成功。此类登录请求,只需在intruder中选取请求中的密码参数作为载荷标记,配置好对应的载荷内容,即可执行破解操作。

测试流程

  1. 拦截登录请求,并发送到intruder中。
    登录请求发送至intruder

  2. 选择攻击类型。

Attack type
(类型)
Payload set
(载荷集)
描述适用场景
Sniper最多1个单位置单遍历,即所有载荷标记使用同一个载荷集,每次攻击只替换一个载荷标记。攻击总数=载荷标记数量 * 载荷集清单数量只有一个位置需要替换,或者多个位置依次替换
Battering ram最多1个多位置同时遍历,即所有载荷标记使用同一个载荷集,且每次攻击会同时替换所有载荷标记。 攻击总数=载荷集清单数量存在多个位置需要替换,且多个位置被替换内容需要同时一致
Pitchfork至少2个各个载荷标记使用对应的载荷集,每次同时取载荷集中的第N个元素替换对应的标记。攻击总数=所有载荷集清单最少数量2个以上位置同时被替换,被替换的内容存在一一对应关系
Cluster bomb至少2个集束爆破,攻击总数等于所有载荷集清单数量的笛卡尔积。2个以上位置同时被替换,被替换的内容无需存在对应关系,可自由组合。

攻击模式

  1. 选取载荷标记。
    add:手动选取一个载荷标记位置,以成对的§符号标记起来。
    clear:清除所有的载荷标记位置。
    auto:工具自动选取需要被替换的标记位置。
    refresh:刷新编辑器中的内容,使之语法高亮。
    选取载荷标记

  2. 添加载荷内容。
    paste:从系统粘贴板中获取数据,点击paste按钮添加。
    load:选择并读取本地文件,每一行作为一条数据。
    remove:移除所选数据。
    clear:清除所有数据。
    add:单个数据添加。
    add from list:从工具自带的数据列表中添加。
    添加载荷内容

  3. 执行破解,查看破解请求。
    点击Start attack按钮,即可开始破解(为了提高破解几率,可先在options中将线程数设置为1)。
    从图中可发现,在执行第86次替换时,返回的长度length比其他的要少;再通过查看该攻击请求的返回报文,发现该请求已经正确返回了登录后的网页源码;与此同时,在所有的攻击请求中,没有一条返回“账号被锁定”或“IP地址被锁定”的错误信息(具体返回内容,请根据项目实际情况判断)。
    故由此得出,该系统的登录模块,未做任何防暴力破解的措施,极易被破解出密码。

执行破解

特殊登录请求暴力破解

  在接触到的某些大型项目中,为了进一步提高项目的安全防护,可能会在登录验证请求之前,先向服务器发送一条获取随机值的请求,服务器返回随机值后,登录验证请求会携带此随机值,连同登录用户账号、密码、验证码(若有),一同发送给服务器进行鉴权验证,并且此随机值长度一般可达到32位或以上,同时可能存在时间限制,以此来达到双重保障安全登录及长时间未登录销毁登录会话的目的。
  模拟登录流程如下:
基于会话有效期的登录请求流程

  如果此时咱们使用上述的常规暴力破解方式,未将登录随机值放入登录请求中,服务器一般会返回“登录会话失效”或者“登录随机值已过期”等等消息,而此类测试结果并不能作为项目存在防暴力破解机制的依据。
同一user_token发起登录请求验证
  因此,咱们可以使用到burpsuite工具中自带的宏录制的功能,将获取随机值的请求录制成宏,然后再将宏命令应用到intruder功能中,便可让登录请求入参携带由服务器返回的随机值,达到“欺骗”服务器正常登录的目的。

测试流程

  大体流程与常规破解一致,区别在于前期的配置宏命令(步骤4~10)。

  1. 以DVWA程序中的Brute Force为例,输入username和password,点击Login按钮,触发一次登录请求。
    发起登录请求

  2. 在burpsuite中可看出,登录请求中的参数,不仅包含了用户名、密码,还包含了一条user_token,并且是随机的。
    分析登录请求1

  3. 登录失败后,在获取新页面的返回报文中,可看到新生成了一条user_token。 分析登录请求2

  4. 进入Project options->Sessions->Marcos中,点击Add新增一条Marco。
    新增一条Macro

  5. 在Macro Editior界面中,点击Record macro按钮,在弹出的窗口中,选择那条获取登录随机值的请求,点击OK。
    配置获取随机值的请求

  6. 在Macro Editior界面中,输入Macro description,在Macro items中选择上述保存的请求,点击Configure item按钮进入Configure Macro Item界面。
    配置宏命令位置

  7. 点击Add按钮,在弹出的Define Custom Paramter界面中,选择那串user_token随机值,工具将自动填写随机值的起止位置表达式,记录下来备用。点击OK按钮保存,回到工具主界面。
    配置随机值位置

  8. 在Project options的Session Handling Rules中,新增一条规则。在弹出的Session handling rule editor窗口中,取一个规则的名字,在Rule Actions中点击Add,选择Run a macro。
    新建会话处理规则

  9. 在Session handling action editor中,自动填上了第1~4步配置的macro,选中即可,下面的选项保持默认。点击OK按钮保存。
    配置会话处理动作

  10. 返回到Session handling rule editor窗口,切换到Scope页签。确保规则应用的工具包含Intruder,URL Scope中选择“Include all URLs”选项。点击OK按钮以保存。
    选择规则应用的范围

  11. 至此,宏命令的配置就完成了,接下来的intruder配置和执行破解操作,与常规暴力破解的步骤类似,不再赘述。

  12. 验证:
    a. 在发起的Intruder中,可看到每一次发起的破解请求中,其携带的user_token都是不同的,且有效(如果随机值无效会返回HTTP302 Not Found)。
    b. 返回报文中,可看到返回的消息是账号或密码不正确,且smithy账号由于尝试登录错误次数过多,已被锁定了。
    破解请求1
    破解请求2
    破解结果

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐