关于这篇文章
本文适合刚刚接触Burpsuite的初学者进行学习 写本文即是对本人知识点的整理也是为了学习 (求各位大牛指出本文的不足和说错的地方) 文章内容相对来说有点长长长长.... 希望您能够耐心的看下去 图片都比较大如果看不清的话请在新窗口打开
所有的实验环境均在本地运行 其中的靶场和工具来自于本人自己收集和网上公开的资源 本文将对Web层面和系统服务端口进行常见的密码穷举爆破
本文将对Burpsuite HTTP协议抓包神器的介绍与使用以及对它的工作原理以及使用Burpsuite进行常规的暴力破解[Web层面]
除了对Web层面进行暴力破解外 还有一款值得介绍的弱口令爆破工具 那就是Hydra(九头蛇) 这款工具可以针对系统端口层面的枚举[系统层面]
介绍渗透神器Burpsuite [Web层面的穷举]
在本文接下来对Burpsuite的介绍和使用当中将统称Burpsuite为bp这是一款常用于进行Web应用程序安全测试和漏洞挖掘的工具。它由PortSwigger开发,具有强大的功能和广泛的应用,并得到了众多安全专家和黑客的认可。
Burpsuite可以被用作一个拦截代理,通过它可以查看和修改HTTP/HTTPS请求和响应,从而分析应用程序的工作原理和性能。它还提供了一系列有用的扩展,使用户能够在渗透测试和漏洞挖掘过程中更加高效地执行任务。
该工具包括了许多功能模块,如代理服务器、基于规则的行为控制、爬虫、反射型(Reflected)跨站点脚本(XSS)自动化扫描器等。此外,Burpsuite还内建了编码和解码功能,方便对数据进行处理和转换。
目前,Burpsuite已经成为了安全行业的标志性工具之一,被广泛应用于企业安全团队、安全顾问和研究人员的日常工作中。它帮助用户发现Web应用程序中的各种漏洞,如跨站脚本(XSS)、SQL注入、CSRF攻击等,提升了应用程序的安全性和可靠性。
总体而言,Burpsuite是一款功能强大、易用且广泛被接受的Web应用程序安全测试工具,它能够帮助用户快速发现和修复应用漏洞,提高了Web应用程序的安全性。
Burpsuite的常用模块与功能
这里只介绍三个常见的模块 相信关于BP使用方法的这类资料你自己也能够找到不少 为了方便大家理解 我这里采用2023中文版的Burpsuite
代理模块(Proxy):可以拦截和修改HTTP/HTTPS请求和响应。用户可以查看和编辑请求参数、Cookie、报头等,并可以对数据进行注入、修改和重放。通常我们会使用这个模块来对目标进行HTTP数据包的拦截

入侵模块(Intruder):用于自动化攻击和验证目标网站的输入点。用户可以定义输入点,比如用户名、密码或其他参数,并规定攻击类型、负载等。然后可以批量发送这些请求,并查看响应结果。这个模块通常我们会用来进行枚举 用的会比较多

重放模块(Repeater):用于对请求进行手动修改和重播,并观察响应结果。相比代理模块,重放模块可以更方便地进行多次修改和发送请求。

Burpsuite的工作原理
啥也不说了 直接P一张图吧 当然这里指的工作原理只是在使用上的工作原理 并不能代表整个Bp的运作原理

无防护的Web账号密码爆破(Pikachu靶场)
首先尝试一波错误的密码 让页面返回一个错误的信息 我这里返回的错误信息是 username or password is not exists~ 根据这个信息的返回可以判断密码不正确

此时配置好了浏览器插件和BP后 首先启动BP抓个数据包来分析一下

根据上述信息可以看到这个表单在bp的请求数据里面有admin和qqqqqqq对应的则是表单上的用户名和密码 假设我们已经知道了用户名现在来对密码进行爆破

将这个数据包发送到攻击模块 并将刚刚输入的值(密码)设为一个变量

此时在payload中设置加载一个字典并进行穷举攻击 密码尝试成功返回的HTTP数据包长度是不一样的 以此来判断是否爆破成功 还可以根据HTTP状态码来判断 (通常登录成功页面会进行跳转 HTTP状态码为302则代表临时重定向 也可通过这一点判断是否爆破成功) 当然也可以根据返回的响应数据来判断 可以看到红光处和刚刚我们密码错误的信息完全相反 根据这点也可以判断是否爆破成功

