文中涉及讲解burp爆破模块介绍可能不太准确,请大佬批评指正
就dvwa靶场而言,两个常见漏洞让我有了新的认知
第一个接触的漏洞为弱口令漏洞,常见情况下,人们口中的弱口令可能为“姓名缩写”“123456”“生日简写等”接触了dvwa,知道了弱口令不止这些,为此我接触到了各种各样的弱口令字典,如github的fuzzdict和burp自带的字典等,一般来说,弱口令可用的场景为常见登陆窗口,拿dvwa举例子
大概为这样,常规破解不应该为手动测试,更多的为工具测试,例如burp抓包后的破解方式,说到burp的抓包,更多的算是有一点代码审计能力,抓dnva登陆包为下
此为完整的抓包页面,默认情况下,我们只能抓到请求包,然后根据此请求包再拦截请求包对应的响应包
要想爆破出弱口令,应选择此请求包后右键放入攻击模块,也就是inteuder模块
放入后有4种攻击方式
狙击手模块
为单一模块攻击,只能攻击用户名或密码其中一个,使用场景为已知密码或已知用户名的情况下
撞击物模块
与狙击手模块相似,不过狙击手只能用来爆破其中一个的数据,而撞击物为二者相同攻击,为用户名和密码相同下使用
交叉模块
为双模块攻击,可以同时攻击用户名和密码两者,适用于只有一个弱口令字典情况下对用户名和密码都不知道的情景
集束炸弹模块
同样为双模块攻击,不过他适用于两个字典的拥有者,并且对登录窗口的用户名信息 密码信息有一些模糊的猜测情况下使用
言归正传
进行爆破前还有一个步骤,为设定要爆破的位置,此时需要一些分析请求包的基础,以下数据包进行示例
第一行为请求行,标明路径和请求方式还有http版本,后面的username对应着用户名,password为密码
第二行为要请求的域名,你要向谁发起请求,此行为谁的域名,例如你要对百度发起搜索去请求,那么第二行为baidu.com
......
选好位置示例
然后跳到位置旁边的payload模块,因为这里不知道靶场的用户名和密码,不过有些相关猜测,应该为很简单的弱口令,有些模糊概念,而且作者有好几本字典,所以攻击类型为集束炸弹,图中第一行位置模块选择攻击类型,payload模块导入字典
看图中第一个问号,下有一个payload集,默认为1,点击向下箭头还会有2,这代表着你选中的内容顺序,我喜欢将用户名先选中,为payload1,密码第二个选、为payload2
第二个问号代表字典导入,从文件中加载为导入文件按钮,而从列表中添加为导入burp自带的字典,其他的我们目前用不到,不多介绍
这里为导入后显示
然后点击右上角开始攻击按钮
会弹出这个窗口,代表爆破正在进行中
Ps:此图状态码302为错误,因为作者在爆破前忘记设置难度了qwq,已更正,正常爆破响应码为200
这里有一个很有意思的现象,因为判断一个弱口令是否登录会查看它的长度,长度只有独一无二才会代表登录成功,但是作者在等待途中迫不及待查看长度,发现有好几个长度独一无二的(一般来说,错误的长度基本是差不多)查看详情后发现均为带单引号的有,这代表存在sql注入点
可以进行万能密码尝试
进行尝试后发现可以登录
这就很有意思,至于为什么burp的万能密码没有成功,因为它使用的是admin’or”=” 注意,他前面有个单引号,所以没有闭合,引起数据库报错,这算是一种解决方法(后续会有关于SQL的解法,这里不多阐述)
正常解法:
我们跑了大概一万多种,暂停后查看,发现有两个与众不同的长度
发现基本大差不差,唯一的是大小写不同,用这个登录,发现登陆成功
所以在dvwa的低级难度,解决了这个靶场
我们换到中级难度,查看这个靶场,因为这个靶场之前有sql注入,这次我们先排查它
发现单引号没有引起数据库报错,所以这次不存在sql万能密码注入,我们再次进行burp抓包,看看请求包是否有改变
发现username和password都是明文传输,这里还可以用burp进行爆破,同样的步骤不多赘述(作者抓包破解一半发现爆破出了问题,查看源代码(后续会单独说明)是加入了sleep参数,也就是说发送登录请求间隔为两秒,可以在burp设置一下时间延迟参数,只要时间足够,密码会出来的)直接跳到高级难度步骤
因为中等难度没有sql注入,所以高级肯定没有,这里继续抓包查看密码是否为明文传输
发现多了token校验,token就像我们的身份证,具有唯一性,但是这有刷新的机制,所以这里还需要绕过token验证(每一次请求的token都是随机的)这次我们不在爆破用户名,所以password值为payload1,而usertoken为payload2。模式可能我讲的不是很准确,各位观众大大可以看看别人文章,模式我们选择交叉模式,注意,这里一定要把用户名填写为正确的admin,而不是乱输入,因为我们这次不爆破用户名!
具体步骤为 (算是本章重难点,所以全流程,全解析演示一遍,很重要的地方作者可能也理解错误,如果不对,请各位批评指正)
1 输入正确的用户名和错误密码,抓包(用户名一定要正确!!!)
2 放到intruder模块,选择交叉模块(一定是这个模块,因为它的特性)
3 定位payload1和2的位置(方便展示,作者password为payload1 usertoken为payload2)
3.5 Payload正常导入对应字典
在payload2中(重点)
先选择类型为递归提取,选择这个类型是因为token为随时随地变化的,不是固定,而递归提取会将这一过程自动化,虽然提高了难度,但是这个过程避免了手动的进程,提升效率,而递归提取,需要正则表达式,这个后期不能疏忽
4 选择intruder的设置模块
划到下边,找到检索-提取一栏,点击添加按钮
5 选择添加正则表达式 下 的获取响应
6 会出现网页代码,下滑找到usertoken字样,将token值勾选,burp会自动转换为正则表达式,所以这步一定在勾选时注意(不能多,也不能少)
7选中后确定,发现检索-提取 功能栏出现了正则表达式
8继续下滑,找到重定向,将跟随重定向选择为总是
(之所以选择重定向,是因为我们的user-token是每次刷新的,需要用到重定向来帮助我们提取新的user-token,而且我们选择的递归提取依赖于重定向,不启用重定向则提取到无用数据,导致token爆破失败)
9在这些都完成的情况下,就可以点击开始攻击了,进行爆破
结果
这里能够清晰地看到,前两位长度不同,是因为payload1也就是密码字典没有运行,所以他俩长度为4787,而查看第2个请求,payload1为password,payload2为usertoken,并且与其他不相同,我们尝试用这个登录
成功登录
代码分析,低难度
大概意思为,出一个登录窗口,分别为输入用户名(username)和密码(password)的输入框,并且将密码以MD5值的形式返回数据库,生成一个sql数据库语句,意思是将用户输入的用户名和密码和数据库存在的用户和密码进行对比,如果数据库存在且只有一条数据匹配,则会提取用户头像值,并重定向于新窗口,出现欢迎信息:Welcome to the password protected incorrect area字样
中等难度
基本没有什么变化,不过多了sql敏感词汇的校验和延迟时间(已图中标蓝)
高级难度
不同的是,增加了动态刷新token的交互代码(已图中标蓝)