最近测一些登录框比较多,一直在用bp的Intruder模块,以前都是加载字典直接跑,今天深入学习了一下各种功能的使用,记录一下。
Intruder功能介绍
target是爆破目标的IP和端口,一般我们将拦截到的包发到Intruder,target会自动识别,默认即可。
positions是设置变量和选择模式
初始的变量是bp自动选择的,一般不准确,我们可以点击clear清除所有变量,在报文中选中我们要爆破的参数,双击选中或者拉取选中,然后点击Add,添加变量;
设置好变量后选择模式,这里有四种模式:
狙击手模式(Sniper)——它使用一组Payload集合,依次替换Payload位置上(一次攻击只能使用一个Payload位置)被§标志的文本(而没有被§标志的文本将不受影响),对服务器端进行请求,通常用于测试请求参数是否存在漏洞。
攻城锤模式(Battering ram)——它使用单一的Payload集合,依次替换Payload位置上被§标志的文本(而没有被§标志的文本将不受影响),对服务器端进行请求,与狙击手模式的区别在于,如果有多个参数且都为Payload位置标志时,使用的Payload值是相同的,而狙击手模式只能使用一个Payload位置标志。
草叉模式(Pitchfork )——它可以使用多组Payload集合,在每一个不同的Payload标志位置上(最多20个),遍历所有的Payload。举例来说,如果有两个Payload标志位置,第一个Payload值为A和B,第二个Payload值为C和D,则发起攻击时,将共发起两次攻击,第一次使用的Payload分别为A和C,第二次使用的Payload分别为B和D。
集束炸弹模式(Cluster bomb) ——它可以使用多组Payload集合,在每一个不同的Payload标志位置上(最多20个),依次遍历所有的Payload。它与草叉模式的主要区别在于,执行的Payload数据Payload组的乘积。举例来说,如果有两个Payload标志位置,第一个Payload值为A和B,第二个Payload值为C和D,则发起攻击时,将共发起四次攻击,第一次使用的Payload分别为A和C,第二次使用的Payload分别为A和D,第三次使用的Payload分别为B和C,第四次使用的Payload分别为B和D。
设置好变量,选择完模式,点击payloads,选择字典。在payload type里面,有18种模式可以选择,详细可以参考:
https://t0data.gitbooks.io/burpsuite/content/chapter8.html
复制
一般我们最常用的就是simple list(简单列表模式),在简单列表模式中,我们一般选择load自己的字典文件作为payload。
下面还有两个选项,processing是payload处理规则,可以点击Add添加一个规则,例如要爆破的密码被加密或者编码了,可以选择加密算法或者编码方式对payload进行处理;encoding是选择是否对特殊字符进行url编码,也可以手动添加要编码的字符。
最后是options页面,这里可以对攻击的设置进行修改,request headers是对报文的content-length和connetion进行设置,选中update content-length,长度会随着payload长度变化,如果不勾选这个,一些服务器可能无法返回正常的应答;选中set connetion:close,应答会更迅速。
request engine是对爆破线程和延迟时间的设置。
attack results是攻击结果显示设置,选择结果的最终呈现方式,一般默认即可;
grep-match是从应答消息中提取结果项,方便查看,比如:登录成功,我们可以根据这个直接查看相应的结果。
grep-extract从结果中提取信息,点击Add,会来到添加变量页面,类似于前面的设置变量,不同的是这是从response里添加。
grep-payloads提取结果中是否存在payload值,例如xss爆破,通过该选项查看xss脚本是否成功。
最后一个,redirections重定向。一些登录口令的爆破,成功或者失败可能会被重定向到一个指定的页面,这个选项的作用是:是否选择跟随重定向。
当我们根据自己的情况设置好所有选项后(一般用不到的选项默认即可),点击右上角start attack即可开始爆破攻击。
上面介绍了intruder模块的各个选项的设置,下面我们通过一些例子来加深记忆。
靶场:pikachu
https://github.com/zhuifengshaonianhanlu/pikachu
复制
1.基于表单的暴力破解
这种是最简单的,直接爆破即可,但现在的一些登录框,失败超过一定次数可能会出现验证码辅助验证。值得注意的是,我们可以先尝试一个或几个例如admin/123456,test/123456的组合,万一成功了就省了爆破的步骤。填写用户名密码,开启bp代理拦截,点击登录,将报文发送到intruder
设置变量,因为已经知道存在用户名admin,所以只设置password为变量即可,选择payload,执行攻击。
可以看到payload为123456时,响应消息长度与其他的不同,查看具体内容显示登录成功,来到pikachu,用admin/123456登录,成功。
2.存在验证码爆破
这个比上一个多了一个验证码,验证码每次都会变,这该怎么爆破呢?
如果验证码功能健全,那我们只能通过验证码识别的方式来爆破,但如果验证码功能不健全,我们就可以绕过验证码来进行爆破。典型的两种就是前端验证和后端验证。
前端验证,一般是验证码在前端生成,也在前端验证,和后端无交互,这种验证码我们通过抓包删除验证码参数或者禁用js即可绕过。判断的方式也很简单,开启代理拦截,输入错误的验证码,看是否有提示验证码错误,如果无http报文产生且显示验证码错误,基本可以断定是前端验证。
后端验证,这种方式比前端验证安全,如果功能健全,是无法绕过的,但如果功能存在缺陷,例如验证码不刷新,是可以绕过的。判断方式是开启代理拦截,输入正确的验证码信息,发送到repeater模块,重放几次看看页面是否有变化(重放的时候代理拦截需要一直开启),如果一直提示“用户名或密码错误”,那基本确定验证码可绕过;如果第二次就提示验证码错误或其他不同的信息,那么基本可以确定无法绕过。
验证码无法绕过的情况下,想爆破就需要顺应逻辑,识别验证码进行爆破,一般是调用第三方接口来进行验证码识别。使用插件来进行验证码识别,项目地址:
https://github.com/c0ny1/captcha-killer/tags
复制
详细安装使用:
https://cloud.tencent.com/developer/article/1784519
复制
3.存在token爆破
token的特点是一次一密,每次的值都不一样,遇到这种情况该怎么办?
使用bp来进行爆破,有两种方法绕过这个限制,一个是使用宏定义功能定义一个规则调用token作为参数,一个是使用正则匹配返回包的token作为参数。这两种方法原理上相同,都是调用返回包的token值作为参数,这里简单说一下第二种,通过提取返回包的token值作为参数进行爆破。使用pikachu靶场的token防爆破登录。
开启代理拦截,输入用户名密码,点击login,将报文发送到intruder,添加密码和token两个变量,设置模式为pitchfork。
第一个payload选择简单列表模式,加载字典
第二个payload选择type类型为Recursive grep(递归grep),该类型是从服务器端提取有效数据作为payload,选择该类型之后,要在options里配置要匹配的值,然后将值填入payload,当作第一次爆破的参数,如果不填,那么第二次爆破才是有效的token。
设置线程为1,因为token爆破一次一密,多线程会造成token失效。
在options页面的grep-extract选项,添加要匹配的值,且复制token,填入前面payloads页面的第二个payload里。
配置完成后即可点击start attack开始爆破,可以看到爆破成功,帐密为admin/123456。
另一种宏定义:http://www.77169.net/html/188264.html
复制
4.fuzz测试
对于Web的fuzz测试,bp能胜任大部分的工作,前提是要有符合条件的字典,多种类高效的字典是每个渗透测试人员的必备武器,例如目录爆破,xss弹窗测试,文件上传黑名单遍历等,这些测试都需要相对应的字典来进行,达到高效测试的目的。
对于弱口令,我们在日常的工作测试中也要注意收集,时常更新自己的字典。针对特定的目标,要尽可能的收集各种信息,除了使用常规的字典,可以尝试用域名,年份,姓名拼写,公司名等的特殊组合密码,还有通过收集的信息生成社工字典进行突破。