此时即可得出账号为admin密码为123456
相信眼尖的你看出来了 在图中长度这一列 第一个密码下面还有一个长度不一样
长度:31111 这个密码在字典中是一个空密码 这就是第三种情况(密码不能为空) 所以返回的数据包长度也就不一样 (为了方便理解我P了一下 放大了字体)
长度:34997 而第一个返回的长度不一样是因为登录成功了所以页面内容不一样以至于长度不一样这是第一种情况
长度:35021 而第二种情况就是所有数据包的长度都一样 就说明都登录失败了 所以出现了全部相同的情况
无防护的Web账号密码爆破(DVWA靶场)
相信如果你认真看了前面内容的话 那接下来的内容理解起来也会很简单 我这里多举几个例子是想让你明白 实际上互联网上的Web账号和密码的穷举都是换汤不换药的

可以看到的是 这里采用的是GET方式进行请求的 而上一个pikachu靶场使用的是POST方式进行请求的 其参数变量的位置是在URL上的
只是设置变量的位置变了而已 并不影响我们进行爆破 得到的结果即账号admin密码password
DVWA有四种难度模式 学习了以上两小部分内容相信你也能够玩明白第一种和第二种(跟第一种一样 只是每次爆破只是多了延迟时间) 接下来就动手动手动手试一试吧!!!
无防护的Web账号密码爆破(Emlog CMS)
此处我在自己的内网环境搭建了一个EMLOG的博客CMS拿来给大家做演示 之前重复的操作我就不一一截图了 这里主要看高亮处 状态码302(临时重定向 从A页面跳转到B页面)以及返回的长度则说明爆破出了密码即账号admin密码123456

还有一点要说明的则是线程数 默认是并发请求10次 也就是一次性发送10次HTTP请求 为了加快爆破速度可以将进程数改为20(具体视情况而定) 但是这个方法也要灵活使用 因为当你遇到WAF(网页防火墙)的时候 这个线程数就需要灵活变化了

有验证码修改Cookie进行验证绕过
同样的我在本地部署了一个有验证码的后台网站(靶场均为网上收集) 此时的难度上了一个阶层 那就是验证码

先把它丢到重放器里去做一下简单的测试 删除Cookie字段中的的PHPSESSION值后 在重新发送几个HTTP请求数据包 可以看到返回的是"密码错误或不存在该管理员" 并没有提示验证码错误 说明验证码已经被成功绕过了

将该HTTP数据包发送到攻击模块后进行枚举 可以看到HTTP状态码为302 数据包的长度为1112以此判断密码为123456 至于登录到后台去 在此不做演示

验证码一直有效未被销毁进行爆破
抓个包 让大家看一下原封不动数据包的格式

先来尝试上一种方法删PHPSESSION 删除后直接提示验证码错误 说明上一种方法不可取 那怎么办呢?往下看

本小节正文开始:其实原理说的简单一点就是验证码不失效不过期导致被绕过导致我们可以利用这一点进行爆破
首先我们重新抓一个HTTP数据包把它放到重放器里并进行发包 可以看到返回结果是密码错误 请注意看密码的变化和返回结果的变化 这是第一次尝试

现在我们来做第二次尝试 第二次尝试我们修改了密码的值 但是返回的数据包和第一次是一样的 说明验证码没有被销毁可以被重复使用

现在就可以尝试爆破一波了 直接把数据包丢到攻击模块 成功爆破出密码即admin&123456 (老演员了)

验证码被重复使用实际上就是在前端做的检测 而使用bp来抓包可以直接绕过前端的验证码检测 如果你还没看懂 那么我们在用pikachu靶场来做一下演示
这是我们的第一次尝试

这是我们的第二次尝试 按理说第一次验证码被使用后就不能在使用了 而这里第二次不同的密码使用的还是和第一次同一个验证码 但是还是返回了和第一次一样的结果 则说明验证码可以被重复使用 此处我就不在做爆破演示了 方法就是这么个方法

后台验证码识别爆破密码
接下来我们使用一些验证码识别的工具来对后台密码进行穷举 工具的效果取决于验证码像素的干扰程度

紧接着配置好爆破工具内的各项参数 添加需要爆破的变量和标记对应的验证码 以及选择爆破密码还是账号根据情况导入对应的字典

在工具内可以将 密码错误的特征 填入到软件内以便进行更好的爆破 至此爆破结束

有Token防御的穷举
有的网站登陆表单存在token值这个token通俗的名字叫令牌 每次刷新页面都会随机变化
同样的token也是由服务器随机生成的只有客户端匹配成功当次的token 服务器才会与客户端进行连接 攻击者只要能够得到前端的token值也还是可以进行爆破的
提交请求时必须携带这个token值可以利用这点避免后台进行直接穷举和防止 CSRF(跨站请求攻击)

接下来我们来抓个包并将它发送到攻击模块 将攻击模式改为Pitchfork(鱼叉模式) 并对密码和Token添加为变量

来到设置界面抓一个前端的token值 通过查找得到token相对应的位置后 我们来抓取前端Token值所在的位置 并对Token值进行复制!记得复制!

完成后在窗口内会多出一条信息 此时将 重定向改为 总是

这里有波细节要说一下 将第一行密码设为空 刚开始响应数据包的Token值不一定是匹配的 因此需要初始化值
这个操作主要是为了确保字典从第一个密码开始到结束都能够参与到爆破当中 设想你爆破的第一个密码就是正确的密码 如果不进行初始化那么很可能就与爆破成功失之交臂

紧接着再去导入字典 这时可以看到第一行的值是空的 就说明没问题了 第一个payload就设置好了

现在我们来设置一下第二个字典 此处的类型为 递归提取Recursive grep

把刚才提取的token值粘贴进来 往下看 还没完

默认来说一次性你发10个HTTP请求 会同时返回10个响应包 而10个不同的响应包就会返回10个不同的token 这样我们就没办法让爆破的包有一一对应的关系 因此将线程设置为1尤为关键 设置好后直接开始爆破即可 从图中可以看到密码即123456 这时我们来分析一波刚刚我说的 为什么把密码置空 注意看请求的第0行和第1行 是不是发现Token值没有匹配上 直到第2行的请求(payload2)才与第1行的响应(value='')token相匹配

如果你认真学习并理解了这个小节的内容 再去尝试DVWA靶场的剩下两个难度都没问题....
phpmyadmin账号密码穷举
可以去找相对应的一些破解工具来跑 这类工具也没什么可说的 导入字典直接开始跑就完事了

Hydra九头蛇弱口令穷举爆破工具 [操作系统服务端口层面的穷举]
接下来就是针对系统服务端口层面的穷举爆破 Hydra这款工具可以使用命令行也可以使用图形化界面 我这里将使用的是Xhydra图形化的九头蛇 毕竟现在都3202年了 所以能够图形化咱就不用命令行
毕竟 学网安大大小小的工具就有上百款 这么多的命令根本记不过来 但但但但是...... 如果你是第一次接触hydra的话还是有必要了解一下命令行参数(自行搜索)的解释毕竟咱们是专业的嘛不能啥都不懂吧
上GPT4!让它给大家介绍一下hydra支持的爆破协议以及协议对应的端口


接下来由我介绍一下图形化的hydra的各项参数

接下来我通过爆破RDP账号和密码来给大家示范一下 配置好目标信息

来到字典选择的位置 你可以指定一个用户名或多个用户名字典 以及单个密码(知道密码不知道用户名的时候采用)和密码字典

来到Start选项卡进行爆破

配置目标(Targer) 配置用户名和密码字典(Passwords) 执行(Start)
这三个功能点也是比较常用的 其余两个就是做一些代理(提高隐蔽性 避免爆破的时候被封IP 如果目标有这个机制可以使用)
和其它的配置这里就不一一介绍了 用法就是这么个用法 其它协议的爆破我就不一一展示了
超级弱口令检查工具
自动化工具 用起来很简单可以去网上找 懒得写 此处省略.........

结尾
这篇文章我花了很长的时间去写 其实写这篇文章并不难 难的是要各种P图和各种解释 主要我是个完美主义者 自己写的东西追求美观和内容足够全面 但是我这篇文章我从头到尾看一遍缺乏对原理的深入剖析 所以说如果你是刚开始学渗透的初学者光是看这篇文章是远远不够的 还是需要下去深入学习 当然我也不敢说自己有多个的水平 目前也是在学习渗透 如果你对本文有什么看法、观点、不理解的 都可以做出评论 我很乐意回答关于这方面的内容
@星旧学长原创